コンパイラ環境「LLVM 3.2」をリリース、最適化機能を強化

 LLVM Projectは12月1日、コンパイラ環境の最新版「LLVM(Low Level Virtual Machine) 3.2」をリリースした。最適化機能の強化やプロセッササポートの改善などを中心に多数の機能が加わっている。C/C++フロントエンドの「Clang」などサブプロジェクトも最新版となった。

 LLVMはモジュール化され再利用可能なコンパイラや関連ツール群技術を開発するプロジェクト。ソースコードやターゲットに非依存な最適化機能を提供するコアライブラリやC/C++/Objective-Cコンパイラ「Clang」、GCC 4.5ベースのパーサーを利用してAdaやFortranなどGCCでサポートされているプログラミング言語をサポートする「dragonegg」、デバッガ「LLDB」、そしてC++標準ライブラリや各種周辺ライブラリ/ツールなどの開発が行われている。

 LLVM 3.2は5月に公開されたバージョン3.1以来、7か月ぶりのリリースとなった。変更点としては、SROA(Scalar Replacements Of Aggregates)モデルによる最適化の実装が挙げられている。新しいアルゴリズムにより最適化パスを高速化し、容易に最適化できるコードを生成できるようになった。ループをSIMD命令で並列処理するコードに自動変換するループベクトライザも実験的段階ではあるものの導入されている(デフォルトでは無効)。

 また、NVIDIAのCUDAおよびOpenCLコンパイラは新たに追加された「NVPTXバックエンド」を利用するようアップデートされた。NVPTXバックエンドは従来利用されていたPTX 3.5やSM 3.5バックエンドと完全な互換性を持ち、NVIDIAのコンパイラSDKで定義されているNVVM命令をサポートする。このほかARMやPowerPC、MIPSといったアーキテクチャサポートでも多数の変更が加わっている。

 同じくバージョン3.2となったClangでは、警告(warnings)の強化や診断メッセージ内でのテンプレート型の差分表示、より高品質なデバッグ情報(debug info)といった診断機能の強化やC++11サポート、C11およびObjective-Cの改善などが特徴となる。そのほか、tls_model属性のサポートにより、スレッドローカルストレージ(TLS)を利用するコードがどのモデルを利用するのかを選択できるようになった。

 DragonEggではLTOサポート付きでのGCCのビルドが不要となるなど、そのほかのサブプロジェクトでも機能強化が加わっている。

The LLVM Project
http://llvm.org/