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

Jeffrey A. Law <law at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |law at redhat dot com

--- Comment #2 from Jeffrey A. Law <law at redhat dot com> ---
So testing this with my improvements to DSE, we discover that the first 12
bytes and the last 4 bytes of the CONSTRUCTOR assignment are dead.  Leaving
just 4 bytes to be handled by the CONSTRUCTOR assignment.    Prior to DSE this
looked like:

  info = {};
  info.prec = prec_11(D);
 [ ... more explicit assignments ... ]

With the DSE improvements it turns into;


  MEM[(char[4] *)&info + 12B] = {};
  info.prec = prec_11(D);
[ more explicit assignment follow. ]

Note how we turned the full CONSTRUCTOR into one that starts at byte offset 12
and just writes 4 bytes.

We could have started the CONSTRUCTOR at byte 13 instead of byte 12, as the
first 8 single bit fields are assigned explicitly.  The code detects this
properly, but explicitly avoids trimming to an odd start byte so as not to
totally muck up alignments.

Reply via email to