4

基本ブロックの条件付きジャンプを無条件ジャンプに変更したい。したがって、基本ブロックに 2 つの後継ブロックがある場合、後継ブロックの 1 つへのエッジを削除したいと考えています。基本ブロックを後継ブロックに直接ジャンプさせたい。どうやってやるの?

私の主張を説明するために、私は変更したい

      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);

X「true」ブランチまたは「false」ブランチが必要かどうかに応じて、0 または 1 です。

于 2012-11-15T16:29:18.120 に答える