当前位置: 首页>>代码示例>>C++>>正文


C++ BasicBlock::getBasicBlockId方法代码示例

本文整理汇总了C++中BasicBlock::getBasicBlockId方法的典型用法代码示例。如果您正苦于以下问题:C++ BasicBlock::getBasicBlockId方法的具体用法?C++ BasicBlock::getBasicBlockId怎么用?C++ BasicBlock::getBasicBlockId使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在BasicBlock的用法示例。


在下文中一共展示了BasicBlock::getBasicBlockId方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: phiOperandsExistsInPredecessorBlock

	bool ConsistencyChecker::phiOperandsExistsInPredecessorBlock(PhiInstruction* phiInstruction) {
		BasicBlock* parentBlock = phiInstruction->getInBasicBlock();
		int numberOfOperands = phiInstruction->numberOfOperands();
		char errorMessage[256];

		for (int i = 0; i < numberOfOperands; i++) {
			BasicBlock* operandBlock = phiInstruction->getIncomingEdge(i);
			TessaInstruction* phiOperand = phiInstruction->getOperand(operandBlock);
			BasicBlock* phiOperandBlock = phiOperand->getInBasicBlock();

			VMPI_snprintf(errorMessage, sizeof(errorMessage), "Phi %d has operand %d with incoming block %d, but operand does not exist in block\n\n",
					phiInstruction->getValueId(), phiOperand->getValueId(), operandBlock->getBasicBlockId());
			AvmAssertMsg(operandBlock == phiOperandBlock, errorMessage);
		}

		return true;
	}
开发者ID:changm,项目名称:tessa,代码行数:17,代码来源:ConsistencyChecker.cpp

示例2: allPhiOperandsArePredecessors

	bool ConsistencyChecker::allPhiOperandsArePredecessors(PhiInstruction* phiInstruction) {
		BasicBlock* parentBlock = phiInstruction->getInBasicBlock();
		int numberOfOperands = phiInstruction->numberOfOperands();
		char errorMessage[64];

		for (int i = 0; i < numberOfOperands; i++) {
			BasicBlock* operandBlock = phiInstruction->getIncomingEdge(i);
			List<BasicBlock*, LIST_GCObjects>* successors = operandBlock->getSuccessors();
			if (!successors->contains(parentBlock)) { 
				VMPI_snprintf(errorMessage, sizeof(errorMessage), "Phi %d has incoming block %d, but block is not a predecessor\n", 
					phiInstruction->getValueId(), operandBlock->getBasicBlockId());
				printf(errorMessage);
				return false;
			}
		}

		return true;
	}
开发者ID:changm,项目名称:tessa,代码行数:18,代码来源:ConsistencyChecker.cpp

示例3: checkAllBlocksHaveTerminators

	void ConsistencyChecker::checkAllBlocksHaveTerminators() {
		/*** 
		 * Have to do reverse post order because some blocks may be dead due to weird control flow (breaks/continue statements)
		 */
		List<BasicBlock*, LIST_GCObjects>* basicBlocks = _functionToCheck->getBasicBlocksInReversePostOrder();
		TessaAssert(basicBlocks != NULL);

		char messageBuffer[64];
		for (uint32_t i = 0; i < basicBlocks->size(); i++) {
			BasicBlock* currentBasicBlock = basicBlocks->get(i);
			TessaInstruction* lastInstruction = currentBasicBlock->getLastInstruction();

			VMPI_snprintf(messageBuffer, sizeof(messageBuffer), "BB %d does not have terminator instruction\n", currentBasicBlock->getBasicBlockId());
			TessaAssertMessage(lastInstruction->isBlockTerminator(), messageBuffer);
			if (!lastInstruction->isBlockTerminator()) {
				printf("%s\n", messageBuffer);
			}
		}
	}
开发者ID:changm,项目名称:tessa,代码行数:19,代码来源:ConsistencyChecker.cpp

示例4: checkAllBlocksWithMultiplePredecessorsHavePhi

	void ConsistencyChecker::checkAllBlocksWithMultiplePredecessorsHavePhi() {
		List<BasicBlock*, LIST_GCObjects>* basicBlocks = _functionToCheck->getBasicBlocksInReversePostOrder();
		TessaAssert(basicBlocks != NULL);
		char messageBuffer[64];
		for (uint32_t i = 0; i < basicBlocks->size(); i++) {
			BasicBlock* currentBasicBlock = basicBlocks->get(i);
			
			if (currentBasicBlock->getPredecessors()->size() > 1) {
				List<TessaInstruction*, LIST_GCObjects>* instructions = currentBasicBlock->getInstructions();

				for (uint32_t j = 0; j < instructions->size(); j++) {
					TessaInstruction* instruction = instructions->get(j);
					if (instruction->isParameter()) {
						ParameterInstruction* paramInstruction = (ParameterInstruction*) instruction;
						TessaInstruction* forwardInstruction = paramInstruction->resolve();

						VMPI_snprintf(messageBuffer, sizeof(messageBuffer), "BB %d Param %d does not map to Phi \n", currentBasicBlock->getBasicBlockId(), paramInstruction->getValueId());
						TessaAssertMessage(forwardInstruction->isPhi(), messageBuffer);

						if (!forwardInstruction->isPhi()) {
							printf("%s\n", messageBuffer);
						}
					}
				}
			}
		}
	}
开发者ID:changm,项目名称:tessa,代码行数:27,代码来源:ConsistencyChecker.cpp

示例5: checkAllBlocksHaveOneTerminator

	void ConsistencyChecker::checkAllBlocksHaveOneTerminator() {
		List<BasicBlock*, LIST_GCObjects>* basicBlocks = _functionToCheck->getBasicBlocksInReversePostOrder();
		TessaAssert(basicBlocks != NULL);
		char messageBuffer[64];
		for (uint32_t i = 0; i < basicBlocks->size(); i++) {
			BasicBlock* currentBasicBlock = basicBlocks->get(i);
			List<TessaInstruction*, LIST_GCObjects>* instructions = currentBasicBlock->getInstructions();
			int numberOfTerminators = 0;

			for (uint32_t j = 0; j < instructions->size(); j++) {
				if (instructions->get(j)->isBlockTerminator()) {
					numberOfTerminators++;
				}
			}

			VMPI_snprintf(messageBuffer, sizeof(messageBuffer), "BB %d has %d terminators instruction\n", currentBasicBlock->getBasicBlockId(), numberOfTerminators);
			TessaAssertMessage(numberOfTerminators == 1, messageBuffer);
			if (numberOfTerminators != 1) {
				printf("%s\n", messageBuffer);
			}
		}
	}
开发者ID:changm,项目名称:tessa,代码行数:22,代码来源:ConsistencyChecker.cpp


注:本文中的BasicBlock::getBasicBlockId方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。