[Bug rtl-optimization/46804] [4.5/4.6 Regression] gfortran.dg/char_cshift_2.f90 FAILs with -fregmove
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Dec 8 10:50:00 GMT 2010
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.
More information about the Gcc-bugs
mailing list