【发布时间】:2013-02-20 00:33:35
【问题描述】:
来自维基百科上的Optimization Compiler,
编译器优化通常使用优化转换序列来实现,这些算法采用程序并对其进行转换,以生成使用较少资源的语义等效输出程序。
而且 GCC 有一个 lot 的优化选项。
我想研究在使用 -O1、-O2、-O3 等不同标志进行编译时每次优化 GCC 执行后生成的程序集(-S 给出的程序集)。
我该怎么做?
编辑:我的输入将是 C 代码。
【问题讨论】:
-
优化不适用于汇编代码,但适用于中间表示。
-
为了回复您的临时评论,在应用优化 O2 之前刚刚应用优化 O1 的程序集在任何时候都不存在。如果你想看汇编,你所能做的就是在 O1 之后完成编译而不做进一步的优化。这可能是您所追求的,但它不是“每次优化后生成的程序集 [...]”,同样,它不存在。或者,您可以学习如何破译中间表示,您将确实能够看到优化生效。
-
@PascalCuoq,是的,这就是我想要的,抱歉我不清楚。我想在应用优化后获得 IR 的每个状态的 ASM 输出。 (我希望我的条款是正确的。)
-
实际上,窥孔优化器确实会在该级别(程序集/指令)进行优化,以实现在通用(非目标特定)IR 级别上无法进行的优化。
-
-fdump-tree-all 应该转储中间表示。
标签: c optimization gcc assembly compiler-construction