[Bug target/88861] [9 Regression] ICE in calc_dfs_tree, at dominance.c:458

dmalcolm at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Jan 15 20:53:00 GMT 2019


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88861

--- Comment #3 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Assertion fails in dom_info::calc_dfs_tree:

457       /* This aborts e.g. when there is _no_ path from ENTRY to EXIT at
all.  */
458       gcc_assert (m_nodes == (unsigned int) m_n_basic_blocks - 1);

(gdb) p m_nodes
$8 = 9
(gdb) p m_n_basic_blocks 
$9 = 11

Block 9 in .263r.ud_dce has one in-edge from block 6 (insn 29), and no out-edge
Block 9 in .264r.combine has no in-edges or out-edges

Within .263r.ud_dce:

(note 25 69 26 6 [bb 6] NOTE_INSN_BASIC_BLOCK)
(insn 26 25 28 6 (set (reg/f:DI 142)
        (mem/u/c:DI (unspec:DI [
                    (symbol_ref/u:DI ("*.LC1") [flags 0x2])
                    (reg:DI 2 2)
                ] UNSPEC_TOCREL) [3  S8 A8])) "/tmp/test.c":7:21 608
{*movdi_internal64}
     (expr_list:REG_EQUAL (symbol_ref:DI ("*.LANCHOR1") [flags 0x182])
        (nil)))
(insn 28 26 29 6 (set (reg:SI 135 [ i ])
        (mem/c:SI (plus:DI (reg/f:DI 142)
                (const_int 4 [0x4])) [1 i+0 S4 A32])) "/tmp/test.c":7:21 494
{*movsi_internal1}
     (expr_list:REG_EQUAL (mem/c:SI (const:DI (plus:DI (symbol_ref:DI
("*.LANCHOR1") [flags 0x182])
                    (const_int 4 [0x4]))) [1 i+0 S4 A32])
        (nil)))
(insn 29 28 30 6 (set (mem:SI (plus:DI (reg/f:DI 142)
                (const_int 4 [0x4])) [1 s+4 S4 A32])
        (reg:SI 135 [ i ])) "/tmp/test.c":7:21 494 {*movsi_internal1}
     (expr_list:REG_DEAD (reg:SI 135 [ i ])
        (expr_list:REG_EH_REGION (const_int 1 [0x1])
            (nil))))

...but within .264r.combine:

[...snip...]
allowing combination of insns 28 and 29
original costs 4 + 4 = 8
replacement cost 0
deferring deletion of insn with uid = 28.
modifying insn i3    29: [r142:DI+0x4]=[r142:DI+0x4]
      REG_EH_REGION 0x1
deferring rescan insn with uid = 29.
Can't combine i2 into i3
Can't combine i2 into i3
Can't combine i2 into i3
Can't combine i2 into i3
Can't combine i2 into i3
Can't combine i2 into i3
Can't combine i2 into i3
Can't combine i2 into i3
deleting noop move 29
deferring deletion of insn with uid = 29.
starting the processing of deferred insns
rescanning insn with uid = 23.
ending the processing of deferred insns

[...snip...]

(note 25 69 26 6 [bb 6] NOTE_INSN_BASIC_BLOCK)
(insn 26 25 28 6 (set (reg/f:DI 142)
        (mem/u/c:DI (unspec:DI [
                    (symbol_ref/u:DI ("*.LC1") [flags 0x2])
                    (reg:DI 2 2)
                ] UNSPEC_TOCREL) [3  S8 A8])) "/tmp/test.c":7:21 608
{*movdi_internal64}
     (expr_list:REG_EQUAL (symbol_ref:DI ("*.LANCHOR1") [flags 0x182])
        (nil)))
(note 28 26 30 6 NOTE_INSN_DELETED)

which, if I'm reading it right, seems to have deleted the usage of EH region 1,
and has left block 9 orphaned.


More information about the Gcc-bugs mailing list