【问题标题】:How to remove a successor from a terminator instruction in LLVM如何从 LLVM 中的终止符指令中删除后继指令
【发布时间】:2012-11-09 11:19:38
【问题描述】:

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

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

      A
    /  \
   /    \
  B      C

     A
      \
       \
        C

【问题讨论】:

    标签: c++ c compiler-construction llvm


    【解决方案1】:

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

    #include "llvm/Transforms/Utils/BasicBlockUtils.h"
    
    BranchInst* Old = ...
    BranchInst* New = BranchInst::Create(Old->getSuccessor(X));
    ReplaceInstWithInst(Old, New);
    

    X 是 0 还是 1,取决于你想要“真”分支还是“假”分支。

    【讨论】:

      猜你喜欢
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多