【问题标题】:llvm - get the first instruction of the basic block referred to in the label field of instruction of type brllvm - 获取 br 类型指令的标签字段中引用的基本块的第一条指令
【发布时间】:2017-12-03 19:53:59
【问题描述】:

我正在尝试编写一个检查代码控制流的过程。给定 br 指令,我需要访问标签字段中引用的基本块。

例如,对于代码:

 for(i = 0; i < count; i++){
    sum = add(sum, array[i]);
  }

我得到了 IR 表示

br i1 %cmp, label %for.body, label %for.end

现在,当我在 pass 中遇到这条指令时,我需要知道这些标签所指向的确切位置。谁能告诉我该怎么做?

【问题讨论】:

    标签: llvm llvm-ir control-flow control-flow-graph llvm-3.0


    【解决方案1】:

    为该指令调用 -&gt;getOperand(1)-&gt;getOperand(2) 方法。这将分别给您第 1 和第 2 BB。见http://llvm.org/doxygen/classllvm_1_1User.html#abe1de1520a21f77ac57cc210bf0fb0b4

    【讨论】:

    • 感谢您的回复!这也有效,但我改为使用 BranchInst* branch = cast(I); for (unsigned II = 0, NSucc = branch->getNumSuccessors(); II getSuccessor(II);}
    • 抱歉格式错误,我是 SO 新手,不知道如何在 cmets 中格式化代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多