"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.h
或 include/llvm/Bitcode/BitcodeReader.h
),它仅加载“ globals/functions 的声明”。每当你需要“定义”的时候,你就必须具体化你所需要的。
这是一项优化,可避免从 bitcode 或 IR 文件中解析和加载不必要的代码。
你仍然会得到一个 llvm::Module
,但是全局变量(包括函数)不是“具体化的”,即你可以查看类型,但是对于函数你不能访问实际的函数体直到你打电话给 materialize
。在将函数或模块传递给需要代码的 LLVM API 函数之前,您必须调用 materialize()
或模块 materializeAll()
.
如果您不需要这种行为,您也可以使用加载程序的非惰性版本,而不必担心这一点。特别是如果您通过 API 自己创建模块而不是从某个地方加载它,则无需担心具体化。
我是 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.h
或 include/llvm/Bitcode/BitcodeReader.h
),它仅加载“ globals/functions 的声明”。每当你需要“定义”的时候,你就必须具体化你所需要的。
这是一项优化,可避免从 bitcode 或 IR 文件中解析和加载不必要的代码。
你仍然会得到一个 llvm::Module
,但是全局变量(包括函数)不是“具体化的”,即你可以查看类型,但是对于函数你不能访问实际的函数体直到你打电话给 materialize
。在将函数或模块传递给需要代码的 LLVM API 函数之前,您必须调用 materialize()
或模块 materializeAll()
.
如果您不需要这种行为,您也可以使用加载程序的非惰性版本,而不必担心这一点。特别是如果您通过 API 自己创建模块而不是从某个地方加载它,则无需担心具体化。