我有一个输入文件 (.ll),我想用 LLVM 对其进行解析,从而生成程序的内存中表示,然后它应该不被解析并转储到标准输出,但纯粹来自生成的 AST。我成功了一部分。LLVM 解析程序并将模块转储到标准输出。然而,原始源代码的格式被保留。这让人认为 LLVM 并没有真正解析 AST 以转储模块,而是 LLVM 将文本表示与内存中的 AST 一起存储,如果没有进行任何更改,则更喜欢转储此文本表示,这不是我想要的。
std::cout << "Reading IR ...\n";
LLVMContext &Context = getGlobalContext();
SMDiagnostic Err;
Module *Mod = ParseIRFile(argv[1], Err, Context);
if (!Mod) {
std::cerr << "Problems reading IR\n";
return 1;
}
Mod->dump();
我的问题是:为什么在转储模块时保留原始源代码的格式,有没有办法让 LLVM 删除程序的文本表示并让它实际上解析 AST?