保存对LLVM基本锁定过程的更改
我成功地向LLVM中的基本块添加了一些元数据。然后我使用保存对LLVM基本锁定过程的更改,llvm,Llvm,我成功地向LLVM中的基本块添加了一些元数据。然后我使用Mod->dump()在屏幕上显示它 数据成功添加到我的字节码,即元数据显示在屏幕上 我的问题是这些更改没有在我的原始文件中更新 我怎样才能解决这个问题 class BasicBlock1 : public BasicBlockPass { public: BasicBlock1() : BasicBlockPass(ID) {} virtual bool runOnBasicBlock(BasicBlock
Mod->dump()
在屏幕上显示它
数据成功添加到我的字节码,即元数据显示在屏幕上
我的问题是这些更改没有在我的原始文件中更新
我怎样才能解决这个问题
class BasicBlock1 : public BasicBlockPass {
public:
BasicBlock1()
: BasicBlockPass(ID)
{}
virtual bool runOnBasicBlock(BasicBlock &BB) {
Value *A[] = {MDString::get(getGlobalContext(), "mymetadata")};
MDNode *Node = MDNode::get(getGlobalContext(), A);
for (BasicBlock::iterator ii = BB.begin(), ii_e = BB.end();
ii != ii_e; ++ii) {
ii->setMetadata("XXX", Node);
}
return true;
}
static char ID;
};
char FunctionPrint::ID = 0;
char BasicBlock1::ID =0;
int main(int argc, char **argv) {
Module *Mod = ParseIRFile(argv[1], Err, getGlobalContext());
PM.add(new BasicBlock1());
PM.run(*Mod);
Mod->dump();
return 0;
}
你写道:
数据成功添加到我的字节码,即元数据显示在屏幕上
我的问题是这些更改没有在我的原始文件中更新
在代码段中,您不会在任何地方编写修改后的模块,只需将其打印到输出。您可以使用以下方法编写:
std::string ErrorInfo;
raw_fd_ostream OS(argv[1], ErrorInfo, sys::fs::F_Binary);
if (ErrorInfo.empty()) WriteBitcodeToFile(*Mod, OS);
如果它与
dump()
一起显示,它也应该在文件中,因为写入文件时使用与dump()
相同的代码。您能否更新该问题,以显示如何将修改后的模块保存到文件中?