我正在尝试添加一个元数据字符串到我的 LLVM 模块。我正在尝试的精简版本是
#include <llvm/LLVMContext.h>
#include <llvm/Module.h>
#include <llvm/Metadata.h>
using namespace llvm;
int main() {
Module* module = new Module("test", getGlobalContext());
MDString::get(module->getContext(), "test");
module->dump();
}
我可以编译并运行它:
Desktop% g++ llvm.cc -o llvm `llvm-config --cppflags --ldflags --libs all`
Desktop% ./llvm
; ModuleID = 'test'
但正如我们所看到的,元数据并没有显示出来。
我可以以某种方式将字符串添加到模块中吗?这module其本身似乎只提供对命名元数据的访问。现在我不知道还能去哪里寻找。有什么建议么?
补充:我感觉你不能只在模块中“浮动”一个元数据字符串,似乎你必须将它添加到一个命名的元数据节点中。是对的吗?
尝试这个:
#include <llvm/LLVMContext.h>
#include <llvm/Module.h>
#include <llvm/Metadata.h>
using namespace llvm;
int main() {
Module* module = new Module("test", getGlobalContext());
Value *Elts[] = {
MDString::get(module->getContext(), "test1")
};
MDNode *Node = MDNode::get(getGlobalContext(), Elts);
NamedMDNode *NMD = module->getOrInsertNamedMetadata("test2");
NMD->addOperand(Node);
module->dump();
}
我不确定您是否能够像您所说的那样让元数据“漂浮”。如果它没有附加到程序的任何部分,那么它有什么用呢?我最近一直在研究MD......我发现了类似的代码lib/分析/DIBuilder.cpp。祝你好运。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)