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を付けるように心掛けるか。それとも何か俺が勘違いしてるのかな?