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

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
I think the issue is simply that RTL expansion forces the object to memory
since that is what GIMPLE does:

struct optional foo ()
{
  struct optional D.12374;

  <bb 2> [local count: 1073741824]:
  MEM <long int> [(struct optional *)&D.12374] = 0;
  MEM <unsigned char> [(struct optional *)&D.12374 + 8B] = 1;
  return D.12374;
}

and yes, if it would have had TImode we could expand it to a register pair
but it has BLKmode because it's TYPE_NEEDS_CONSTRUCTING(?), the type
isn't TREE_ADDRESSABLE for me.

Reply via email to