http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46804
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> 2010-12-08 10:49:42 UTC --- Regmove seems to change: (insn 107 105 816 9 (set (reg:QI 236) (mem/s/u/j:QI (const:DI (plus:DI (symbol_ref:DI ("A.4.1573") [flags 0x2] <var_decl # A.4>) (const_int 3 [0x3]))) [0 A.4 S1 A8])) pr46804.f90:15 66 {*movqi_internal} (expr_list:REG_EQUAL (mem/s/u/j:QI (const:DI (plus:DI (symbol_ref:DI ("A.4.1573") [flags 0x2] <var_decl # A.4>) (const_int 3 [0x3]))) [0 A.4 S1 A8]) (nil))) ... (insn 108 824 643 9 (set (mem/s/j:QI (plus:DI (plus:DI (mult:DI (reg:DI 235 [ S.5 ]) (const_int 2 [0x2])) (reg/f:DI 20 frame)) (const_int -781 [0xfffffffffffffcf3])) [0 FRAME.22.shift1 S1 A8]) (reg:QI 236)) pr46804.f90:15 66 {*movqi_internal} (nil)) ... (insn 117 116 832 9 (set (reg:HI 272) (sign_extend:HI (reg:QI 236))) pr46804.f90:16 134 {extendqihi2} (nil)) ... (insn 133 510 134 9 (set (reg:SI 310) (sign_extend:SI (reg:QI 236))) pr46804.f90:17 132 {extendqisi2} (expr_list:REG_DEAD (reg:QI 236) (nil))) into: (insn 107 105 816 9 (set (reg:SI 236) (sign_extend:SI (mem/s/u/j:QI (const:DI (plus:DI (symbol_ref:DI ("A.4.1573") [flags 0x2] <var_decl # A.4>) (const_int 3 [0x3]))) [0 A.4 S1 A8]))) pr46804.f90:15 132 {extendqisi2} (expr_list:REG_EQUAL (mem/s/u/j:QI (const:DI (plus:DI (symbol_ref:DI ("A.4.1573") [flags 0x2] <var_decl # A.4>) (const_int 3 [0x3]))) [0 A.4 S1 A8]) (nil))) ... (insn 108 824 643 9 (set (mem/s/j:QI (plus:DI (plus:DI (mult:DI (reg:DI 235 [ S.5 ]) (const_int 2 [0x2])) (reg/f:DI 20 frame)) (const_int -781 [0xfffffffffffffcf3])) [0 FRAME.22.shift1 S1 A8]) (subreg:QI (reg:SI 236) 0)) pr46804.f90:15 66 {*movqi_internal} (nil)) ... (insn 117 116 832 9 (set (reg:HI 272) (sign_extend:HI (subreg:QI (reg:SI 236) 0))) pr46804.f90:16 134 {extendqihi2} (nil)) ... (insn 133 510 134 9 (set (reg:SI 310) (reg:SI 236)) pr46804.f90:17 64 {*movsi_internal} (expr_list:REG_DEAD (reg:SI 236) (nil))) The problem is that REG_EQUAL note on insn 107 isn't adjusted and then with high register pressure just results in wrong code.