ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
様々なプログラミング言語において、最適化が可能なように設計された、コンパイラーの基盤。
現在のC、C++、Objective-Cの公式なフロントエンドはclangで、LLVM 2.6から正式採用された。
初期には、幾つかのフロントエンドが開発中だった。
例えば、GCC 4.xから作られたフロントエンドllvm-gccを使うことで、C、C++、FORTRAN、Objective-C、Ada、Dの各言語に対応できた。但しllvm-gccはLLVM 2.9を対応の最後とし、LLVM 3.0以降ではサポートされなくなった。
LLVMに注目が集まり始めると、LLVMをバックエンドに、GPLではないコンパイラーを作ろうという動きが現われはじめ、C、Objective-C、C++に対応しAppleが全力を投入して開発したフロントエンドclangが、圧倒的な資金力と開発力でGCCを凌駕し、LLVMの公式なフロントエンドとなった。
ちなみにAppleがclangに本気を出したのは、GCCにおけるObjective-C対応に不満を持っていたためで、LLVMという既にかなりの水準にある基盤を用いて新たなコンパイラーclangを作ることに全力を注いだ「おこぼれ」を、一般のユーザーはありがたく拝領することとなったものである。
LLVMは、処理の段階に応じて複数の中間言語(中間表現)を持ち、高級言語に近い高レベルな中間言語から、機械語に近い低レベルな中間言語にまで変換される。
clangがプログラミング言語を解析し、変換した独自の抽象構文木の情報。
ASTはツリーで、かつコンテクストを保有している。
LLVMの中心となる中間表現(IR)で、静的単一代入(SSA)形式となっている。
この段階で最適化(大規模な変換)が可能なように設計されている。
BitCodeでは、ASTが保有していたコンテキストは失われている。ループ構文は失われ、展開されている。
llcが内部で使用する中間言語の一つ。
llcが内部で使用する中間言語の一つ。
アセンブリ言語に変換することを目的とした中間言語であり、1命令ごとの粒度は小さく、BitCodeよりも更に低レベルの言語である。
LLVMを利用したプロジェクトで、公式サイトに記載のあるもの(新しい順)。
上記の他に、次のようなものもある/あった。
LLVM 3.5の時点で主たる対応オペレーティングシステムは次の通り(アーキテクチャーごとの対応は後述)。
LLVM 3.5の時点で主たる対応アーキテクチャーとされているものは次の通り。
以下は、おそらく実験的な段階のもの。
以下は、過去にコードジェネレーターが存在したが最新版ではなくなっている環境。
Z80用の実装llvm-z80の開発を目指すプロジェクトも確認されている。
これがもし完成すれば、MSX-DOSなどで動作するソフトウェアをC++やObjective-Cを使って開発することが可能になることを意味する。
昨今の需要となるスマートフォン開発などでは、以下の環境やCPUが未対応である。
Dalvikのバイナリを出力できれば、Android NDKなどを使わずともAndroidアプリケーションをC++やObjective-Cを使って開発することが可能になる。
これより↑は予定
以下リリース済み
LLVM IR(中間表現)は新たなターゲットへの対応のため、新機能が追加された。
LLVM 3.1で、多くの改良が施された。
LLVM IR(中間表現)は新たなターゲットへの対応のため、新機能が追加された。
LLVMサブシステムに対してモジュール情報を送る際に使われる。
現時点では、Objective-CのABI情報のエンコードに用いられている。
これにより、型のサイズを返さない命令を持つプラットフォーム上で、0のビットを数える際に最適化されたコードが生成可能となる。
最終段で、実際にコードを生成するコード生成器が大幅に改善され、VLIWアーキテクチャー用のビルドに対応するための基盤が搭載された。まずはHexagonをターゲットとして実装されている。
X86ターゲット、ARMターゲット、MIPSターゲット、PTXターゲットなど様々なターゲット向けの処理が改善された。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます