对于基本块,我想将条件跳转更改为无条件跳转。因此,如果一个基本块有两个后继者,那么我想删除其中一个后继者的边缘。我希望基本块直接跳到后继之一。我怎样才能做到这一点?
为了说明我的观点,我想改变
A
/ \
/ \
B C
到
A
\
\
C
最佳答案
我认为最简单的方法就是创建一个新的无条件分支指令,然后用它替换旧的。因此,类似:
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
BranchInst* Old = ...
BranchInst* New = BranchInst::Create(Old->getSuccessor(X));
ReplaceInstWithInst(Old, New);
X
为0或1,具体取决于您是否要使用“true”分支或“false”分支。