------- Comment #39 from rguenther at suse dot de  2010-01-22 21:47 -------
Subject: Re:  [4.5 Regression] stdarg pass
 produces wrong code

On Fri, 22 Jan 2010, jakub at gcc dot gnu dot org wrote:

> ------- Comment #38 from jakub at gcc dot gnu dot org  2010-01-22 19:17 
> -------
> In 4.4 the apY = apX; assignment isn't optimized out, because the code after 
> it
> reads from the apY's fields (apY is the struct from the inline, apX in the
> caller).  But in 4.5 FRE replaces them by whatever is written into apX fields.
> It surprises me FRE does this, I'd expect that the struct needs to be SRAed
> first before such optimizations can do anything with it.

It's a feature ;)  FRE can look through struct copies now and thus
can value-number x to 1 in s.a = 1; r = s; x = r.a;

> That said, other options would be prevent FRE from doing that kind of things
> with RECORD_TYPE __builtin_va_list objects in the first fre pass, or for DCE1
> to
> somehow signalize to the stdarg pass if it removes an va_list = va_list
> assignment that it should just signalize that va_list escapes.

or alpha could make the va_list struct copies volatile.  Or we can 
schedule tree-stdarg earlier.

Richard.


-- 


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

Reply via email to