C++ 如何从LLVM中的终止符指令中删除后续指令
对于基本块,我想将条件跳转更改为无条件跳转。因此,如果一个基本块有两个后续块,我想删除其中一个后续块的边。我希望基本块直接跳到一个后续块。我该怎么做 为了说明我的观点,我想改变一下C++ 如何从LLVM中的终止符指令中删除后续指令,c++,c,compiler-construction,llvm,C++,C,Compiler Construction,Llvm,对于基本块,我想将条件跳转更改为无条件跳转。因此,如果一个基本块有两个后续块,我想删除其中一个后续块的边。我希望基本块直接跳到一个后续块。我该怎么做 为了说明我的观点,我想改变一下 A / \ / \ B C 到 我认为最简单的方法就是创建一个新的无条件分支指令,然后用它替换旧的分支指令。比如说: #include "llvm/Transforms/Utils/BasicBlockUtils.h" BranchInst* Old = ... B
A
/ \
/ \
B C
到
我认为最简单的方法就是创建一个新的无条件分支指令,然后用它替换旧的分支指令。比如说:
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
BranchInst* Old = ...
BranchInst* New = BranchInst::Create(Old->getSuccessor(X));
ReplaceInstWithInst(Old, New);
其中X
为0或1,这取决于您想要的是“真”分支还是“假”分支
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
BranchInst* Old = ...
BranchInst* New = BranchInst::Create(Old->getSuccessor(X));
ReplaceInstWithInst(Old, New);