如何获得C程序的优化RTL?

时间:2015-11-15 07:28:38

标签: c gcc compiler-construction

我已经使用" -fdump-final-insns"转储了作为中间产生的RTL。使用gcc编译C程序时标记,但我需要它的优化版本,即编译器优化阶段后的结果RTL。我怎么能得到它?

示例 - 注册转移语言(RTL)

(insn 14 12 15 (nil) (set (reg:CCZ 17
    (compare:CCZ (mem/f:SI (plus:SI (reg/f:SI 54 virtual-stack-vars)
            (const_int -4 [0xfffffffc])) [0 i+0 S4 A32])
                (const_int 99 [0x63]))) -1 (nil)
            (nil))

优化的RTL -

(insn 14 12 15 (nil) (set (reg:CCZ 17 flags)
     (compare:CCZ (reg/v:SI 61 [ i ])
         (const_int 99 [0x63]))) -1 (nil)
 (nil))

1 个答案:

答案 0 :(得分:1)

为此,您可以使用标志:

gcc foo.c -da -dp -fdump-tree-all-raw-lineno

位置:

-da产生所有RTL转储

-dp用注释说明汇编输出,该注释指示 模式和替代方法。

-fdump-tree-all-raw-lineno启用显示语句的行号。

这将创建大约167个文件,每个文件意味着GIMPLE和RTL通过,优化等不同阶段。 这是简单的解释,这是怎么回事:

https://www.cse.iitb.ac.in/~uday/courses/cs715-09/gcc-rtl.pdf

查看最后两个数字306和307,在将编译器解析为汇编器之前,它是编译器的最后一个优化阶段。

foo.c.306r.final
foo.c.307r.finish

您还可以将标志-S-dA一起使用 其中:

-S产生汇编输出

-dA用其他调试信息注释汇编程序输出

,并且在foo.s中,您可以查看RTL与汇编代码之间的连接。