4

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

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

      A
    /  \
   /    \
  B      C

     A
      \
       \
        C
4

1 回答 1

6

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

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

BranchInst* Old = ...
BranchInst* New = BranchInst::Create(Old->getSuccessor(X));
ReplaceInstWithInst(Old, New);

0 或 1在哪里X,取决于您想要“真”分支还是“假”分支。

于 2012-11-15T16:29:18.120 回答