2017-01-31 18 views
0
for (BasicBlock::iterator i = bb->begin(), e = bb->end(); i != e; ++i) { 
    i.print(errs()); ??? 

私はLLVM PASSを書いていますし、私は基本ブロック内の命令のリストを取得したいが、私はそれらを見ることができるようにどのようにコンソール上でそれらをプリントアウトしていますか?上のコードは、私が試したコードを示しています、それは基本的なブロックのすべての命令を繰り返しますが、私は印刷機能のために以下のエラーを受け取ります。LLVMで命令をプリントアウトするにはどうすればよいですか?

error: ‘llvm::BasicBlock::iterator’ has no member named ‘print’ i.print(errs());

手順を印刷する方が良いでしょうか?

+0

ビルドエラーに関する質問を投稿する際には、実際のエラーを記載してください。 –

+0

ご意見ありがとうございました。私はエラーメッセージを追加しました。 – JavaLearner

+0

イテレータはポインタをエミュレートするので、逆参照演算子の1つを使用してイテレータの "値"にアクセスする必要があります。例えばのように。 'i-> print(...)'です。 –

答えて

1

問題は、命令ではなくイテレータを印刷しようとしていることです。次の方法のいずれかを試みることができます。基本ブロックを印刷するか、各命令を印刷することで、基本ブロックに命令を印刷することができます。

BasicBlock* bb = ...; // 
errs() << *bb; 
for (BasicBlock::iterator i = bb->begin(), e = bb->end(); i != e; ++i) { 
    Instruction* ii = &*i; 
    errs() << *ii << "\n"; 

両方の印刷結果が同じ結果を出力します。

関連する問題