如何从LLVM中的终止符指令中删除后继

pyt*_*nic 4 c c++ compiler-construction llvm

对于基本块,我想将条件跳转更改为无条件跳转.因此,如果一个基本块有两个后继者,我想删除其中一个后继者的边缘.我希望基本块直接跳转到其中一个继承者.我怎样才能做到这一点?

为了说明我的观点,我想改变

      A
    /  \
   /    \
  B      C
Run Code Online (Sandbox Code Playgroud)

     A
      \
       \
        C
Run Code Online (Sandbox Code Playgroud)

Oak*_*Oak 6

我认为最简单的方法就是创建一个新的无条件分支指令,然后用它替换旧指令.所以,像:

#include "llvm/Transforms/Utils/BasicBlockUtils.h"

BranchInst* Old = ...
BranchInst* New = BranchInst::Create(Old->getSuccessor(X));
ReplaceInstWithInst(Old, New);
Run Code Online (Sandbox Code Playgroud)

其中X0或1,取决于您是否需要"true"分支或"false"分支.