[LLVMdev] Preferred alignment of globals > 16bytes

Hal Finkel hfinkel at anl.gov
Thu Sep 6 09:16:53 PDT 2012


On Thu, 6 Sep 2012 16:51:52 +0100
Richard Osborne <richard at xmos.com> wrote:

> 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?
> 

I think that we should make this configurable; I have systems on which
I'd like this to be 32.

 -Hal

-- 
Hal Finkel
Postdoctoral Appointee
Leadership Computing Facility
Argonne National Laboratory



More information about the llvm-dev mailing list