【问题标题】:llvm - get label of br instructionllvm - 获取 br 指令的标签
【发布时间】:2017-12-27 15:56:40
【问题描述】:

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

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->getOperand(0)?
  • 我试过了。它在条件存在的情况下返回条件,当它不存在时,例如在 %if.end 中,它返回整个基本块。

标签: label llvm branch llvm-ir llvm-3.0


【解决方案1】:

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

整个 BasicBlock 是 BranchInst 实际接受的。如果你想要%if.then 线,然后调用getName() 就可以了。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 请注意 inst->getOperand(2)->getName() 给出 %if.then 而 inst->getOperand(1)->getName() 给出 %if.end 标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多