如何将修改后的 llvm 位码保存到给定的文件名?

How to save a modified llvm bitcode to a given filename?

我已经成功地修改了给定的输入位码 如 所述,从文件 中读取。 现在我想将它保存到一些输出位码文件名,用 类似于 saveIRFile(module,"myOutputBC.bc"); 的内容。 这是我正在使用的 main.cpp 文件,但我似乎找不到 正确的 API 进行所需的保存。

/**********************/
/* LLVM INCLUDE FILES */
/**********************/
#include "llvm/IR/Module.h"
#include "llvm/IRReader/IRReader.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/IR/LLVMContext.h"

/**************/
/* NAMESPACES */
/**************/
using namespace std;
using namespace llvm;

int main(int argc, char **argv)
{
    LLVMContext ctx;
    SMDiagnostic Err;
    unique_ptr<Module> M = parseIRFile(argv[1],Err,ctx);

    if (M)
    {
        Module *module = M.get();
        for (auto
            func  = module->begin();
            func != module->end();
            func++)
        {
            errs() << func->getName() << "\n";
            // modify func's basic blocks ...
            // and save with saveIRFile(module,"myOutputBC.bc");
        }
    }

    return 0;
}

非常感谢任何帮助,谢谢!

应该这样做:

std::error_code ec;
ToolOutputFile result("myOutputBC.bc", ec, sys::fs::F_None);
WriteBitcodeToFile(*module, result.os());
result.keep();

请注意,如果您使用的是旧版本的 LLVM,ToolOutputFile 可能会被称为 tool_output_file