なんかメモ

いろいろメモ

LLVMのGo bindingでhello world

An introduction to LLVM in Goを読んでhello worldしようとしたらllvm知らなすぎて調べたのでまとめ

基本的な流れ

  1. module作成
  2. main関数作成
  3. entry基本ブロック作成
  4. 基本ブロックの中にビルダーを通して実行する命令を構築していく
  5. Dump()でllvm IRを出力

MCJITコンパイラを使う

初期化

以下の関数で初期化

llvm.LinkInMCJIT()
llvm.InitializeNativeTarget()
llvm.InitializeNativeAsmPrinter()
llvm.InitializeAllAsmParsers()

実行
  1. NewMCJITCompilerOptionsで構造体を作成しオプションを設定
  2. NewMCJITCompilerでJITコンパイラを作成
  3. RunFunctionで実行

最適化

  1. PassManagerを作成
  2. TargetDataを追加
  3. 最適化するためのpassを追加していく
  4. Runで実行

その他

  • memcpyの部分は試し、putsで表示するだけならいらない(CreateGlobalStringPtrのポインタを直接putsに渡してあげればいい)

LLVMのGo bindingでhello world

リンク

An introduction to LLVM in Go

LLVM Project Blog: Using MCJIT with the Kaleidoscope Tutorial