This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/46183] [4.6 Regression] ICE: in calc_dfs_tree, at dominance.c:396 with -O -fno-dse -fgcse -ftree-pre
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 2 Nov 2010 13:58:15 +0000
- Subject: [Bug tree-optimization/46183] [4.6 Regression] ICE: in calc_dfs_tree, at dominance.c:396 with -O -fno-dse -fgcse -ftree-pre
- Auto-submitted: auto-generated
- References: <bug-46183-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46183
Richard Guenther <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |NEW
CC| |stevenb.gcc at gmail dot
| |com
AssignedTo|rguenth at gcc dot gnu.org |unassigned at gcc dot
| |gnu.org
--- Comment #3 from Richard Guenther <rguenth at gcc dot gnu.org> 2010-11-02 13:58:05 UTC ---
RTL cprop leaves us with a not cleaned up CFG (an unreachable block), that
causes dominance computation to ICE.
;; Start of basic block () -> 16
;; bb 16 artificial_defs: { }
;; bb 16 artificial_uses: { u109(6){ }u110(7){ }u111(16){ }u112(20){ }}
;; lr in 6 [bp] 7 [sp] 16 [argp] 20 [frame] 74
;; lr use 6 [bp] 7 [sp] 16 [argp] 20 [frame]
;; lr def 17 [flags]
(code_label 90 87 91 16 14 "" [0 uses])
(note 91 90 92 16 [bb 16] NOTE_INSN_BASIC_BLOCK)
(insn 92 91 93 16 (parallel [
(set (mem/s/f/j/c:DI (plus:DI (reg/f:DI 20 frame)
(const_int -16 [0xfffffffffffffff0])) [0
ap.overflow_arg_area+0 S8 A64])
(plus:DI (mem/s/f/j/c:DI (plus:DI (reg/f:DI 20 frame)
(const_int -16 [0xfffffffffffffff0])) [0
ap.overflow_arg_area+0 S8 A64])
(const_int 8 [0x8])))
(clobber (reg:CC 17 flags))
]) t.c:13 253 {*adddi_1}
(expr_list:REG_UNUSED (reg:CC 17 flags)
(nil)))
;; End of basic block 16 -> ( 17)
;; lr out 6 [bp] 7 [sp] 16 [argp] 20 [frame] 74
;; Succ edge 17 [100.0%] (fallthru)
The solution may be as simple as making sure to remove unreachable blocks
after cprop, but already the exiting
if (local_cprop_pass ())
{
delete_unreachable_blocks ();
df_analyze ();
}
has some weird comment in front of it. Maybe steven remembers what's going
on here.
Not my bug, really only exposed by me.