[Bug tree-optimization/51528] [4.6/4.7 Regression] SRA should not create BOOLEAN_TYPE replacements

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Jan 27 13:09:00 GMT 2012


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

Richard Guenther <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|jamborm at gcc dot gnu.org  |rguenth at gcc dot gnu.org

--- Comment #3 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-01-27 13:05:40 UTC ---
SRA creates, for

struct S { int i; int j; };

struct S bar (struct S);

struct S foo1 (int i)
{
  struct S x;
  x.i = i;
  x = bar (x);
  /* LHS disqualified, RHS partially scalarized.  */
  return x;
}

for the aggregate copy to the return slot

  x$i_8 = x.i;
  D.1720 = x;
  D.1720.i = x$i_8;

but that's needlessly complicated as it should just have created

  x.i = x$i_8;
  D.1720 = x;

or for the similar case

struct S g;
struct S foo3 (int i)
{
  struct S x;
  /* RHS disqualified, LHS partially scalarized.  */
  x = g;
  x.i = i;
  x = bar (x);
  return x;
}

it creates

  x = g;
  x$i_4 = g.i;
  x$i_8 = i_1(D);
  x.i = x$i_8;

which is just a complicated from of

  x = g;
  x$i_4 = x.i;

a sub-case which it handles fine when handling calls!

  x = bar (x);
  x$i_10 = x.i;


That copy-in-out game to the unscalarized parts causes this regression.



More information about the Gcc-bugs mailing list