3

私のパスで IR のコメントを使用することは可能ですか? 基本的には、以下に示すように、コメントに書かれている基本ブロック周波数で注釈が付けられた IR を使用したいので、パスに周波数値が必要です。これが単純な方法であることはわかっていますが、それで十分です。

define internal void @MDFilter() #0 {  
entry:  
    ;;; Basic block executed 2 times.  <-- I NEED THIS COMMENT AS A STRING IN MY PASS
  %mdContext = alloca %struct.MD5_CTX, align 8  
  %bytes = alloca i32, align 4  
  %data = alloca [16 x i8], align 16  
  call void @MD5Init(%struct.MD5_CTX* %mdContext)  
  br label %while.cond  
    ;;; Out-edge counts: [2.000000e+00 -> while.cond]  

この情報を取得する他の方法も大歓迎です。

4

1 に答える 1

6

いいえ、IR パーサーを大幅に変更しない限り、コメントの内容をこのように使用する方法はありません。ただし、車輪を再発明する必要はありません。LLVM には、これらの種類のもの (フロントエンドから LLVM パスに情報を転送すること) を正確に意図したメカニズムがあり、それがメタデータです。

したがって、この情報を IR に追加する人は誰でも、代わりにメタデータを追加する必要があります。その方法の詳細については、次のソースを参照してください。

データの生成を制御できない場合は、コメントをメタデータに変換する前処理ステップを追加する必要があります。

最終的に、IR は次のようになります。

内部ボイドを定義 @MDFilter() #0 {  
エントリ:  
  %mdContext = alloca %struct.MD5_CTX, align 8 , !freq !1
  %bytes = alloca i32、アライン 4  
  %data = alloca [16 x i8]、アライン 16  
  void @MD5Init(%struct.MD5_CTX* %mdContext) を呼び出す  
  br label %while.cond , !outedge !2

...

!1 = メタデータ !{i32 2}
!2 = メタデータ !{float 2.0}

!freqそして、パスはこれらと!outedgeノードを探す必要があります。

于 2013-06-21T14:18:34.343 に答える