Skip to content
hatsusato edited this page Jun 16, 2016 · 18 revisions

APIの内容の調べ方

  1. LLVM-C Document に行く。
  2. そのAPIのソースコード上での定義を見に行く。
  3. 実装で使われているLLVMの(C++の)APIの名前で再度検索する。
  4. LLVM C++ APIの方は比較的ドキュメントが充実してるので、説明を読む。
  5. 適宜 LLVM Language Reference Manual の当該項目を参考にする。

LLVMModuleRef

  • LLVMモジュール全体の情報を管理する。
    • LLVMが管理するグローバル変数・関数やシンボルテーブルの情報を含む。
  • LLVMを使うときはまず最初にこのオブジェクトが必要。
  • LLVMModuleCreateWithName で作って LLVMDisposeModule で破棄する。

Register Functions

LLVMTypeRef

  • 型情報を持つ。
  • Integer Types
    • 整数型
      • 型ではサイズだけを規定し、 signed / unsigned は演算時に指定する。
  • Floating Point Types
    • 浮動小数点数型
  • Function Types
    • 関数型
      • IsVarArg は可変長かどうかを表す。
  • Structure Types
    • 構造体型
      • Packed はパディングのないアラインメントが 1 の構造体。
      • 前方宣言で用いられるような、まだ定義されていない宣言のみの構造体を opaque であると言う。
  • Sequential Types
    • 配列型
    • ポインタ型
      • AddressSpace は基本 0
      • void * はないので i8 * で代用する。
    • ベクトル型
      • SIMDとかするやつ。
  • Other Types
    • ボイド型、ラベル型など

LLVMBasicBlockRef

  • 条件分岐とかループとかジャンプのない一直線の命令列を表す。
    • 関数呼び出しはジャンプには入らない。
    • 任意の Basic Block は関数に属する。
  • Basic Block には Instruction Builder を用いて命令を追加する。
  • LLVMValueRef と型の互換性がある。

LLVMBuilderRef

  • Basic Block に命令を追加する Builder を表す。
    • Basic Block 中のどこに命令を挿入するかを表すポインタでしかないようなので、全体で1つあれば十分そう。
  • LLVMCreateBuilder で作って LLVMDisposeBuilderで破棄する。

Setting Builder Position

  • LLVMPositionBuilderAtEnd
    • Basic Block の末尾に Instruction Builder をセットする。 以降の Instruction Builder への操作はここで指定した Basic Block の末尾に追加されていく。
  • LLVMPositionBuilderBefore
    • 指定した命令の直前に Instruction Builder をセットする。 以降の Instruction Builder への操作はここで指定した命令の直前に追加されていく。
Clone this wiki locally