"materialize" 在 llvm GlobalValue.h 中是什么意思

what does "materialize" mean in llvm GlobalValue.h

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

"materialize" 在 llvm 中是什么意思 GlobalValue.h

在氧气中: http://llvm.org/doxygen/classllvm_1_1GlobalValue.html#ac1b5643f40dd3c7b92a548027eb13de0

它说: 错误GlobalValue::materialize()

Make sure this GlobalValue is fully read.

但是,这到底是什么意思?是不是意味着这个函数会让GlobalValue被完全读取? "fully read" 是什么意思?

提前致谢!

当您从位码或文本 IR 加载 LLVM IR 时,您可以选择使用“惰性”加载器(请参阅 LLVM 4.0 源代码中的 include/llvm/IRReader/IRReader.hinclude/llvm/Bitcode/BitcodeReader.h),它仅加载“ globals/functions 的声明”。每当你需要“定义”的时候,你就必须具体化你所需要的。

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

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

如果您不需要这种行为,您也可以使用加载程序的非惰性版本,而不必担心这一点。特别是如果您通过 API 自己创建模块而不是从某个地方加载它,则无需担心具体化。