3

任意のコードで gcc 最適化パスを実行し、最終的に llvm IR を取得することは可能ですか? gcc で利用できるデッド ストアの削除を使用したい。llvm にもこのパスがあることは承知していますが、gcc ほど高度ではありません。

4

1 に答える 1

2

私は経験がなく、試したこともありませんが、次のコマンドラインは DragonEgg バージョン 3.0 以降で動作するはずです。

-fplugin=./dragonegg.so -O0 -fdse -fplugin-arg-dragonegg-enable-gcc-optzns -fplugin-arg-dragonegg-llvm-ir-optimize=2 -fplugin-arg-dragonegg-emit-ir -S

  • -fplugin=./dragonegg.soドラゴンエッグを有効にする
  • -O0すべての GCC 最適化パスをオフにします
  • -fdseGCCデッドストアの削除をオンにします
  • -fplugin-arg-dragonegg-enable-gcc-optznsDragonEgg で GCC 最適化を有効にします
  • -fplugin-arg-dragonegg-llvm-ir-optimize=2-O2GCC 最適化レベルに従うのではなく、LLVM に最適化を強制します。
  • -fplugin-arg-dragonegg-emit-irasm の代わりに LLVM IR を生成します。これは、質問によると、ここで必要なものです
  • -S使うときにちょっと必要だから-fplugin-arg-dragonegg-emit-ir

そして、これはどのGCC ツリー パスでも機能するはずです。

これより細かい制御が必要な場合は、DragonEgg を微調整できます。編集する正しい場所は、Backend.cppplugin_init内の関数です。そこで実行するパスがどのように設定されているかを正確に確認できます。

于 2013-08-15T08:32:47.050 に答える