我想使用parseIRFile
调用来解析用clang++ -S -emit-llvm test.cpp -o test.ir
创建的IR文件,稍微操作此IR,然后将IR写回文件。LLVM:如何将IR写入文件并运行?
我试过使用WriteBitcodeToFile
调用,但这不能按预期方式工作。
如何将模块写回IR,然后编译并运行修改的IR?
#include <llvm/IR/Module.h>
#include <llvm/IRReader/IRReader.h>
#include <llvm/IR/LLVMContext.h>
#include <llvm/Support/SourceMgr.h>
#include <llvm/Bitcode/ReaderWriter.h>
#include <llvm/Support/FileSystem.h>
using namespace llvm;
int main()
{
LLVMContext context;
SMDiagnostic error;
std::unique_ptr<Module> m = parseIRFile("test.ir", error, context);
std::error_code EC;
llvm::raw_fd_ostream OS("module", EC, llvm::sys::fs::F_None);
WriteBitcodeToFile(m.get(), OS);
OS.flush();
return 0;
}
你说的 “不能按预期工作” 是什么意思? – Steeve
当我打开文件时,内容看起来是二进制的? – Shuzheng
@Shuzheng这只是IR的二进制编码。您可以使用'llvm-dis'来获取文本IR,但是您应该可以直接在二进制文件上使用'llc'来创建一个目标文件。 – TartanLlama