On Wed, Apr 20, 2011 at 2:42 AM, Easwaran Raman <era...@google.com> wrote: > Hi, > This patch allows variables whose type transitively contains a union to > share stack slots if -fno-strict-aliasing is used. > > Bootstraps on x86_64 with no test regressions. Also tested by changing > flag_strict_aliasing to 0 by default. Bootstraps and no test regressions when > compared to flag_strict_aliasing=0 without this patch. > > OK for trunk?
Ok. Thanks, Richard. > -Easwaran > > 2011-04-19 Easwaran Raman <era...@google.com> > > * gcc/testsuite/gcc.dg/stack-layout-1.c: New > * gcc/cfgexpand.c (add_alias_set_conflicts): Add conflicts > with a variable containing union type only with > -fstrict-aliasing. > > Index: gcc/testsuite/gcc.dg/stack-layout-1.c > =================================================================== > --- gcc/testsuite/gcc.dg/stack-layout-1.c (revision 0) > +++ gcc/testsuite/gcc.dg/stack-layout-1.c (revision 0) > @@ -0,0 +1,25 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -fno-strict-aliasing -fdump-rtl-expand" } */ > +union U { > + int a; > + float b; > +}; > +struct A { > + union U u1; > + char a[100]; > +}; > +void bar (struct A *); > +void foo () > + { > + { > + struct A a; > + bar (&a); > + } > + { > + struct A a; > + bar (&a); > + } > + } > + > +/* { dg-final { scan-rtl-dump-times "Partition" 1 "expand" } } */ > +/* { dg-final { cleanup-rtl-dump "expand" } } */ > Index: gcc/cfgexpand.c > =================================================================== > --- gcc/cfgexpand.c (revision 172657) > +++ gcc/cfgexpand.c (working copy) > @@ -373,8 +373,9 @@ add_alias_set_conflicts (void) > to elements will conflict. In case of unions we have > to be careful as type based aliasing rules may say > access to the same memory does not conflict. So play > - safe and add a conflict in this case. */ > - || contains_union) > + safe and add a conflict in this case when > + -fstrict-aliasing is used. */ > + || (contains_union && flag_strict_aliasing)) > add_stack_var_conflict (i, j); > } > } > > -- > This patch is available for review at http://codereview.appspot.com/4444051 >