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.

Reply via email to