模块
尽管它们在概念上代表相同的事物,但 IR 层 中的模块和 绑定层 中的模块具有不同的作用,并且不公开相同的 API。
IR 层中的模块允许您构建和分组函数,而绑定层中的模块则提供代码的编译、链接和执行访问权限。为了区分它们,绑定层中的模块类被称为 ModuleRef
,而非 llvmlite.ir.Module
。
要从 IR 层转到绑定层,请使用 parse_assembly()
函数。
工厂函数
您可以通过以下工厂函数创建模块
- llvmlite.binding.parse_assembly(llvmir, context=None)
解析给定的 llvmir,这是一个包含 LLVM IR 代码的字符串。如果解析成功,将返回一个新的
ModuleRef
实例。context:
LLVMContextRef
的一个实例。默认为全局上下文。
示例:您可以通过对
llvmlite.ir.Module
对象调用str()
来获取 llvmir。
- llvmlite.binding.parse_bitcode(bitcode, context=None)
解析给定的 bitcode,这是一个包含模块 LLVM 位码的字节串。如果解析成功,将返回一个新的
ModuleRef
实例。context:
LLVMContextRef
的一个实例。默认为全局上下文。
示例:您可以通过调用
ModuleRef.as_bitcode()
来获取 bitcode。
ModuleRef 类
- class llvmlite.binding.ModuleRef
LLVM 模块对象的包装器。提供以下方法和属性
- as_bitcode()
将此模块的位码作为字节对象返回。
- link_in(other, preserve=False)
将 other 模块链接到此模块中,尽可能解析引用。
如果 preserve 为
True
,则首先复制另一个模块以保留其内容。如果 preserve 为
False
,则在该调用后,另一个模块将不可用。
- verify()
验证模块的正确性。如果出错,抛出
RuntimeError
。
- data_layout
此模块的数据布局字符串。此属性可设置。
- name
模块的标识符,作为字符串。此属性可设置。
- source_file
模块报告的源文件,作为字符串。此属性不可设置。
- triple
此模块的平台“三元组”字符串。此属性可设置。