基本ブロックの条件付きジャンプを無条件ジャンプに変更したい。したがって、基本ブロックに 2 つの後継ブロックがある場合、後継ブロックの 1 つへのエッジを削除したいと考えています。基本ブロックを後継ブロックに直接ジャンプさせたい。どうやってやるの?
私の主張を説明するために、私は変更したい
A
/ \
/ \
B C
に
A
\
\
C
基本ブロックの条件付きジャンプを無条件ジャンプに変更したい。したがって、基本ブロックに 2 つの後継ブロックがある場合、後継ブロックの 1 つへのエッジを削除したいと考えています。基本ブロックを後継ブロックに直接ジャンプさせたい。どうやってやるの?
私の主張を説明するために、私は変更したい
A
/ \
/ \
B C
に
A
\
\
C
最も簡単な方法は、新しい無条件分岐命令を作成し、古いものを置き換えることだと思います。したがって、次のようなものです:
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
BranchInst* Old = ...
BranchInst* New = BranchInst::Create(Old->getSuccessor(X));
ReplaceInstWithInst(Old, New);
X
「true」ブランチまたは「false」ブランチが必要かどうかに応じて、0 または 1 です。