Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从LLVM中的终止符指令中删除后续指令_C++_C_Compiler Construction_Llvm - Fatal编程技术网

C++ 如何从LLVM中的终止符指令中删除后续指令

C++ 如何从LLVM中的终止符指令中删除后续指令,c++,c,compiler-construction,llvm,C++,C,Compiler Construction,Llvm,对于基本块,我想将条件跳转更改为无条件跳转。因此,如果一个基本块有两个后续块,我想删除其中一个后续块的边。我希望基本块直接跳到一个后续块。我该怎么做 为了说明我的观点,我想改变一下 A / \ / \ B C 到 我认为最简单的方法就是创建一个新的无条件分支指令,然后用它替换旧的分支指令。比如说: #include "llvm/Transforms/Utils/BasicBlockUtils.h" BranchInst* Old = ... B

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

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

      A
    /  \
   /    \
  B      C


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

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

BranchInst* Old = ...
BranchInst* New = BranchInst::Create(Old->getSuccessor(X));
ReplaceInstWithInst(Old, New);
其中
X
为0或1,这取决于您想要的是“真”分支还是“假”分支

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

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