我的问题很简单。给定分支类型的指令,我如何从中提取标签?例如:
br label %while.cond
应该给我 while.cond
br label %while.end
应该给我while.end
br i1 %cmp1, label %if.then, label %if.end
应该分别给我 if, if.then, if.end。
首先检查inst->isConditional()
,然后访问inst->getOperand(1)
,inst->getOperand(2)
如果它是真的,inst->getOperand(0)
如果它是假的。
整个 BasicBlock 是BranchInst
实际接受的。如果你想要%if.then
线路,然后打电话getName()
给它。
我使用以下代码段来获取您询问的所有上述信息。
if (inst->getNumSuccessors() == 1)
return; //indicates not a branching instruction
unsigned int i;
for (i = 0; i <= inst->getNumSuccessors(); i++) {
llvm::outs() << inst->getOperand(i)->getName();
}