LLVMの互換性

GraalVMでは、LLVMビットコード・バージョン4.0から12.0.1がサポートされています。GraalVMに付属のLLVMツールチェーンを使用することをお薦めします。

最適化フラグ

LLVM言語の静的コンパイル・モデルとは対照的に、GraalVMではマシン・コードはLLVMビットコードから直接生成されません。Graalコンパイラによる追加の動的コンパイル・ステップがあります。

最初に、LLVMフロントエンド(clangなど)がビットコード・レベルで最適化を実行し、次にGraalコンパイラがそれに加えて動的コンパイル中に独自の最適化を実行します。最適化は、ビットコードに対して事前に行う方が適している場合と、Graalコンパイラの動的コンパイルの時点で、プロファイリング情報が使用可能な状態で行う方が適している場合があります。

GraalVMに付属のLLVMツールチェーンでは、推奨されるフラグがデフォルトで自動的に選択されます。

一般的に、すべての最適化レベルが機能しますが、より望ましい結果を得るには、ビットコードを最適化レベル-O1でコンパイルすることをお薦めします。

言語間の相互運用性には、-mem2reg最適化が必要です。これには2通りの方法があり、少なくとも-O1を使用してコンパイルするか、またはoptツールを使用して-mem2reg最適化を手動で適用します。