英語が読めないから、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
クラスは派生クラスとしてしかインスタンス化されない。
プリミティブ型のVoidType
、LabelType
、FloatType
、DoubleType
には、隠蔽されている子クラスがある。
これらのクラスには自分の型を識別するメソッドのほかに有用なメソッドが存在しない為に、隠蔽されている。
ほかの型は全て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
ArrayType
、PointerType
、VectorType
から継承される。
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を全部訳そうと思った…