保存对LLVM基本锁定过程的更改

保存对LLVM基本锁定过程的更改,llvm,Llvm,我成功地向LLVM中的基本块添加了一些元数据。然后我使用Mod->dump()在屏幕上显示它 数据成功添加到我的字节码,即元数据显示在屏幕上 我的问题是这些更改没有在我的原始文件中更新 我怎样才能解决这个问题 class BasicBlock1 : public BasicBlockPass { public: BasicBlock1() : BasicBlockPass(ID) {} virtual bool runOnBasicBlock(BasicBlock

我成功地向LLVM中的基本块添加了一些元数据。然后我使用
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()
相同的代码。您能否更新该问题,以显示如何将修改后的模块保存到文件中?