[struct-reorg] strip struct frame from one-field structures.

Alon Dayan ALOND@il.ibm.com
Wed May 21 13:58:00 GMT 2008



"Richard Guenther" <richard.guenther@gmail.com> wrote on 12/05/2008
15:35:22:

> On Mon, May 12, 2008 at 1:41 PM, Alon Dayan <ALOND@il.ibm.com> wrote:
> >
> >  This patch extends struct-reorg optimizations with an ability to strip
a
> >  structure frame from one-field structures.
> >
> >  For example, the variable 'a' of structure type:
> >
> >  typedef struct str
> >  {
> >         int* a;
> >  }
> >  str a;
> >
> >  will be replaced with
> >  int* a;
> >
> >  It works for both user-defined and compiler generated structures, as,
for
> >  example, those produced after structure peeling.
> >  The param struct-reorg-strip-struct was added to activate this
> >  optimization.
> >
> >  With this patch we measured additional 15% on 179.art over basic
> >  struct-reorg on p5.
>
> Did you analyze why?  Because ...

It seems that this patch causes loads to move upward.

Unfortunately we cannot reproduce this effect on small testcase, but
we see it all over the 179.art benchmark.


Without the patch:                  With:.

.L192:					.L192::
      lwz 0,0(30)                   lwz 0,0(29)
      cmpwi 7,0,0                   cmpwi 7,0,0
      ble 7,.L253                   ble 7,.L253
      mtctr 0                       mtctr 0
      lwz 4,20(31)                  lwz 4,20(30)
      lwz 5,24(31)                  lwz 5,24(30)
      li 11,0                       li 9,0
      lwz 6,28(31)                  lwz 6,28(30)
      lwz 7,32(31)                  lwz 7,32(30)
      lwz 8,36(31)                  lwz 8,36(30)
      lwz 10,40(31)                 lwz 10,40(30)
                                    lwz 11,44(30)
      lfd 0,0(28)                   lfd 0,0(28)
      bgt+ 7,.L193                  bgt+ 7,.L193
      li 12,1                       li 0,1
      mtctr 12                      mtctr 0
.L193:				.L193:
      lwz 21,44(30)
      slwi 12,11,3                  slwi 0,9,3
      addi 11,11,1                  addi 9,9,1
      stfdx 0,4,12                  stfdx 0,4,0

Apparently, this patch influence scheduler results, probably
due to some dependences which were released.
But we did not hit the nail on the head yet.

Danny, can this patch change results of aliasing in some way,
and thus cause changing scheduler decision?

Alon



More information about the Gcc-patches mailing list