[Bug ipa/94693] IPA SRA should elide unused out parameters

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Apr 21 14:54:09 GMT 2020


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94693

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Or a bit more twisty

struct A { int key; double payload_A; };
struct B { int key; int payload_B; };

void foo (int *key)
{
  switch (*key)
  {
  case 1:
    ((struct A *)key)->payload_A = 1.0;
    break;
  case 2:
    ((struct B *)key)->payload_B = 1;
    break;
  default:;
  }
}

void bar()
{
  struct A s;
  s.key = 1;
  foo (&s);
}
void baz()
{
  struct B s;
  s.key = 2;
  foo  (&s);
}

to show that the type of the variable to instantiate as storage in the
callee is non-trivial (the only real constraint is it should be the
maximum size of the storage actually accessed).  Possibly simply
make sure the actually passed types are types_compatible_p and use
one of those.  With the above cases it also appears that IPA CP
could be the one handling this since &s is a (non-IP invariant) constant
and the initializer is a constant as well.  But I guess it's more IPA SRA.


More information about the Gcc-bugs mailing list