一个 模块 主要由值组成。

llvmlite.ir.Undefined

一个未定义的值,对应于 LLVM 的 undef

class llvmlite.ir.Value

所有 IR 值的基类。

class llvmlite.ir._ConstOpMixin

这是ConstantGlobalValue的基类;请勿直接实例化。

整数算术运算

  • add(other)

    整数加法 selfother

  • sub(other)

    整数减法 self 减去 other

  • mul(other)

    整数乘法 self 乘以 other

  • udiv(other)

    无符号整数除法 self 除以 other

  • sdiv(other)a

    有符号整数除法 self 除以 other

  • urem(other)

    无符号整数余数 self 除以 other

  • srem(other)

    有符号整数余数 self 除以 other

  • neg()

    self 取反。

整数逻辑运算

  • shl(other)

    self 左移 other 位。

  • ashr(other)

    算术右移(有符号)self other 位。

  • lshr(other)

    逻辑右移 self other 位。

  • or_(other)

    按位或 selfother

  • and_(other)

    按位与 selfother

  • xor(other)

    按位异或 selfother

浮点算术

  • fadd(other)

    浮点加法 selfother

  • fsub(other)

    浮点减法 self 减去 other

  • fmul(other)

    浮点乘法 self 乘以 other

  • fdiv(other)

    浮点除法 self 除以 other

  • frem(other)

    浮点余数 self 除以 other

比较

  • icmp_signed(cmpop, other)

    有符号整数比较 selfother。字符串 cmpop 可以是 <, <=, ==, !=, >=> 之一。

  • icmp_unsigned(cmpop, other)

    无符号整数比较 selfother。字符串 cmpop 可以是 <, <=, ==, !=, >=> 之一。

  • fcmp_ordered(cmpop, other)

    浮点有序比较 selfother。字符串 cmpop 可以是 <, <=, ==, !=, >=> 之一。

  • fcmp_unordered(cmpop, other)

    浮点无序比较 selfother。字符串 cmpop 可以是 <, <=, ==, !=, >=> 之一。

整数类型转换

  • trunc(typ)

    self 截断为整数类型 typ

  • zext(typ)

    self 零扩展到整数类型 typ

  • sext(typ)

    self 符号扩展到整数类型 typ

  • bitcast(typ)

    将此指针常量转换为给定指针类型 typ 的常量。

浮点类型转换

  • fptrunc(typ)

    将浮点值 self 截断(近似)为浮点类型 typ

  • fpext(typ)

    将浮点值 self 扩展到浮点类型 typ

整数/浮点转换

  • fptoui(typ)

    将浮点值 self 转换为无符号整数类型 typ

  • uitofp(typ)

    将无符号整数值 self 转换为浮点类型 typ

  • fptosi(typ)

    将浮点值 self 转换为有符号整数类型 typ

  • sitofp(typ)

    将有符号整数值 self 转换为浮点类型 typ

整数/指针转换

  • inttoptr(typ)

    将此整数常量 self 转换为给定指针类型 typ 的常量。

  • ptrtoint(typ)

    将此指针常量 self 转换为给定整数类型 typ 的常量。

class llvmlite.ir.Constant(typ, constant)

一个字面值。

  • typ 是所表示值的类型——一个 Type 实例。

  • constant 是要表示的 Python 值。

constant 允许的 Python 类型取决于 typ

  • 所有类型都接受Undefined,并将其转换为 LLVM 的 undef

  • 所有类型都接受 None,并将其转换为 LLVM 的 zeroinitializer

  • IntType 接受任何 Python 整数或布尔值。

  • FloatTypeDoubleType 接受任何 Python 实数。

  • 聚合类型——数组和结构类型——接受与该类型元素类型对应的 Python 值序列。

  • ArrayType 接受一个 bytearray 实例,用于从字节字符串初始化数组。这对于字符常量很有用。

另请参阅 _ConstOpMixin

classmethod literal_array(elements)

常量数组的替代构造函数。

  • elements 是一个值序列,可以是 Constant 或其他类型。

  • 所有 elements 必须具有相同的类型。

  • 返回一个包含按序排列的 elements 的常量数组。

classmethod literal_struct(elements, packed=False)

常量结构体的替代构造函数。

  • elements 是一个值序列,可以是 Constant 或其他类型。

  • packed 控制是否使用紧凑布局。

  • 返回一个包含按序排列的 elements 的常量结构体。

gep(indices)

计算由 indices 序列给出的内部元素的地址。该常量必须具有指针类型。

注意:您不能定义常量函数。请改用函数声明

class llvmlite.ir.Argument

函数的一个参数。参数具有 add_attribute() 方法。

add_attribute(attr)

为此参数添加一个参数属性。attr 是一个 Python 字符串。

class llvmlite.ir.Block

一个基本块。请勿直接实例化或修改此类型。相反,请调用 FunctionIRBuilder 上的辅助方法。

基本块具有以下方法和属性

  • replace(old, new)

    在此块的指令列表中,用指令 new 替换指令 old。整个函数中所有对 old 的使用也会被修补。oldnew 都是 Instruction 对象。

  • function

    定义此块的函数。

  • is_terminated

    此块是否以终止指令结束。

  • terminator

    此块的终止指令(如果有)。否则为 None

class llvmlite.ir.BlockAddress

表示基本块地址的常量。

块地址常量具有以下属性

  • function

    定义基本块的函数。

  • basic_block

    基本块。必须是 function 的一部分。

元数据

元数据值有多种类型。

class llvmlite.ir.MetaDataString(module, value)

用于元数据的字符串字面量。

  • module 是元数据所属的模块。

  • value 是一个 Python 字符串。

class llvmlite.ir.MDValue

一个元数据节点。要创建实例,请调用 Module.add_metadata()

class llvmlite.ir.DIValue

一个调试信息描述符,包含键值对。要创建实例,请调用 Module.add_debug_info()

class llvmlite.ir.DIToken(value)

一个调试信息“令牌”,表示一个众所周知的枚举值。value 是枚举名称。

示例:'DW_LANG_Python'

class llvmlite.ir.NamedMetaData

一个命名元数据节点。要创建实例,请调用 Module.add_named_metadata()NamedMetaData 具有 add() 方法。

add(md)

将给定的元数据片段附加到由 NamedMetaData 引用的操作数集合中。md 可以是 MetaDataStringMDValue

全局值

全局值是使用模块范围名称可访问的值。

class llvmlite.ir.GlobalValue

全局值的基类。全局值具有以下可写属性

  • linkage

    一个 Python 字符串,描述全局值的链接行为——例如,它是否对其他模块可见。默认值为空字符串,表示“外部(external)”。

  • storage_class

    一个 Python 字符串,描述全局值的存储类。

    • 默认值为空字符串,表示“默认(default)”。

    • 其他可能的值包括 dllimportdllexport

  • section

    一个 Python 字符串,描述全局值在转换后应位于哪个节。默认值为空字符串,表示没有特定节。

另请参阅 _ConstOpMixin

class llvmlite.ir.GlobalVariable(module, typ, name, addrspace=0)

一个全局变量。

  • module 是定义变量的位置。

  • typ 是变量的类型。它不能是函数类型。要声明全局函数,请使用 Function

    返回的 Value 的类型是指向 typ 的指针。要读取变量内容,您需要从返回的 Value 中加载(load)。要写入变量,您需要向返回的 Value 存储(store)

  • name 是变量的名称——一个 Python 字符串。

  • addrspace 是一个可选的地址空间,用于存储变量。

全局变量具有以下可写属性

  • set_metadata(name, node)

    添加给定 name 的元数据,指向给定的元数据 node——一个 MDValue 实例。

  • global_constant
    • 如果为 True,则变量声明为常量,表示其内容不能被修改。

    • 默认值为 False

  • unnamed_addr
    • 如果为 True,则变量的地址被认为不重要,这意味着它将与具有相同初始化器的其他变量合并。

    • 默认值为 False

  • initializer

    变量的初始化值——可能是一个类型为 typConstant。默认值为 None,表示变量未初始化。

  • align

    以字节为单位的显式对齐。默认值为 None,表示使用变量类型的默认对齐方式。

class llvmlite.ir.Function(module, typ, name)

一个全局函数。

  • module 是定义函数的位置。

  • typ 是函数的类型——一个 FunctionType 实例。

  • name 是函数的名称——一个 Python 字符串。

如果一个全局函数有任何基本块,它就是一个函数定义。否则,它是一个函数声明

函数具有以下方法和属性

  • append_basic_block(name='')

    在此函数主体中添加一个基本块

    • 如果 name 不为空,则它命名块的入口标签

    • 返回一个新的 Block

  • insert_basic_block(before, name='')

    类似于 append_basic_block(),但将其插入到函数基本块列表中的基本块 before 之前。

  • set_metadata(name, node)

    添加一个名为 name 的函数特定元数据,指向给定的元数据 node——一个 MDValue

  • args

    函数的参数,作为 Argument 实例的元组。

  • attributes

    一组函数属性。每个可选属性都是一个 Python 字符串。默认情况下,这是空的。使用 .add() 方法添加属性。

    fnty = ir.FunctionType(ir.DoubleType(), (ir.DoubleType(),))
    fn = Function(module, fnty, "sqrt")
    fn.attributes.add("alwaysinline")
    
  • calling_convention

    函数的调用约定——一个 Python 字符串。默认值为空字符串。

  • is_declaration

    指示全局函数是声明还是定义。

    • 如果为 True,则为声明。

    • 如果为 False,则为定义。

指令

每条指令也都是一个值。

  • 它有一个名称——接收者的名称。

  • 它有一个定义明确的类型。

  • 它可以作为其他指令或字面量中的操作数使用。

通常,您不应直接实例化指令类型。请使用 IRBuilder 类中的辅助方法。

class llvmlite.ir.Instruction

所有指令的基类。指令具有以下方法和属性

  • set_metadata(name, node)

    添加一个名为 name 的指令特定元数据,指向给定的元数据 node——一个 MDValue

  • replace_usage(old, new)

    用指令 new 替换操作数 old

  • function

    包含此指令的函数。

  • module

    定义此指令所属函数的模块。

class llvmlite.ir.PredictableInstr

可用于指定不同结果概率的指令类——例如,开关指令或条件分支指令。可预测指令具有 set_weights() 方法。

set_weights(weights)

设置指令可能结果的权重。weights 是一个正整数序列,每个整数对应一个不同的结果,并指定其相对于其他结果的相对概率。数值越大,结果越可能发生。

class llvmlite.ir.SwitchInstr

一个开关指令。开关指令具有 add_case() 方法。

add_case(val, block)

向开关指令添加一个分支。

  • val 应该是一个 Constant 或与开关指令操作数类型兼容的 Python 值。

  • block 是一个,如果 val 和开关操作数比较相等,则跳转到该块。

class llvmlite.ir.IndirectBranch

一个间接分支指令。间接分支指令具有 add_destination() 方法。

add_destination(value, block)

添加一个传出边。间接分支指令必须引用其可以转移控制的所有基本块。

class llvmlite.ir.PhiInstr

一个 phi 指令。phi 指令具有 add_incoming() 方法。

add_incoming(value, block)

添加一个传入边。每当控制从 block—一个 Block—转移时,phi 指令都会取给定的 value

class llvmlite.ir.LandingPad

一个着陆点。着陆点具有 add_clause() 方法。

add_clause(value, block)

添加一个捕获或过滤子句。使用 CatchClause 创建捕获子句,使用 FilterClause 创建过滤子句。

着陆点子句

着陆点关联了以下类。

class llvmlite.ir.CatchClause(value)

一个捕获子句。指示个性化函数将进行中的异常类型信息与 value 进行比较,value 的类型应为 IntType(8).as_pointer().as_pointer()

class llvmlite.ir.FilterClause(value)

一个过滤子句。指示个性化函数检查进行中的异常类型信息是否包含在 value 中,value 的类型应为 ArrayType(IntType(8).as_pointer().as_pointer(), …)