This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug rtl-optimization/17482] New: GCSE after reload replacing changing instructions


gfortran.fortran-testsuite/execute/retarray_2.f90

GCSE2 is deleting instructions that appear to be identical.  The problem is that
the address register is being updated by a PRE_INC, yet GCSE2 apparently
believes the value is unchanging

expr: (mem/s:SI (plus:SI (reg/f:SI 29 29 [orig:118 ivtmp.43 ] [118])
        (reg:SI 0 0 [135])) [5 S4 A8])
hashcode: 8826
list of occurences:
(insn:HI 45 44 46 1 (set (reg:SI 9 9 [137])
        (mem/s:SI (plus:SI (reg/f:SI 29 29 [orig:118 ivtmp.43 ] [118])
                (reg:SI 0 0 [135])) [5 S4 A8])) 265 {*movsi_internal1} (insn_lis
t:REG_DEP_ANTI 113 (insn_list:REG_DEP_OUTPUT 112 (insn_list 111 (insn_list 96 (i
nsn_list 44 (insn_list:REG_DEP_ANTI 114 (insn_list:REG_DEP_ANTI 84 (insn_list 13
2 (insn_list:REG_DEP_ANTI 99 (insn_list:REG_DEP_ANTI 25 (nil)))))))))))
    (nil))

(insn:HI 82 85 81 4 (set (reg:SI 9 9 [137])
        (mem/s:SI (plus:SI (reg/f:SI 29 29 [orig:118 ivtmp.43 ] [118])
                (reg:SI 0 0 [135])) [5 S4 A8])) 265 {*movsi_internal1} (insn_lis
t 132 (insn_list:REG_DEP_ANTI 25 (nil)))
    (nil))

(insn:HI 97 96 98 5 (set (reg:SI 9 9 [137])
        (mem/s:SI (plus:SI (reg/f:SI 29 29 [orig:118 ivtmp.43 ] [118])
                (reg:SI 0 0 [135])) [5 S4 A8])) 265 {*movsi_internal1} (insn_lis
t:REG_DEP_ANTI 83 (insn_list:REG_DEP_OUTPUT 82 (insn_list 96 (insn_list:REG_DEP_
ANTI 84 (insn_list 132 (insn_list:REG_DEP_ANTI 25 (nil)))))))
    (nil))

(insn:HI 112 111 113 6 (set (reg:SI 9 9 [137])
        (mem/s:SI (plus:SI (reg/f:SI 29 29 [orig:118 ivtmp.43 ] [118])
                (reg:SI 0 0 [135])) [5 S4 A8])) 265 {*movsi_internal1} (insn_lis
t:REG_DEP_ANTI 98 (insn_list:REG_DEP_OUTPUT 97 (insn_list 96 (insn_list 111 (ins
n_list:REG_DEP_ANTI 99 (insn_list 132 (insn_list:REG_DEP_ANTI 84 (insn_list:REG_
DEP_ANTI 25 (nil)))))))))
    (nil))

generating move from 9 to 9 on edge from 6 to 1
generating move from 9 to 9 on edge from 4 to 5
generating move from 9 to 9 on edge from 5 to 6
deleting insn:
(insn/v:HI 45 44 46 1 (set (reg:SI 9 9 [137])
        (mem/s:SI (plus:SI (reg/f:SI 29 29 [orig:118 ivtmp.43 ] [118])
                (reg:SI 0 0 [135])) [5 S4 A8])) 265 {*movsi_internal1} (insn_lis
t:REG_DEP_ANTI 113 (insn_list:REG_DEP_OUTPUT 112 (insn_list 111 (insn_list 96 (i
nsn_list 44 (insn_list:REG_DEP_ANTI 114 (insn_list:REG_DEP_ANTI 84 (insn_list 13
2 (insn_list:REG_DEP_ANTI 99 (insn_list:REG_DEP_ANTI 25 (nil)))))))))))
    (nil))

deleting insn:
(insn/v:HI 97 96 98 5 (set (reg:SI 9 9 [137])
        (mem/s:SI (plus:SI (reg/f:SI 29 29 [orig:118 ivtmp.43 ] [118])
                (reg:SI 0 0 [135])) [5 S4 A8])) 265 {*movsi_internal1} (insn_lis
t:REG_DEP_ANTI 83 (insn_list:REG_DEP_OUTPUT 82 (insn_list 96 (insn_list:REG_DEP_
ANTI 84 (insn_list 132 (insn_list:REG_DEP_ANTI 25 (nil)))))))
    (nil))

deleting insn:
(insn/v:HI 112 111 113 6 (set (reg:SI 9 9 [137])
        (mem/s:SI (plus:SI (reg/f:SI 29 29 [orig:118 ivtmp.43 ] [118])
                (reg:SI 0 0 [135])) [5 S4 A8])) 265 {*movsi_internal1} (insn_lis
t:REG_DEP_ANTI 98 (insn_list:REG_DEP_OUTPUT 97 (insn_list 96 (insn_list 111 (ins
n_list:REG_DEP_ANTI 99 (insn_list 132 (insn_list:REG_DEP_ANTI 84 (insn_list:REG_
DEP_ANTI 25 (nil)))))))))
    (nil))

GCSE AFTER RELOAD stats:
copies inserted: 0
moves inserted:  3
insns deleted:   3

Deleted 3 trivially dead insns; 2 iterations

In the previous pass, 24.postreload, one sees that r29 was incremented:

(insn:HI 111 109 112 6 (set (reg:SI 11 11 [136])
        (mem/s:SI (pre_inc:SI (reg/f:SI 29 29 [orig:118 ivtmp.43 ] [118])) [5 b 
S4 A8])) 265 {*movsi_internal1} (insn_list:REG_DEP_ANTI 98 (insn_list:REG_DEP_AN
TI 97 (insn_list:REG_DEP_ANTI 81 (insn_list:REG_DEP_ANTI 82 (insn_list 96 (insn_
list:REG_DEP_ANTI 99 (insn_list 132 (insn_list:REG_DEP_ANTI 84 (insn_list:REG_DE
P_ANTI 25 (nil))))))))))
    (expr_list:REG_INC (reg/f:SI 29 29 [orig:118 ivtmp.43 ] [118])
        (nil)))

(insn:HI 112 111 113 6 (set (reg:SI 9 9 [137])
        (mem/s:SI (plus:SI (reg/f:SI 29 29 [orig:118 ivtmp.43 ] [118])
                (reg:SI 0 0 [135])) [5 S4 A8])) 265 {*movsi_internal1} (insn_lis
t:REG_DEP_ANTI 98 (insn_list:REG_DEP_OUTPUT 97 (insn_list 96 (insn_list 111 (ins
n_list:REG_DEP_ANTI 99 (insn_list 132 (insn_list:REG_DEP_ANTI 84 (insn_list:REG_
DEP_ANTI 25 (nil)))))))))
    (nil))

-- 
           Summary: GCSE after reload replacing changing instructions
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: critical
          Priority: P1
         Component: rtl-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: dje at gcc dot gnu dot org
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: powerpc-ibm-aix5.2
  GCC host triplet: powerpc-ibm-aix5.2
GCC target triplet: powerpc-ibm-aix5.2


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17482


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]