clangと戯れる

さいきん周囲でclang人気が高まっている気がしたので、試しにインストールして遊んでみた。

実行形式へのコンパイルは普通にgccと同じ感じで出来て、起動も普通。LLVMで動くって言ってもjavac、javaみたいな感じではないのね。
で、せっかくなので中間言語を出してみる。

clang -S -emit-llvm hoge.c

emit-llvmを抜くとなんか違うものが出る。gcc -Sで出したものに似てるし、たぶん実機向けのもの?と思い普通にgccコンパイルしてみたら出来た。どうやらemit-llvmで出来る.sファイルは実際は.sファイルではなくて.llファイルと呼ばれるものみたい。

とにかく、emit-llvmで生成されるhoge.s(hoge.ll?)ファイルはすごい読みやすい。

んでこいつを.bcコードにして、そいつを実行。

llvm-as hoge.s 
lli hoge.s.bc

gccを使って実行形式にする方法はこっち。

llc hoge.s
gcc hoge.s.s
./a.out

.sとか.s.sとか何か変だな。clang -Sで-emit-llvmの有無で拡張子とか変えてくれればいいんじゃないだろうか。まあ、-o hoge.llを付けるように心掛けるか。それとも何か俺が勘違いしてるのかな?