------- Comment #5 from bergner at gcc dot gnu dot org  2007-01-19 22:30 -------
The src we seem to be having problems with is:

    temp[0] |= bit;

After local-alloc, we have the following RTL:

(insn 143 28 29 6 pr29558.c:7 (set (reg:QI 142)
        (const_int -128 [0xffffffffffffff80])) 327 {*movqi_internal} (nil)
    (expr_list:REG_EQUIV (const_int -128 [0xffffffffffffff80])
        (nil)))

(insn 29 143 30 6 pr29558.c:7 (set (reg:SI 144)
        (ior:SI (subreg:SI (reg:QI 143 [ temp ]) 0)
            (subreg:SI (reg:QI 142) 0))) 137 {*boolsi3_internal1}
(insn_list:REG_DEP_TRUE 27 (insn_list:REG_DEP_TRUE 28 (nil)))
    (expr_list:REG_DEAD (reg:QI 143 [ temp ])
        (expr_list:REG_DEAD (reg:QI 142)
            (nil))))

(insn 30 29 138 6 pr29558.c:7 (set (mem/s/j:QI (plus:DI (reg/f:DI 113 sfp)
                (const_int 48 [0x30])) [0 temp+0 S1 A128])
        (subreg:QI (reg:SI 144) 3)) 327 {*movqi_internal}
(insn_list:REG_DEP_TRUE 29 (nil))
    (expr_list:REG_DEAD (reg:SI 144)
        (nil)))

Which looks ok, but then after global-alloc/reload, we end up with:

(insn 143 28 29 6 pr29558.c:7 (set (reg:QI 9 9 [142])
        (const_int -128 [0xffffffffffffff80])) 327 {*movqi_internal} (nil)
    (expr_list:REG_EQUIV (const_int -128 [0xffffffffffffff80])
        (nil)))

(insn 29 143 30 6 pr29558.c:7 (set (reg:SI 0 0 [144])
        (ior:SI (reg:SI 0 0 [orig:143 temp+-3 ] [143])
            (reg:SI 9 9 [orig:142+-3 ] [142]))) 137 {*boolsi3_internal1}
(insn_list:REG_DEP_TRUE 27 (insn_list:REG_DEP_TRUE 28 
(nil)))
    (nil))

(insn 30 29 138 6 pr29558.c:7 (set (mem/s/j:QI (plus:DI (reg/f:DI 1 1)
                (const_int -16 [0xfffffffffffffff0])) [0 temp+0 S1 A128])
        (reg:QI 0 0 [orig:144+3 ] [144])) 327 {*movqi_internal}
(insn_list:REG_DEP_TRUE 29 (nil))
    (nil))

I'm not sure why yet, but it seems the -3 offset in reg:SI 0 0 [orig:143
temp+-3 ] [143]) is causing problems in the var tracking code, such that
find_variable_location_part() always returns -1 (ie, failure) which puts us
into the code we ICE in.


-- 


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

Reply via email to