1

如何在 c 程序中查看转换传递(如死代码消除)所做的更改。就像我在终端上运行以下命令一样,它会创建一个 .bc 文件,通过该文件我可以看到 IR。但是如何在 c 程序中查看 -dce 所做的更改。命令:$opt in.bc -o out.bc -dce

4

3 回答 3

2

您看不到 C 代码中反映的 IR 中所做的更改 - 没有转换回来。(LLVM 曾经有一个 C 后端,但是 (1) 它不再受支持,并且 (2) 它只保留程序的语义,而不是它的形式)。

可以做的是使用调试信息进行编译,并在 DCE 之后从 LLVM 端查询该信息,以尝试推断通行证如何影响您的源代码。

或者,如果能够直接在源代码上进行转换对您很重要,您应该使用诸如 Clang 的前端操作之类的东西- 但您必须自己在那里实现很多逻辑,并且您无法享受 LLVM 的优化通过。

于 2013-07-20T21:05:45.773 回答
1

我想你看不到c程序的变化。

LLVM 转换传递 LLVM IR 上的工作。这样就可以生成c程序对应的LLVM IR(.ll格式)了。当您获得 pass 的 .bc 文件输出时,您可以将 .bc 文件转换为 .ll 格式。然后可以比较两个.ll文件,可以看到pass所做的修改(如:dce)。

于 2013-07-23T05:45:16.947 回答
0

如果您应用 DCE 通行证并想识别通行证所做的修改,我建议使用 llvm-nm。llvm-nm 允许您查看位码文件中的符号,包括函数和数据对象。通过比较原始 bitcode 文件的 llvm-nm 输出和优化版本,您可以识别出被 DCE Pass 删除的函数

于 2014-02-04T00:55:16.887 回答