如何获得给定指令的下一个即时指令?

时间:2017-05-17 20:27:56

标签: llvm llvm-ir

我正在寻找一种正确的方法来获得遵循给定指令的下一个立即指令。

我们假设我有以下内容:

%10 = icmp slt i32 %8, %9
br i1 %10, label %11, label %17

我有一个

  CmpInst *cmpInst = dyn_cast<CmpInst>(&V);

对应%10

如何访问BranchInst后面的CmpInst

我认为解决方案应该考虑两种情况:当有下一条指令时,如果没有,即它是BasicBlock的结尾。

2 个答案:

答案 0 :(得分:6)

事实证明这很简单:

Instruction *instruction = cmpInst->getNextNode();

答案 1 :(得分:0)

我同意之前的答案 cmpInst->getNextNode(),它出现在我看过的几个项目中。

但是,根据 link 中的另一个答案,getNextNode() 是 LLVM API 深处内容的内部实现细节。因此,我更喜欢使用 cmpInst->getNextNonDebugInstruction(),它可以跳过诸如 call void @llvm.dbg.declare(...) 之类的内在指令。