[PATCH] D86790: [FE] Use preferred alignment instead of ABI alignment for complete object when applicable

James Y Knight via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 23 16:17:41 PDT 2020


jyknight added inline comments.


================
Comment at: clang/lib/CodeGen/TargetInfo.cpp:4539
     CharUnits CCAlign = getParamTypeAlignment(Ty);
     CharUnits TyAlign = getContext().getTypeAlignInChars(Ty);
 
----------------
Xiangling_L wrote:
> jasonliu wrote:
> > Question: 
> > It looks like getNaturalAlignIndirect and getTypeAlignInChars here are all returning ABI alignment.
> > But according to the comments, we should use a preferred alignment when it's a complete object. Isn't this complete object? Or I'm missing something?
> @jyknight Could you shine a light on this? Personally, I would agree that we have complete objects here, so preferred alignment should be used. And if that is true, changes should be applied on all other target within this file?
This code specifies that aggregate parameters are passed on the stack aligned to CCAlign (4 or 8), even when the aggregate _requires_ higher alignment. E.g. `struct X { int a, b; } __attribute__((aligned(8)));` would only be passed on the stack with 4-byte alignment for powerpc-aix. The callee needs the object to have the correct 8-byte alignment, so it must copy the parameter to an 8-byte aligned temporary object (this is what "Realign" asks for).

We don't want that overhead for optional (preferred) alignment. It wouldn't be wrong, but would degrade performance and isn't needed. So, no, this shouldn't use preferred alignment.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D86790/new/

https://reviews.llvm.org/D86790



More information about the cfe-commits mailing list