目标信息
目标信息允许您检查和修改代码生成方面的细节,例如针对哪个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_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
表示一个编译目标。提供以下工厂方法
以下属性和方法可用
- 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。
- 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会话之间提供稳定的顺序。