2012-02-17 13 views
6

私はLLVMを使用していましたが、私は自分のパスから既に別のパスを使用する方法を混乱させましたか?正確に私のプログラムは、任意の指示にDominance Frontier Calculationを必要とします。 LLVMには既にDominance関数Classがあり、関数パスとして実装されています。私はそれを私のモジュールパスで呼び出すことができますか?LLVMパスから既存の関数パスを使用するにはどうすればよいですか?

+0

はあなたがドキュメントをチェックしましたか?前回チェックしたので、答えはそこにありました:http://llvm.org/docs/WritingAnLLVMPass.html – Fanael

+0

パス 'getAnalysisUsage(AnalysisUsage&AU)'メソッドに 'AU.addRequired ();'を追加してください。 – osgx

+0

文書は本当に不明瞭で、私はそれを解読するのに本当の問題がありました。例が助けになりました。 – Sharad

答えて

3

警告:私は実際の経験はなく、答えは間違っているか、古くなっている可能性があります。 (それは大部分が時代遅れLLVM源に基づいています:version 1.3。)

含まれます:

#include "llvm/Analysis/DominanceFrontier.h" 

あなたのパス場合(それが実装されていない場合)機能パスは、あなたのクラスにメソッドを追加した場合:

virtual void getAnalysisUsage(AnalysisUsage &AU) const { } 

そして、それにこれを置く:

AU.addRequired<DominanceFrontier>(); 

を次に、あなたのクラスで方法:あなたが使用することができます。この後

DominanceFrontier *DF = &getAnalysis<DominanceFrontier>(); 

BasicBlock *BB = /* some BB */; 
    DominanceFrontier::iterator DFI = DF->find(BB); 
+0

ありがとうございます。私はこれを試してみる。 – Sharad

+0

ありがとうございます。できます。イテレータのタイプを変更するだけでした。 – Sharad

関連する問題