This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 05/22/2013 02:01 AM, Richard Biener wrote:
On Wed, May 22, 2013 at 3:57 AM, David Edelsohn <dje.gcc@gmail.com> wrote:Increasing the alignment of arrays within structs and unions would be nice, but that probably will change the ABI. I think that they best we may be able to do is increase the alignment if the array is the first element of the struct or union, see ROUND_TYPE_ALIGN for AIX. Although this might be more trouble than it is worth.Maybe the idea was to increase the alignment of the struct (without affecting it's layout) when that increases the alignment of a contained array member. Like for struct { int i; int j; float a[1024]; int x; }; where aligning to sizeof (int) * 2 would get 'a' a bigger alignment.
In fact, this is what the patch I posted earlier this week does, except the alignment it looks for is 16 bytes. In other words, it doesn't change the alignment of arrays inside structs (which would cause all sorts of compatibility problems), but it checks to see whether there is already some array inside the struct aligned on a 16-byte offset so that the whole containing struct object would benefit from being aligned on a 16-byte boundary.
This was a generalization of the suggestion from the previous review to align structs that contain an array as the first or only element.... I realized we'd want to handle unions too, and look at all fields in a union instead of just the first one in a struct, and unifying the two cases made the code come out tidier. :-)
-Sandra
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |