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

标签 c++ c compiler-construction llvm

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

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

      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,具体取决于您想要“真”分支还是“假”分支。

关于c++ - 如何从 LLVM 中的终止符指令中删除后继指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13307142/

相关文章:

c++ - 是否有任何用 C/C++ 编码的回归测试来测试 CString (ATL/MFC) 的所有功能?

c++ - 不同的输出调试与发布

c - 是否可以仅通过某些调用内联函数

c - 如何使用 WM_COPYDATA 在使用 JNI 的 Java 程序之间发送字符串?

c - 计算平均程序时输出错误

c++ - 如何在 Visual Studio 中知道项目是 C 还是 C++?

c# - ConditionalAttribute 和其他特殊类

C++ 避免对未使用的代码部分发出警告

c++ - 命名空间与函数同名

c - 数组内容无法正确显示