プログラミングと絵と音楽

コンピューター科学を専攻し、絵と音楽を趣味とするエンジニアのブログです。

プログラミング言語を作る。第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 に変換し、をそれを読んでいこうと思います。