[LLVMdev] Preferred alignment of globals > 16bytes

Richard Osborne richard at xmos.com
Thu Sep 6 08:51:52 PDT 2012

I recently noticed that all globals bigger than 16 bytes are being 16 
byte aligned by LLVM (assuming there isn't an explicitly requested 
alignment). I'd really rather avoid this, at least for the XCore 
backend. I tracked this down to the following code in TargetData.cpp:

   if (GV->hasInitializer() && GVAlignment == 0) {
     if (Alignment < 16) {
       // If the global is not external, see if it is large.  If so, 
give it a
       // larger alignment.
       if (getTypeSizeInBits(ElemType) > 128)
         Alignment = 16;    // 16-byte alignment.

I was a bit surprised to see these numbers hardcoded in TargetData since 
everything else is taken from the datalayout string. I was wondering 
what the logic was behind the number 16. Would it make sense to derive 
this number from the other alignments somehow (e.g. the maximum 
preferred alignment across all types). Alternatively would it make sense 
to make it configurable in the datalayout string?

Richard Osborne | XMOS

More information about the llvm-dev mailing list