什么"实现"在llvm GlobalValue.h中表示

时间:2017-08-11 19:06:28

标签: llvm llvm-ir

我是LLVM的初学者。 当我浏览LLVM的API时,我有一个天真的问题:

"实现了什么"在llvm GlobalValue.h中意思是

在doxygen中

http://llvm.org/doxygen/classllvm_1_1GlobalValue.html#ac1b5643f40dd3c7b92a548027eb13de0

它说: 错误GlobalValue :: materialize()

  

确保完全阅读此GlobalValue。

但是,它究竟意味着什么?这是否意味着此函数将使GlobalValue被完全读取?什么"完全阅读"意思?

提前致谢!

1 个答案:

答案 0 :(得分:4)

从bitcode或文本IR加载LLVM IR时,您可以选择使用只加载“声明”的“懒惰”加载器(请参阅LLVM 4.0源中的include/llvm/IRReader/IRReader.hinclude/llvm/Bitcode/BitcodeReader.h)全局/函数。无论什么时候需要“定义”,你都必须实现你需要的东西。

这是一种优化,可以避免从bitcode或IR文件中解析和加载不必要的代码。

你仍然会得到llvm::Module,但是全局(包括函数)不是“物化”的,即你可以查看类型,但是对于一个函数,你不能访问实际的函数体,直到你调用materialize。在将函数或模块传递给需要代码的LLVM API函数之前,您必须调用materialize()或模块materializeAll()

如果您不需要此行为,您也可以使用非延迟版本的加载器,而不必担心这一点。特别是如果您通过API自己创建模块而不是从某处加载模块,则无需担心材料化。