我正在尝试将元数据字符串添加到我的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();
}
Run Code Online (Sandbox Code Playgroud)
我可以编译并运行它:
Desktop% g++ llvm.cc -o llvm `llvm-config --cppflags --ldflags --libs all`
Desktop% ./llvm
; ModuleID = 'test'
Run Code Online (Sandbox Code Playgroud)
但正如人们所看到的,元数据没有出现。
我可以以某种方式将字符串添加到模块中吗?该模块本身似乎仅提供对命名元数据的访问。现在我不知道我还能去哪里。有什么建议么?
补充:我感觉到您不能只在模块中有一个元数据字符串“浮动”,似乎您必须将其添加到一个命名的元数据节点中。那正确吗?
尝试这个:
#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();
}
Run Code Online (Sandbox Code Playgroud)
我不确定您是否能够像您所说的那样让元数据“漂浮”。如果它没有附加到程序的任何部分,那么它有什么用呢?我最近一直在研究MD......我在lib/Analysis/DIBuilder.cpp中找到了类似的代码。祝你好运。
| 归档时间: |
|
| 查看次数: |
1901 次 |
| 最近记录: |