我是LLVM的初学者。当我浏览LLVM的API时,我有一个幼稚的问题:
llvm GlobalValue.h中的“物化”是什么意思
在doxygen中:http : //llvm.org/doxygen/classllvm_1_1GlobalValue.html#ac1b5643f40dd3c7b92a548027eb13de0
它说:错误GlobalValue :: materialize()
确保已完全读取此GlobalValue。
但是,这到底意味着什么?这是否意味着该函数将使GlobalValue被完全读取?“完全阅读”是什么意思?
提前致谢!
从位码或文本IR加载LLVM IR时,可以选择使用仅加载全局/函数的“声明”的“惰性”加载器(请参阅include/llvm/IRReader/IRReader.h或include/llvm/Bitcode/BitcodeReader.h在LLVM 4.0源中)。每当您需要“定义”时,就必须实现您所需要的。
此优化避免了从位码或IR文件中解析和加载不必要的代码。
您仍然会得到一个llvm::Module,但是全局变量(包括函数)不是“物化的”,即,您可以查看类型,但是对于一个函数,您必须先调用才能访问实际的函数体materialize。在将功能或模块传递给需要调用代码或模块的LLVM API函数之前,必须先调用该代码materialize()或模块materializeAll()。
如果您不需要这种行为,则可以使用非延迟版本的加载程序,而不必为此担心。尤其是,如果您通过API自己创建模块,而不是从某个地方加载模块,则无需担心是否会泛化。
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |