------- Additional Comments From jakub at gcc dot gnu dot org 2005-03-08 14:01 ------- Seems to be the combiner, that combines: (insn 8 22 10 0 (set (reg/v:DI 42 r13 [ r ]) (symbol_ref:DI ("g") [flags 0x3] <function_decl 0x2a97cde410 g>)) 84 {*movdi_1_rex64_nointerunit} (nil) (nil))
(insn 10 8 12 0 (set (reg:DI 59 [ r ]) (reg/v:DI 42 r13 [ r ])) 84 {*movdi_1_rex64_nointerunit} (insn_list 8 (nil)) (expr_list:REG_DEAD (reg/v:DI 42 r13 [ r ]) (nil))) into: (insn 10 8 12 0 (set (reg:DI 59 [ r ]) (symbol_ref:DI ("g") [flags 0x3] <function_decl 0x2a97cde410 g>)) 84 {*movdi_1_rex64_nointerunit} (nil) (nil)) without taking into account that there is a hard reg assignment. This means it is not certain that the problem is not present in 4.0/4.1 as well, just that combiner is not presented the same *.life RTLs and therefore makes different decisions. In 4.0, *.life looks like: (insn 8 6 9 0 (set (reg/v:DI 42 r13 [ r ]) (symbol_ref:DI ("g") [flags 0x3] <function_decl 0x2a97d09820 g>)) 81 {*movdi_1_rex64} (nil) (expr_list:REG_UNUSED (reg/v:DI 42 r13 [ r ]) (nil))) (insn 9 8 10 0 (set (reg/f:DI 59) (symbol_ref:DI ("g") [flags 0x3] <function_decl 0x2a97d09820 g>)) 81 {*movdi_1_rex64} (nil) (nil)) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20359