1

我的问题很简单。给定分支类型的指令,我如何从中提取标签?例如:

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。

4

2 回答 2

0

首先检查inst->isConditional(),然后访问inst->getOperand(1)inst->getOperand(2)如果它是真的,inst->getOperand(0)如果它是假的。

整个 BasicBlock 是BranchInst实际接受的。如果你想要%if.then线路,然后打电话getName()给它。

于 2017-12-27T21:20:21.560 回答
0

我使用以下代码段来获取您询问的所有上述信息。

 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(); 

  }
于 2018-05-27T10:09:01.467 回答