数学とプログラミングとくだらないこと

プログラミングの事とか数学のこととかを書いていきます。

英語が読めないから、LLVM Programmer's Manualの一部をまとめてみた

英語がすらすら読めないので、LLVM 3.3の、Programmer's Manualの一部を訳してまとめた。 …いや、ほとんどの部分が、ただの訳だ… まとめた、もとい訳した部分は、The Type class and Derived Typesの部分。


LLVMのコアクラス

  • 定義: include/llvm
  • 宣言: lib/VMCore

LLVMのコアクラスは、プログラムの検査・変形を扱うクラス

Typeクラスとその派生クラス

Typeは、すべての「LLVM IRにおける型」を表すクラスの親クラス Vlaue系のクラスは、対応するType系のクラスを持つ Typeクラスは派生クラスとしてしかインスタンス化されない。 プリミティブ型のVoidTypeLabelTypeFloatTypeDoubleTypeには、隠蔽されている子クラスがある。 これらのクラスには自分の型を識別するメソッドのほかに有用なメソッドが存在しない為に、隠蔽されている。

ほかの型は全てDerivedTypeのサブクラスである。 各Type系クラスには名前がつけられているが、必須という訳ではない。 各Type系のクラスにはいづれかの時点で、生成されたインスタンスが必ず一つ存在する。 こうすることで、このインスタンスのアドレスの一致が型の一致と同値となる。

型が等しい ⇔ 型に対応するType系クラスのインスタンスのアドレスが等しい

重要なメソッド(Public)

  • bool isIntegerTy() const: 整数型を表すオブジェクトなら、trueを返す。
  • bool isFloatingeterPointTy(): 5つある浮動小数点数型を表すオブジェクトなら、trueを返す。
  • bool isSized(): その型について、サイズが既知であればtrueを返す。 抽象的なType系のクラスや、label、voidといいった型には、サイズが定義されていない。

重要なDerivedType系クラス

IntegerType

指定されたビット幅を持つ整数の型を表す、DerivedTypeクラスのサブクラス。 指定できるビット幅は、IntegerType::MIN_INT_BITS(1)から、IntegerType::MAX_INT_BITS(800万ぐらい)までの間。

  • static const IntegerType* get(unsigned NumBits): 指定されたビット幅を持つIntegerTypeインスタンスへのアドレスを返す。
  • unsigned getBitWidth() const: そのIntegerTypeのビット幅を返す。

SequentialType

ArrayTypePointerTypeVectorTypeから継承される。

  • const Type* getElementType() const: 要素の型を返す。

ArrayType*

SequentialTypeのサブクラス。配列型のインターフェースを提供する。

  • unsigned getNumElements() const: 要素の数を返す

PointetType

SequentialTypeのサブクラス。 LLVM IRにおけるPointer型を表す。

VectorType

SequentialTypeのサブクラス。 ArrayTypeとよく似ているけれども、ArrayTypeはFirstClassな型ではない一方、こちらはFirstClassな型である点が異なる。

StructType

struct型を表すためのDerivedTypeのサブクラス。

FunctionType

関数型を表すためのDerivedTypeのサブクラス。

  • bool isVarArg() const: 可変長引数を持つ関数であった場合にtrueを返す。
  • const Type* getReturnType() const: 返り値似ついて、その型を表現するオブジェクトへのアドレスを返す。
  • const Type* getParamType(unsigned i): i番目の引数について、その型を表わすオブジェクトへのアドレスをを返す。
  • const unsigned getNumPrams() const: 形式上の引数の数を返す。(可変長のときはどうなるの?)

ちゃんと部屋の環境が整ったら、ニコ生でもやりながら、Helpful Hints for Common Operationsを全部訳そうと思った…