llvm

clang/llvmをソースからビルドする

LLVM 3.5 がそろそろリリースされそうですが、それを待たずにソースコードからclang/llvmをビルドしてみました。 ビルドの方法は以下に書かれています。 Getting Started with the LLVM System — LLVM 9 documentation 本家のリポジトリはsvnなのですが、git…

LLVMLinuxをビルドしてみた

LLVMLinuxはLinux kernelをClang/LLVMでビルドできるようにしようというプロジェクトです。先日のELCでも紹介されていました。興味があったので、まずはビルドしてみました。基本的には以下のページの手順に従ってやっただけ。 Useful links | ClangBuiltLin…

LLVMのバックエンドのaarch64とarm64の違い

Linaroのtoolchainのチームは週報をMLで公開しています。それを見ていたらLLVMのバックエンドのaarch64とarm64の違いについてとても簡潔な説明があったので紹介します。[ACTIVITY] Week 17LLVMのAArch64とARM64の比較のテストをしていると週報を書いたRenato…

Ubuntu 14.04でarm 64bit(aarch64)のコードをコンパイルして動かしてみる

先日リリースされたqemu 2.0でaarch64がサポートされました。これをソースからビルドして試そうと思ったのですが、実はUbuntu 14.04ではすでにqemu 2.0が入っていました。なので、以下のように簡単にセットアップできます。 $ sudo apt-get install qemu-use…

ARM 64bit でLLVMは見逃せない

iPhone5S, iPad Airで64bit ARMプロセッサをいち早く製品化したAppleですが、驚きのニュースがありました。AppleはOS X, iOSのコンパイラツールチェインをgccからclang/LLVMに移行しています。その64bit ARM向けのバックエンドをLLVMのコミュニティに公開し…

AndroidのRenderScriptのソースでLLVMをつかっているところ

きつねさんのLLVM本を読んで、LLVMのIR(中間表現。bitcodeと等価)に最適化をかけたりネイティブコードに変換するのは"Pass"として実装されていて、それらの"Pass"をたばねるのが"Passmanager"だと知りました。 (ちなみにこの本はコンパイラのことをよく知っ…

Android 4.4のARTのソース解析メモ

チラシの裏に書いておく。gitのタグはandroid-4.4_r1 android-4.4_r1.2でもartに関しては差分なし。 バックエンドの選択 compiler-backendはビルド時に選択する。QuickとPortableの2種類。デフォルトではQuick。 Portableを選択する方法はbuild/Android.comm…

Android 4.4 のARTのコンパイルしたコードを見た感想

前回(Android 4.4 のARTのブートログを見てみた - 組み込みの人。)の続きです。取り出したoatファイルをoatdumpコマンドで見てみます。 $ oatdump --oat-file=system@priv-app@Launcher2.apk@classes.dex > Launcher2.dump Launcher2.dumpの先頭の5000行をこ…

Android 4.4 のARTのブートログを見てみた

前回の記事(Android 4.4に入ったARTのソースを見た感想 - 組み込みの人。)ではソースコードを見ただけで、動かしてはいませんでした。 今回はAndroid 4.4のソースコードを自分でビルドしてemulatorを作り、そのブートログを見て気がついたことを書きます。採…

Android 4.4に入ったARTのソースを見た感想

Android 4.4 (Kitkat) のソースコードが公開されました。話によるとDalvikを置き換えるARTというものが開発者向けに使えるようになっているそうです。面白そうなので調べてみました。以下は全て推測と個人の感想です。 ART とは 公式な情報はこれ https://so…

clang+llvmでさりげなくすごいコードが生成されていた話の補足。

clang+llvmでさりげなくすごいコードが生成されていた話。 - 組み込みの人。で決着のついていなかった部分について。 1からnの総和を求める関数sum() int sum(int x) { int sum = 0; int i; for (i = 1; i <= x; i++) { sum += i; } return sum; } をclang -…

clang+llvmでさりげなくすごいコードが生成されていた話。

先日llvm 3.3がリリースされました。aarch64(arm 64bit)のコードが生成できるようになったということなので、ソースからビルドして遊んでいたのですが、さりげなく凄く最適化されたコードが生成されているのに気がつきました。aarch64だと今は実行して確認で…