我已经使用" -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))
答案 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
与汇编代码之间的连接。