「外部」(.so/.dylib) LLVM プラグイン (モジュール) パスを LTO 時間にスケジュールすることが現在可能かどうか疑問に思っていましたか? これが必要な理由は、モジュール間の最適化を追加したいからです。
このトピックも見つけました。LLVM でカスタムのインターモジュラー パスを作成するには? しかし、別のツールは私にとって選択肢ではありません。
ありがとう
「外部」(.so/.dylib) LLVM プラグイン (モジュール) パスを LTO 時間にスケジュールすることが現在可能かどうか疑問に思っていましたか? これが必要な理由は、モジュール間の最適化を追加したいからです。
このトピックも見つけました。LLVM でカスタムのインターモジュラー パスを作成するには? しかし、別のツールは私にとって選択肢ではありません。
ありがとう
ここで最も役立つのは、パスがどのように実行され、LTO 中のコードの状態がどのようなものであるかを理解することだと思います。
まず第一に、最適化パスがコンパイラによって実行されるとき、それらは に追加されたセットとして実行されPassManager
ます。これは、LLVM/Clang
のようなものが渡される-O3
と、 のコピーを作成し、その後、最適化のレベルPassManager
を提供すると予想される一連のパスを提供することを意味します。O3
これは、手動で提供する必要があり、通常はパス パイプラインに収まらない外部ライブラリで行っていることとは大きく異なります。
次に、LTO を実行するときの状態があります。リンク時の最適化中に、個々の翻訳単位はすべて統合され、単一のModule
. これは、各関数で実行される最適化が、コード ベース内のすべての関数で実行されることを意味します。同様に、モジュールごとの最適化が完全に実行されるModule
ため、手続き間の分析/最適化が提供されます。
Intra-Modular Pass の使用を検討している場合、LTO 時にこれを行う理由はありません。代わりに、単純ModulePass
に各ユニットでそれを作成して実行することができます。