「LLVM 3.7」リリース、eBPFサポートがマージされターゲットとして選択可能に

 コンパイラ環境「LLVM(Low Level Virtual Machine)」を開発するLLVM Projectが9月1日、最新版となる「LLVM 3.7.0」をリリースした。バックエンドを強化したほか、ClangでのOpenMP 3.1サポートなどの特徴が加わっている。

 LLVMはモジュラー型で再利用可能なコンパイラとツールチェーン技術を集めたもので、さまざまな言語、プラットフォーム向けにコンパイラやコンパイラ開発のための技術を提供する。LLVM Coreライブラリに加え、ネイティブのC/C++/Objective-CコンパイラのClangなどのサブプロジェクトをもつ。

 LLVM 3.7は3月に公開された「LLVM 3.6.0」に続く最新版となる。本バージョンでの大きな機能強化として、カーネル組み込みバーチャルマシン機構であるBPF(Berkely Packet Filter)の拡張命令セット(eBPF)サポートがマージされた点がある。eBPFターゲットはデフォルトで利用でき、ClangとllcでeBPFをバックエンドとして選ぶオプションが提供される(-target bpfと-march=bpf)。

 また、Visual Studioの最低要件が「Visual Studio 2013 Update 4」になった。Windowsについては、LLVM 3.7がWindows XPおよびVistaをサポートする最後のバージョンとなり、次期バージョンではWindows 7以上のみのサポートになると注意している。

 さらに、DataLayoutがオプションではなくなり、APIが変更されてポインタの代わりに参照を利用するなどの変更が加わった。この変更を受け、LLVM C APIのLLVMGetTargetMachineDataは非推奨となり、さらに次期バージョンには含まれないこととなった。

 JIT APIでは、新たに「On-Request Compilation(ORC)」というC++ JIT APIが加わった。ORCは、MCJIT(Machine Code JIT)に着想を受け、テスト性が高く新機能の拡張を容易にする設計をもつという。

 MIPSターゲット、PowerPCターゲット、SystemZターゲットもそれぞれ強化された。例えばMIPSではMIPS32R3、MIPS32R5、MIPS32R3、MIPS32R5、microMIPS32のサポートが加わり、PowerPCではISA 2.07B(POWER8)の命令セットをサポートし、ISA 2.06(POWER7)の命令セットのサポートも強化した。

 サブプロジェクトのClangコンパイラでは、並列処理のためのOpenMP 3.1のサポートをフルサポートした。x86、x86-64、Powerなどのプラットフォームで利用できるという。OpenMP 4.0のomp simdもサポートした。

 またセキュリティメカニズム「Control Flow Integrity」も統合した。Windowsターゲットも強化し、__try、__exceptなどの句をサポートした。一方で、MSVC互換のC++例外のサポートはまだ実現していない。

LLVM Project
http://llvm.org/