2017-12-03 7 views
3

コードの制御フローをチェックするパスを作成しようとしています。 br命令があれば、ラベルフィールドで参照される基本ブロックにアクセスする必要があります。llvm - タイプbrの命令のラベルフィールドで参照される基本ブロックの最初の命令を取得します。

は例えば、コードのために:

for(i = 0; i < count; i++){ 
    sum = add(sum, array[i]); 
    } 

私は、私はパスで、この命令に遭遇したときに今、私はこれらのラベルがある場所を正確に知っておく必要がありIR表現

br i1 %cmp, label %for.body, label %for.end 

を取得しますを指しています。誰も私がそれをどうやってできるか教えてもらえますか?

答えて

0

その命令のために->getOperand(1)->getOperand(2)メソッドを呼び出します。これにより、それぞれ1番目と2番目のBBが得られます。 http://llvm.org/doxygen/classllvm_1_1User.html#abe1de1520a21f77ac57cc210bf0fb0b4

+0

お返事ありがとうございます!それも動作しますが、代わりにBranchInst * branch = castを使用しています(I);用(符号なしII = 0、NSucc =たブランチ> getNumSuccessors(); II getSuccessor (II);} – eren555

+0

申し訳ありませんが、フォーマットが間違っているので、私はとても新しいので、コメントのコードの書式設定方法はわかりません。 – eren555

関連する問題