1

私はLLVMフレームワークとコンパイラの分野に不慣れです。私はそれに精通しようとしています。コンパイラでいくつかの予備的な読みをした後、私は次の質問があります:

LLVMJITで関数のインライン化がどのように行われるのか知りたいです。これは、jitコンパイル時に使用される静的インラインで使用されるパスと同じですか?実行時(つまり、jitコンパイル時)の情報は静的コンパイル時と比較して優れているため、いくつかのより優れた最適化パス(安価です)時間の観点から)を使用することができます。

私は何かが足りないのですか?私はこの点でいくつかの助けに本当に感謝しています。

前もって感謝します。

4

1 に答える 1

3

あなたは何も見逃していません。LLVM は、静的コンパイラにより適しています。基本的な意味での JIT コンパイルは問題なくサポートされています (実際には、MCJIT の出現によってかなりうまくいきます)。IR からインメモリ マシン コードに手間をかけずに移行できます。ただし、そのままでは実行のトレースやプロファイリングなどは行いません。それらを追加することはできますが、私の知る限り、既に発行されたコードにパッチを適用するためのサポートはせいぜい制限されています (つまり、おそらく大量のコードを再コンパイルする必要があります)。また、いつでもコードを追加してメトリックを収集し、これらを利用する (または JIT コンパイラーの要件に合わせて調整する) 独自の最適化パスを作成できますが、これにはかなりの労力がかかります。参照:空荷ツバメ回顧展(第 3 セクション。この投稿は 1 年以上前のものであることに注意してください)。

于 2012-08-22T14:43:36.130 に答える