ARM 64bit でLLVMは見逃せない

iPhone5S, iPad Airで64bit ARMプロセッサをいち早く製品化したAppleですが、驚きのニュースがありました。

AppleOS X, iOSコンパイラツールチェインをgccからclang/LLVMに移行しています。その64bit ARM向けのバックエンドをLLVMのコミュニティに公開し、それを本家のツリーのメインラインに統合するという話です。

ニュースの概要は以下の記事で読むことができます。
Apple Open-Sources Their 64-bit ARM LLVM Back-End - Phoronix
その続報。
Apple, LLVM Developers Figure Out Their 64-Bit ARM Approach - Phoronix

一次ソースを自分でも確認しました。ことの始まりはLLVMdevのメーリングリストのこの投稿。
http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-March/071574.html
このメールでいきなりパッチが添付されています。これを読むと事前にARM社と協議していたことがわかります。

ほぼ同時期にARM社から以下のようなニュースリリースが出ています。
News – Arm
ARM社はいままでARMCCという自社開発のコンパイラを販売してきましたが、Aarch64(64bit ARM)向けのものはClang/LLVMを採用するというものです。つまり、自社開発コンパイラに割いてきたエンジニアリングリソースをこのLLVMのものに一本化し、AppleQualcommと共同でオープンコミュニティの場でコンパイラを開発していくということです。

これらの発表の後で、4月に開催されるLLVM開発者会議の中で、具体的なマージの方法を議論するmeetingが行われました。
そのmeetingの議事録。
Summary of the meeting

元々のLLVMの64bit ARM用のバックエンドのターゲット名はaarch64で、Appleから寄付されたバックエンドのターゲット名はarm64です。
まずはこのコードをそのままLLVMのツリーに入れます。つまり64bit ARM用バックエンドが2種類できます。
これらは以下のようなコマンドラインオプションで選択可能です。
clang --target=aarch64-linux-gnu ...
clang --target=arm64-linux-gnu ...

2つのバックエンドの統合にあたり、まずどちらをベースにするかが検討されました。その結果arm64の方をベースにして、統合作業を進めることになりました。統合が完了した段階でそれをaarch64に改名し、元のaarch64は削除します。
時期的な見通しとしては、夏にリリースが予定されているLLVM 3.5には間に合わないだろうということです。

議論の中でaarch64, arm64, gcc4.9のベンチマーク結果が投稿されました。
Cortex-A53で計測されたものですが、現時点ではgcc4.9が勝っているのが興味深いです。

(2014.4.27 この記事も見てください)
LLVMのバックエンドのaarch64とarm64の違い - 組み込みの人。

これらに関連して以下のニュースも興味深いです。

Linux 3.15 Can Almost Be Compiled Under LLVM's Clang - Phoronix
LinuxカーネルをClangでビルドできるようにするというプロジェクトが進んでいました。Clang側の修正は3.3のときにマージされていましたが、Linuxカーネル側の修正も3.15でマージされたということです。

Qualcommの次世代プロセッサ Snapdragon 810
Snapdragon 810 Processor | Qualcomm
64bit ARMであるCortex-A57とCortex-A53がそれぞれ4つ、合計8個のbig.LITTLE構成です。

The LLVM Foundation発足
LLVM Project Blog: The LLVM Foundation

LLVM 3.5の開発と並行して、安定版リリースのアップデート3.4.1の計画も進んでいます。

というわけで、ARM 64bitとLLVMの話はしばらく目が離せません。

(2014.4.17に整形して加筆修正しました。)

2014.5.10追記

バックエンドの統合の作業は順調に進んで、LLVM 3.5のリリースに間に合いそうです。
LLVM's 64-bit ARM Back-End Is Almost Merged With Apple's Code - Phoronix

LLVMの初の安定版3.4.1 がリリースされました。
LLVM Project Blog: LLVM 3.4.1 Release

2014.5.26追記

LLVMのARM64とAAarch64のバックエンドのマージは完了しました。つまり古いAArch64は削除され、マージされたARM64がAArch64にリネームされました。
The LLVM 64-bit ARM64/AArch64 Back-Ends Have Merged - Phoronix
AArch64/ARM64: remove AArch64 from tree prior to renaming ARM64. rL209576
AArch64/ARM64: move ARM64 into AArch64's place rL209577