类型
LLVM 模块中使用的所有值都明确类型。所有类型都派生自一个共同的基类 Type
。您可以直接实例化它们中的大多数。一旦实例化,类型应被视为不可变。
- class llvmlite.ir.Type
所有类型的基类。切勿直接实例化它。类型具有以下共同方法:
- as_pointer(addrspace=0)
返回指向此类型的
PointerType
。可选的 addrspace 整数允许您选择非默认地址空间——其含义取决于平台。
- get_abi_size(target_data)
根据 target_data(一个
llvmlite.binding.TargetData
实例)获取此类型的 ABI 大小(以字节为单位)。
- get_abi_alignment(target_data)
根据 target_data(一个
llvmlite.binding.TargetData
实例)获取此类型的 ABI 对齐方式(以字节为单位)。
- get_element_offset(target_data, position)
根据 target_data(一个
llvmlite.binding.TargetData
实例)获取结构体中位于 position 处的元素的字节偏移量。注意:
get_abi_size()
、get_abi_alignment()
和get_element_offset()
调用 LLVM C++ API 来获取所请求的信息。
原子类型
- class llvmlite.ir.HalfType
半精度浮点实数类型。
- class llvmlite.ir.FloatType
单精度浮点实数类型。
- class llvmlite.ir.DoubleType
双精度浮点实数类型。
- class llvmlite.ir.VoidType
void 类型。仅用作没有返回值的函数的返回类型。
指针类型
IR 层目前支持类型化指针和不透明指针。对类型化指针的支持最终将被移除。
注意
有关迁移到不透明指针的更多详细信息,请参阅类型化指针的弃用部分。
类型化指针使用以下方式创建:
- class llvmlite.ir.PointerType(pointee, addrspace=0)
指向另一种类型的指针类型。
指针类型公开以下属性:
可以通过设置环境变量来启用类型化指针作为不透明指针的打印输出:
LLVMLITE_ENABLE_IR_LAYER_TYPED_POINTERS=0
或者在导入 llvmlite 后,但在使用其任何功能之前,设置 ir_layer_typed_pointers_enabled
属性。例如:
import llvmlite
llvmlite.ir_layer_typed_pointers_enabled = False
# ... continue using llvmlite ...
不透明指针可以通过以下方式创建:
- class llvmlite.ir.PointerType(addrspace=0)
指针类型。
指针类型公开以下属性:
- addrspace
指针的地址空间编号。这个可选的整数允许您选择一个非默认的地址空间——其含义取决于平台。
聚合类型
- class llvmlite.ir.Aggregate
聚合类型的基类。切勿直接实例化它。聚合类型具有共同的 elements 属性。
- elements
此聚合类型的元素类型组成的类似元组的不可变序列。
- class llvmlite.ir.ArrayType(element, count)
数组类型。
element 是每个元素的类型。
count 是表示元素数量的 Python 整数。
- class llvmlite.ir.VectorType(element, count)
向量类型。
element 是每个元素的类型。
count 是表示元素数量的 Python 整数。
- class llvmlite.ir.LiteralStructType(elements[, packed=False])
字面结构体类型。
elements 是结构体每个成员的元素类型序列。
packed 控制是否使用紧凑布局。
其他类型
- class llvmlite.ir.FunctionType(return_type, args, var_arg=False)
函数类型。
return_type 是函数的返回类型。
args 是描述函数参数类型的序列。
如果 var_arg 为
True
,则函数在显式参数之后接受数量可变的额外未知类型参数。示例
int32 = ir.IntType(32) fnty = ir.FunctionType(int32, (ir.DoubleType(), ir.PointerType(int32)))
等效的 C 声明将是:
typedef int32_t (*fnty)(double, int32_t *);