类型

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 来获取所请求的信息。

  • __call__(value)

    一个便利方法,用于创建具有给定 value 的此类型的 Constant

    >>> int32 = ir.IntType(32)
    >>> c = int32(42)
    >>> c
    <ir.Constant type='i32' value=42>
    >>> print(c)
    i32 42
    

原子类型

class llvmlite.ir.IntType(bits)

整数类型。Python 整数 bits 指定具有此类型的整数的位宽。

width

位宽。

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)

指向另一种类型的指针类型。

指针类型公开以下属性:

  • addrspace

    指针的地址空间编号。这个可选的整数允许您选择一个非默认的地址空间——其含义取决于平台。

  • pointee

    指向的类型。

可以通过设置环境变量来启用类型化指针作为不透明指针的打印输出:

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.IdentifiedStructType

标识结构体类型。标识结构体通过名称进行比较。它可用于创建不透明类型。

用户不应直接创建新实例。请改用 Context.get_identified_type 方法。

标识结构体在没有主体的情况下创建(因此是不透明的)。要定义结构体主体,请使用 .set_body 方法。

set_body(*elems)

使用元素类型序列定义结构体主体。

其他类型

class llvmlite.ir.FunctionType(return_type, args, var_arg=False)

函数类型。

  • return_type 是函数的返回类型。

  • args 是描述函数参数类型的序列。

  • 如果 var_argTrue,则函数在显式参数之后接受数量可变的额外未知类型参数。

    示例

    int32 = ir.IntType(32)
    fnty = ir.FunctionType(int32, (ir.DoubleType(), ir.PointerType(int32)))
    

    等效的 C 声明将是:

    typedef int32_t (*fnty)(double, int32_t *);
    
class llvmlite.ir.LabelType

标签类型。您无需实例化此类型。

class llvmlite.ir.MetaDataType

元数据类型。您无需实例化此类型。

注意:此类别以前称为“MetaData”,但为清晰起见已更名。