本文整理汇总了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;
}
示例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;
}
示例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);
}
}
}
示例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);
}
}
}
}
}
}
示例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);
}
}
}