BasicBlock
LLVM フレームワークで a の前任者を取得する最も簡単な方法は何ですか?
DepthFirstIterator
とを見てみましたidf_iterator<BasicBlock*>
が、実際には制御フロー グラフで幅優先検索を行う必要があります。
これは簡単だと思いますが、ドキュメントやオンラインで調べた例からは明らかではありません。
BasicBlock
LLVM フレームワークで a の前任者を取得する最も簡単な方法は何ですか?
DepthFirstIterator
とを見てみましたidf_iterator<BasicBlock*>
が、実際には制御フロー グラフで幅優先検索を行う必要があります。
これは簡単だと思いますが、ドキュメントやオンラインで調べた例からは明らかではありません。
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
。