[llvm-dev] How to change CLang struct alignment behaviour?

Joan Lluch via llvm-dev llvm-dev at lists.llvm.org
Sun May 12 13:02:30 PDT 2019


My target implementation has 2 byte (16 bit ints) 
For my target implementation I would want that Clang would always use 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;
};

I correctly get it aligned by 2:

%a = alloca %struct.AA, align 2

(note that my architecture is 16 bit, so ints are 16 bits)

In summary, I noticed that Clang will compute struct alignments as the max of the alignment of the individual members.

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/llvm-dev/attachments/20190512/62ef28ec/attachment.html>


More information about the llvm-dev mailing list