On Fri, Jan 6, 2012 at 7:17 PM, Eric Botcazou <ebotca...@adacore.com> wrote:
>> > OK, I see.  Then the only way out I can think of is to stop going up the
>> > chain of COMPONENT_REFs as soon as the offset becomes negative.
>>
>> Yeah, that sounds like a better solution.
>
> PR ada/51775 shows that this pessimizes though because if you have an 
> enclosing
> sub-component at offset 0 on the LHS and not on the RHS, and you're using the
> model of the LHS for the RHS, you'll build a convoluted (but correct) MEM on
> the RHS, and this is apparently enough to thwart FRE/PRE and the likes in some
> simple cases:
>
>  t$F$i2_9 = MEM[(struct pack9__r2 *)y_1(D)].F.i2;
>  D.2233_3 = y_1(D)->i2;
>
> The compiler doesn't see that D.2233_3 == t$F$i2_9.  Additionally using the
> type trick would help, at least for PR ada/51775 and I guess in most cases.
>
> Thoughts?

Can you get me a testcase that I can compile?  This should be fixed in FRE.

Thanks,
Richard.

> --
> Eric Botcazou

Reply via email to