プログラミング言語を作る。第4回:LLVM入門
第2,3回で x_86-64 のアセンブリに手を出してみましたが、プログラムをいきなりアセンブリに変換するのは困難です。普通は中間コードを経てアセンブリ、機械語に変換されます。色々調べてみると LLVM というものがあってそれ用の中間コードを作ると、あとの最適化などをやってくれるようなので、まずは LLVM について勉強しようと思いました。
以下のサイトから Hello, world! を出力するプログラムを引用し、少し書き換えました。
LLVM フレームワークで実用的なコンパイラーを作成する: 第 1 回
declare i32 @puts (i8*) @global_str = constant [14 x i8] c"Hello, world!\00" define i32 @main() { %temp = getelementptr [14 x i8]* @global_str, i64 0, i64 0 call i32 @puts(i8* %temp) ret i32 0 }
lli で実行すると、 Hello, world! を出力します。
clang に -emit-llvm というオプションがあり、それを用いると LLVM のコードが生成されるようです。次からは何かしらのC言語プログラムを LLVM に変換し、をそれを読んでいこうと思います。