10

BasicBlockLLVM フレームワークで a の前任者を取得する最も簡単な方法は何ですか?

DepthFirstIteratorとを見てみましたidf_iterator<BasicBlock*>が、実際には制御フロー グラフで幅優先検索を行う必要があります。

これは簡単だと思いますが、ドキュメントやオンラインで調べた例からは明らかではありません。

4

2 に答える 2

8

Programmer's Manual のfor-each ループを使用して、先行または後続を反復処理する簡単な方法を示します。

で定義されたルーチンを使用すると、ブロックの先行および後続を反復処理するのは非常に簡単llvm/IR/CFG.hです。次のようなコードを使用して、BB のすべての前任者を反復処理します。

#include "llvm/IR/CFG.h"
BasicBlock *BB = ...; 
for (BasicBlock *Pred : predecessors(BB)) {
  // ...
}

同様に、後継者を反復するには、 を使用しますsuccessors

pred_beginこれは、 and で明示的な反復を使用するよりもずっとクリーンですpred_end

于 2018-03-20T20:16:50.260 に答える