llvm-pyはドキュメントがめちゃくちゃよく書けているのはいいんだけど、バインディングとしての完成度は…普通かな。 0 から 9 までの値をそれぞれ 2 倍したものを表示するサンプルを書いてみた。実は with を初めて使った。 basic block (BB) のセマンティクスとか、定義済み外部関数で、かつ可変引数である printf の呼び出し方とかが参考になるといいなと思う。 文字列定数の扱いはひょっとしたら間違ってるかもしれない。ドキュメントいろいろ漁ったけどよくわからなかったので。 出力結果は次のようになるはず。printf 呼び出しがインライン化されたりしているのは最適化パス (PASS_FUNCTION_INLINING) のおかげ。いろいろパスを足したり除いたりして、どう最適化が効いてくるのかを見るのもおもしろい。 BEFORE: define void @loop()