This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/17482] New: GCSE after reload replacing changing instructions
- From: "dje at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 14 Sep 2004 18:03:14 -0000
- Subject: [Bug rtl-optimization/17482] New: GCSE after reload replacing changing instructions
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
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