GCSE botch with EH case

Daniel Berlin dberlin@dberlin.org
Sat Aug 14 15:36:00 GMT 2004


>
> If I look at .07.gcse, I see:
>
> STORE_MOTION  delete insn in BB 12:
>       (insn 109 185 215 12 (set (mem/s/j:SI (plus:DI (reg/f:DI 20 
> frame)
>                             (const_int -32 [0xffffffffffffffe0])) [16 
> FRAME.59.i+0 S4 A128])
>                     (reg:SI 102)) 43 {*movsi_1_nointernunit} (nil)
>                 (nil))
> STORE MOTION  replaced with insn:
>       (insn 215 109 111 12 (set (reg:SI 108)
>                     (reg:SI 102)) -1 (nil)
>                 (nil))
> STORE_MOTION  insert store at start of BB 14:
> (insn 216 209 207 14 (set (mem/s/j:SI (plus:DI (reg/f:DI 20 frame)
>                             (const_int -32 [0xffffffffffffffe0])) [16 
> FRAME.59.i+0 S4 A128])
>                     (reg:SI 108)) -1 (nil)
>                 (nil))
>
> That makes no sense and is the source of the problem.  The issue is 
> that
> the edges it's looking at are abnormal edges, so it's creating a store 
> in
> the EH case that wasn't there in the the normal case.  I don't at all
> understand what this store motion is all about.  Not only does it 
> appear
> incorrect, but I don't see how it's an "optimization".

This i'll ignore, since i'm really not up to explaining the details of 
store motion to you right now, when any compiler book could do it just 
as well.

>
> I'm at a complete loss to understand this, which looks like it's 
> causing
> the remaining ACATS failures.
>

Is this on a clean tree? One with local patches?  If it's one with 
local patches, please retry this on a clean tree and let us know if 
it's still happening.
It looks like some code that handles this in compute_pre_data needs to 
be added to build_store_vectors, but it also could be some local 
patches in your tree.
--Dan



More information about the Gcc mailing list