Low Level Virtual Machine

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Low Level Virtual Machine
開発元 LLVM Developer Group
最新版 2.5 / 2009年3月2日
プラットフォーム クロスプラットフォーム
種別 コンパイラ
ライセンス University of Illinois Open Source License
公式サイト http://llvm.org
  

Low Level Virtual Machine (LLVM) とは、コンパイル時、リンク時、実行時などあらゆる時点でプログラムを最適化するよう設計された、任意のプログラミング言語に対応可能なコンパイラ基盤である。

LLVM を使うと、JavaとJVMのように、言語に対して仮想機械を生成でき、その仮想機械が特定のマシンの機械語を生成するとともに、言語やプラットフォームとは独立した最適化を行う。LLVM は言語からもアーキテクチャからも独立しており、言語固有のモジュールとマシン向けコード生成部の中間に位置する。LLVM は積極的にプロシージャ間最適化を行うとともに、静的コンパイラとしてもJITコンパイラとしても使え、開発の様々な段階で使える多数の部品を持っている(JavaバイトコードとMSILフロントエンド、Pythonフロントエンド、グラフ彩色式のレジスタ割り付けモジュール、など)。JITコンパイラの場合、実行時に不要な静的分岐を最適化する機能があり、これはプログラムが様々な実行時オプションを持っている場合、強力な最適化手法(部分評価)となる。このため、Mac OS X 10.5 ではこれを使ってハードウェア機能がない場合にOpenGLパイプラインを実現している。

現在、GNUコンパイラコレクション (GCC) の 3.4 と 4.0.1 から抜き出したフロントエンドを使ったC言語C++のコンパイルをサポートしている。LLVM 自体は C++ で書かれており、イリノイ大学2000年に開発が開始されたものである。ライセンス条件は University of Illinois Open Source License[1] であり、これはBSDライセンスによく似たOSI認証ライセンスである。

[編集] コード表現

LLVM は言語から独立した命令セット型システムを持つ。命令の多くは3番地コード形式に似ている。各命令はまた静的単一代入形でもあり、変数(型付きレジスタ)は一回代入されるとその後は変更されない。このため、変数間の依存関係の解析が単純化される。

型変換は、どういう形式であっても明示的に cast 命令を使って行われる。LLVM の持つ基本型はいくつかの固定長の整数型であり、派生型としてポインタ配列、ベクトル、構造体関数の5つがある。具体的な言語で構築される型は、LLVM 上ではこれらの型を組み合わせて表現される。例えば、C++ におけるクラスは、構造体と関数と関数へのポインタの配列を組み合わせて表現される。

[編集] 外部リンク