------- Comment #1 from zadeck at naturalbridge dot com  2008-05-08 16:46 
-------
Subject: Re:  [4.4 Regression] g++.dg/tree-ssa/pr19637.C
 ICEs with 135041 -> 135057

Here is the bug.   I do not know if this is just an illegal insn 
generated by a bad port or if we are missing something in the dce code.

the dce code is deleting insn 12:

(call_insn/u 12 11 47 2 
/home/zadeck/gcc36177/gcc/testsuite/g++.dg/opt/pr23714.C:11 (parallel [
            (set (reg:SF 10 r10)
                (call (mem:QI (reg/f:SI 31) [0 S1 A8])
                    (const_int 0 [0x0])))
            (clobber (reg:SI 16 srp))
        ]) 224 {*expanded_call_value_non_v32} (expr_list:REG_EH_REGION 
(const_int 1 [0x1])
        (nil))
    (expr_list:REG_DEP_TRUE (use (reg:SF 11 r11))
        (expr_list:REG_DEP_TRUE (use (reg:SF 10 r10))
            (nil))))

I would have thought that since this can generate an exception and it is 
a call insn that it would have been declared as a non deleteable insn by 
dce.c:deleteable_insn_p.  It is also clearly a jump insn even though we 
do not see it as such since it is buried in a parallel.

In particular, i assume that the dce code is getting confused because it 
does not see the call inside the parallel.

i do not know if this is a bug in the cris port or if there are other 
cases that need to be added to dce.   This is for the rtl trained 
professionals to determine.

kenny 


-- 


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

Reply via email to