[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