「LLVM 9.0」リリース、asm gotoのサポートでLinuxカーネルのビルドが可能に

 The LLVM Projectは9月19日、コンパイラおよび関連ツールチェーン集「LLVM 9.0」をリリースしたことを発表した。ライセンスが例外付きApache License 2に変更になったほか、機能面ではメインラインのLinuxカーネル(x86_64)のビルドが可能になり、RISC-Vサポートが正式扱いとなるなどの強化が加わっている。

 LLVMはモジュラーおよび再利用可能なコンパイラとツールチェーンを提供するプロジェクト。イリノイ大学でSSAベースのコンパイラ開発プロジェクトとしてスタートした。現在はLLVM Coreに加え、フロントエンドのClang、デバッガのLLDB、C++11とC++14をサポートするC++ Standard Libraryの実装であるlibc++とlibc++ ABIなど、複数のサブプロジェクトを擁する。

 LLVM 9.0は3月に公開されたバージョン8に続く最新版。GCCの独自拡張だった、インラインアセンブラ中で利用できるgotoステートメント(asm goto)をサポートした。これにより、x86_64向けのメインラインのLinuxカーネルのビルドなどがLLVMとClangで可能になるという。

 IR(中間表現)におけるターゲット非依存のハードウェアループのサポートが加わり、PowerPCとARM実装を用意した。また、実験扱いだったRISCV-Vターゲットが正式な機能になった。LLVM_EXPERIMENTAL_TARGETS_TO_BUILD設定で有効にする必要がなくなり、デフォルトで利用できるようになった。バックエンドでは、RV321とRV641ベースのRISC-V命令セット向けのcodegenをサポートした。

 OpenCL向けのC++のサポートが実験扱いとして加わった。プロジェクトはバージョン7より、バージョン2として並行コンパイル機能をサポートする新しいORC(On Request Compilation)の開発を進めており、これまでのORC(ORC v1) JIT APIは非推奨となった。

 最適化機能も強化され、一部でコール変換を変更するなど多数の機能が加わった。それぞれのターゲット別でも機能強化が図られている。

 LLVMは本バージョンよりライセンスが変更となり、「Apache License v2.0 with LLVM Exceptions」の下で公開されている。それまではBSDライクなUniversity of Illinois/NCSA Open Source Licenseを採用してきたが、ユーザーと貢献者の保護などを目的に、2015年より再ライセンスに向けた議論を進めてきた結果となる。

 Apache License 2の例外として、「ソースコードコンパイルの結果としてソフトウェアの一部がオブジェクトに組み込まれた場合、オブジェクトに組み込まれた部分をApache License 2の4(a)、4(b)、4(d)の条件を遵守することなく再配布できる」などが加わっている。総じて、個人、組織内、商用目的でのLLVMのダウンロードと使用、LLVMを作成したパッケージやディストリビューションに同梱する、BSD、MIT、GPL v2/v3など主要なオープンソースライセンスの下で配布されているコードと組み合わせる、プロジェクトに貢献することなくLLVMコードに変更を加える、などのことが可能と説明している。

 LLVM 9.0に合わせて、Clangなどのサブプロジェクトも最新版となっている。

The LLVM Compiler Infrastructure
https://llvm.org/