1

特定の定数と関数がメモリ内で連続するように LLVM を変更しようとしています。
言い換えれば、特定の関数のマシン コードの前に、メモリ内で常に ~4 バイトの定数があることを確認する必要があります関数本体自体は変更しないでください。

LLVM IR を何らかの方法で変更するだけでこれを達成できますか?

  • はいの場合: 変数と関数をメモリ内で連続した状態に保つために、LLVM IR でどのように記述しますか?

  • 「いいえ」の場合: これを実現するには、コード生成プロセスのどの部分 (つまり、どのパス) を変更する必要がありますか? どこから始めればよいかわからないので、私が見るべきプロジェクト/ファイルへのリンクは役に立ちます。

4

1 に答える 1

0

私の知る限り、IR を変更するだけではそれができないと思います。自分でそれを処理するために何かを書く必要があります。これもパスであってはなりません。レベルが低すぎるため、ターゲット固有のコード生成中に実行する必要があります。既存のターゲットに便乗して、この側面を変更するだけで済みます。もちろん、新しいターゲットをゼロから作成する必要はありません。ただし、どの場所がこれに適しているかは正確にはわかりません。

コード生成中に IR レベルから DAG にこの情報を渡す良い方法は、メタデータを使用することだと思います: メタデータを関数または関連する定数のいずれかに添付して、それらを相互にリンクし、後でそのリンクを使用してそれらをまとめて放出します。メタデータの転送方法については、llvm-dev のこのスレッドを参照してください。

于 2012-11-01T14:15:35.353 に答える