[cfe-dev] How to change CLang struct alignment behaviour?
Joan Lluch via cfe-dev
cfe-dev at lists.llvm.org
Mon May 13 09:47:40 PDT 2019
My target implementation has 2 byte (16 bit ints)
For my target implementation I would want that Clang would always use at least 2 byte aligned padding for Structs, which would match the size of an int.
The current situation is that for this struct:
struct AA
{
char n;
char m;
char j;
};
I get it aligned by 1:
%a = alloca %struct.AA, align 1
I would want it to implicitly use 4 bytes instead of 3, (or it be aligned by 2 bytes instead of 1).
If I replace the above struct by this:
struct AA
{
int n;
char m;
};
or this:
struct AA
{
char n;
char m;
char j;
char k
};
I correctly get it aligned by 2:
%a = alloca %struct.AA, align 2
or:
%a = alloca i32, align 2
%tmpcast = bitcast i32* %a to %struct.AA*
In summary, I noticed that Clang will compute struct alignments as an int (2 bytes) if it has one, or if the struct size is already a multiple of 2, but not in other cases.
How do I change that behaviour to get structs always (at least) 2 byte aligned ?
John Lluch
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190513/ce86c6d2/attachment.html>
More information about the cfe-dev
mailing list