如何获取给定指令的下一条立即指令?
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(...)
.
我正在寻找一种正确的方法来获取给定指令之后的下一条即时指令。
假设我有以下内容:
%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(...)
.