2013-05-08 12 views
5

私は、パスの1つでllvmで制御フローグラフダイアグラムを作成します。私は現在、問題は、それがウィンドウをポップアップするということであるCFGllvmダンプ制御フローグラフをパス内のファイルに書き込む

block->getParent()->viewCFG(); //block is a basic block 

を表示するには、次を使用します。私はちょうどその特定のプログラムポイントで、ドットファイル(または可能であればjpg)として、ウィンドウに表示されないようにcfgをダンプします。どうすれば同じことができますか?私はllvm 3.1を使用しています。

注:私はそのプログラムポイントの前に、自分のパスでcfgを変更しています。したがって、opt -view-cfgは使用できません。

更新:Mishrに

おかげで、私はCFGが示されている。この

WriteGraph(File, (const llvm::Function*) &fun, true, "test"); //I have also tired with false

でグラフを描くことができました。しかし、ノードは空白です。ノードの内容を表示するにはどうすればいいですか

答えて

3

これを見て、viewCFG()関数の前のコメントを読んでください。

http://llvm.org/docs/doxygen/html/CFGPrinter_8cpp_source.html

viewCFG()機能は新しいウィンドウでCFGを印刷するためのものです。ファイルにCFGをダンプするには、CFGPrinterを使用しなければなりません。これは、ハンドルdot-cfgによって呼び出すことができます。あなたが追加する必要があり

+0

ありがとうございます。それを使用する方法についての参考資料を与えてください。 – simpleuser

+0

'CFGPrinter'がパスしたときに、' opt'でそれを使うことができます。 – shrm

+0

しかし、グラフを描画するプログラムポイントをどのように指定すればよいですか?いくつかのサンプルの使用法を指すことができれば素晴らしいでしょう。 – simpleuser

1

は、次のとおりです。 #include <llvm\Analysis\CFGPrinter.h>

それが正しいノードラベルを提供する内部のgetEdgeSourceLabel実装を持っています。 同時に、にはが含まれていないことを確認してください。デフォルトで空のラベルを提供しているので、<llvm\Support\CFG.h>ファイルが含まれています。

2

私はssubbotinの答えに何かを追加しましょう。 質問を約

DOTGraphTraits<const Function*> 

CFGPrinterによって提供されます。それを動作させるために

WriteGraph<const llvm::Function*>(...) 

は、私の場合は、そのような呼び出しを使用する必要がありました。

関数テンプレートの定義は、以下のようなものです:

template<typename GraphType> 
raw_ostream &WriteGraph(raw_ostream &O, const GraphType &G, 
         bool ShortNames = false, 
         const Twine &Title = "") 

のでGraphTypeとは、暗黙のテンプレートの呼び出しで非constを取得します。

+1

これはそれ自身で回答するよりも、関連する回答にコメントとして追加することをお勧めします。 – SuperBiasedMan

+0

ええ、残念ながら私は十分なランクがありません:\ – wvoquine

関連する問題