rjmccall added a reviewer: t.p.northover.
rjmccall added inline comments.

================
Comment at: clang/lib/CodeGen/TargetInfo.cpp:5461
 
   // Otherwise, just use the general rule.
+  // TODO: a better approach may refer to SystemZABI use same logic for caller
----------------
Please add this comment explaining the use of ForceRightAdjust:

> The PPC64 ABI passes some arguments in integer registers, even to variadic 
> functions.  To allow `va_list` to use the simple "`void*`" representation, 
> variadic calls allocate space in the argument area for the integer argument 
> registers, and variadic functions spill their integer argument registers to 
> this area in their prologues.  When aggregates smaller than a register are 
> passed this way, they are passed in the least significant bits of the 
> register, which means that after spilling on big-endian targets they will be 
> right-aligned in their argument slot.  This is uncommon; for a variety of 
> reasons, other big-endian targets don't end up right-aligning aggregate types 
> this way, and so right-alignment only applies to fundamental types.  So on 
> PPC64, we must force the use of right-alignment even for aggregates.

I'm not sure what your TODO is hoping for.  You'd like to re-use logic between 
the frontend's va_arg emission and the backend's variadic argument emission?  
That would be very tricky.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D133338

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to