目标信息

目标信息允许您检查和修改代码生成方面的细节,例如针对哪个CPU或需要哪种优化级别。

此模块最简单的用法是创建一个TargetMachine以供后续代码生成使用。

示例

from llvmlite import binding
target = binding.Target.from_default_triple()
target_machine = target.create_target_machine()

函数

  • llvmlite.binding.get_default_triple()

    返回一个字符串,表示LLVM配置生成代码的默认目标三元组(target triple)。这代表了主机的架构和平台。

  • llvmlite.binding.get_process_triple()

    返回一个适合为当前进程生成代码的目标三元组。

    示例:来自get_default_triple()的默认三元组不适用,如果LLVM编译为32位,但进程以64位模式执行。

  • llvmlite.binding.get_object_format(triple=None)

    获取给定triple字符串的对象格式,如果None,则为默认三元组。返回一个字符串,例如"ELF""COFF""MachO"

  • llvmlite.binding.get_host_cpu_name()

    获取主机CPU的名称(字符串形式)。您可以将返回值与Target.create_target_machine()一起使用。

  • llvmlite.binding.get_host_cpu_features()

    返回一个类似字典的对象,指示当前架构的CPU特性以及这些特性是否为此CPU启用。

    键值对包含作为字符串的特性名称,以及一个布尔值,指示该特性是否可用。

    返回值是FeatureMap类的一个实例,它添加了一个新方法.flatten(),用于返回一个字符串,该字符串适合用作Target.create_target_machine()features参数。

    如果LLVM尚未实现此特性或获取信息失败,则会引发RuntimeError异常。

  • llvmlite.binding.create_target_data(data_layout)

    创建一个TargetData,表示给定的data_layout字符串。

class llvmlite.binding.TargetData

提供围绕给定数据布局的功能。它指定了不同类型在内存中的表示方式。使用create_target_data()进行实例化。

  • get_abi_size(type)

    获取TypeRef对象的ABI规定大小。返回一个整数。

  • get_abi_alignment(type)

    类似于get_abi_size(),但返回ABI规定的对齐方式而不是ABI大小。

  • get_pointee_abi_size(type)

    类似于get_abi_size(),但假定type是LLVM指针类型,并返回所指向类型的ABI规定大小。这对于全局变量很有用,因为其类型实际上是指向声明类型的指针。

  • get_pointee_abi_alignment(type)

    类似于get_pointee_abi_size(),但返回ABI规定的对齐方式而不是ABI大小。

  • get_element_offset(type, position)

    计算结构体元素在给定位置的字节偏移量。

class llvmlite.binding.Target

表示一个编译目标。提供以下工厂方法

  • classmethod from_triple(triple)

    为给定的triple字符串表示的目标平台创建一个新的Target实例。

  • classmethod from_default_triple()

    为LLVM配置生成代码的默认平台创建一个新的Target实例。这等同于调用Target.from_triple(get_default_triple())

以下属性和方法可用

  • description

    目标的描述。

  • name

    目标的名称。

  • triple

    唯一标识目标的字符串。

    示例:"x86_64-pc-linux-gnu"

  • create_target_machine(cpu='', features='', opt=2, reloc='default', codemodel='jitdefault', abiname='')

    为此目标创建一个新的TargetMachine实例,并使用给定选项

    • cpu是可选的CPU名称,用于指定CPU特性。

    • features是逗号分隔的目标特定特性列表,用于启用或禁用。

    • opt是优化级别,范围从0到3。

    • reloc是重定位模型。

    • codemodel是代码模型。

    • abiname是ABI的名称。

    reloc和codemodel的默认值适用于JIT编译。

    提示:要列出目标可用的CPU和特性,请运行命令llc -mcpu=help

class llvmlite.binding.TargetMachine

包含正确代码生成所需的所有设置,包括目标信息和编译器选项。使用Target.create_target_machine()进行实例化。

  • add_analysis_passes(pm)

    为此目标机器将分析遍(analysis passes)注册到PassManager实例pm

  • emit_object(module)

    将编译后的module—一个ModuleRef实例—表示为一个适合与平台链接器一起使用的代码对象。返回一个字节字符串。

  • set_asm_verbosity(is_verbose)

    设置此目标机器是否生成带有人类可读注释的汇编代码,例如描述控制流或调试信息的注释。

  • emit_assembly(module)

    返回一个字符串,表示编译后的module的本地汇编代码。您必须首先调用initialize_native_asmprinter()

  • target_data

    与此目标机器关联的TargetData

class llvmlite.binding.FeatureMap

以类似字典的对象存储处理器特性信息。此类继承自dict并且只添加了.flatten()方法。

flatten(sort=True)

返回存储信息的字符串表示形式,适合用作Target.create_target_machine()features参数。

如果sort关键字参数为True(默认值),则特性按名称排序,以在Python会话之间提供稳定的顺序。