LLVM を使用してコンパイル時に静的コード機能 (命令数など) を抽出し、これらの値を格納してプログラムの実行中に使用できるようにする方法を探しています。
これは TransformationPasses で実行できますか。この概念は LLVM のドキュメントではわかりません。
LLVM を使用してコンパイル時に静的コード機能 (命令数など) を抽出し、これらの値を格納してプログラムの実行中に使用できるようにする方法を探しています。
これは TransformationPasses で実行できますか。この概念は LLVM のドキュメントではわかりません。
まず、必要な情報を計算するパスを作成する必要があります。次に、その情報をモジュールに注入する必要があります。比較的簡単な方法は、呼び出されたときに計算された値を返す関数を生成することです。
プログラマーは、これらの特別な値を受け取りたい場合、これらの関数を呼び出す必要があります。プログラマーはおそらく自分で署名を追加する必要がありますが、パスは定数値を返すだけdeclare
の実際の値に置き換えます。define
これらの関数にもインラインとして注釈を付ける必要があります。
特別な変数やパラメーターなどを置き換えることでこれを行うこともできますが、関数呼び出しはエレガントなアプローチのように思えます。
あなたの質問は一般的すぎます。TransformationPasses はコードを変換します (デッド コードの削除など)。分析には、分析パスがあります。これらのパスを編集して、必要なものを取得できます。
まず、独自の分析パスを作成できます: http://llvm.org/docs/WritingAnLLVMPass.html。次に、runOnFunction() のような関数があります (命令イテレータまたは基本ブロック イテレータを使用できます)。命令をカウントする特定の例については、 runOnFunction() または LLVM メソッド内でカウンターを使用してください。