如何获取给定指令的下一条立即指令?

How to get the next immediate instruction for a given instruction?

我正在寻找一种正确的方法来获取给定指令之后的下一条即时指令。

假设我有以下内容:

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

我有一个

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

对应%10.

如何访问我的 CmpInst 之后的 BranchInst

我认为解决方案应该考虑两种情况:何时有下一条指令,何时没有指令,即它是 BasicBlock.

的结尾

原来这么简单:

Instruction *instruction = cmpInst->getNextNode();

同意前面的回答cmpInst->getNextNode(),在我看过的几个项目中都有出现

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