[Bug target/46171] [4.6 Regression] ICE: in gen_rtx_SUBREG, at emit-rtl.c:774 with -fno-tree-dce -g

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Oct 27 02:51:00 GMT 2010


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

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> 2010-10-27 02:51:32 UTC ---
So we have RTL like:
(insn 6 3 7 2 (set (reg:SF 21 xmm0)
        (reg/v:SF 61 [ f ])) pr46171.c:7 110 {*movsf_internal}
     (nil))

(call_insn 7 6 17 2 (set (reg:SF 21 xmm0)
        (call (mem:QI (symbol_ref:DI ("barf") [flags 0x41] <function_decl
0x7ffff16d1000 barf>) [0 S1 A8])
            (const_int 0 [0]))) pr46171.c:7 883 {*call_value_0_rex64}
     (nil)
    (expr_list:REG_DEP_TRUE (use (reg:SF 21 xmm0))
        (nil)))

(debug_insn 17 7 9 2 (var_location:SF D#2 (reg:SF 21 xmm0)) -1
     (nil))

(debug_insn 9 17 10 2 (var_location:SF f (debug_expr:SF D#2)) pr46171.c:7 -1
     (nil))

(insn 10 9 11 2 (set (reg:QI 0 ax)
        (const_int 0 [0])) pr46171.c:8 66 {*movqi_internal}
     (nil))

(call_insn 11 10 16 2 (set (reg:DF 21 xmm0)
        (call (mem:QI (symbol_ref:DI ("bard") [flags 0x41] <function_decl
0x7ffff16b2f00 bard>) [0 S1 A8])
            (const_int 0 [0]))) pr46171.c:8 883 {*call_value_0_rex64}
     (expr_list:REG_UNUSED (reg:DF 21 xmm0)
        (nil))
    (expr_list:REG_DEP_TRUE (use (reg:QI 0 ax))
        (nil)))

(debug_insn 16 11 13 2 (var_location:DF D#1 (reg:DF 21 xmm0)) -1
     (nil))

(debug_insn 13 16 0 2 (var_location:DF d (debug_expr:DF D#1)) pr46171.c:8 -1
     (nil))

debug insn 16 adds DFmode use of xmm0 via dead_debug_add.  Then the call_insn
before it isn't called for reg 21, as there are no uses of it, just sets.
Then another dead_debug_add is called for register 21 on insn 17, this time in
SFmode and then finally a dead_debug_insert_before is called on the first call
insn because reg 21 is also used there, not just set.  As we have both SFmode
and DFmode in dead debug structures for reg 21, it tries to create a SFmode
SUBREG of the DFmode DEBUG_EXPR and ICEs.



More information about the Gcc-bugs mailing list