uweigand added a comment.

I think it is correct to implement this in Clang.   Note that on SystemZ 
(another big-endian platform), we also implement this in `EmitVAArg`.   Of 
course the details are different since we're not using `emitVoidPtrVAArg` on 
that platform.

However, I'm not sure if the implementation itself is quite correct, in 
particular if it is right to just replace the type.  Note that looking into 
`emitVoidPtrVAArg` I see this:

  // If the argument is smaller than a slot, and this is a big-endian
  // target, the argument will be right-adjusted in its slot.
  if (DirectSize < SlotSize && CGF.CGM.getDataLayout().isBigEndian() &&
      !DirectTy->isStructTy()) {
    Addr = CGF.Builder.CreateConstInBoundsByteGEP(Addr, SlotSize - DirectSize);
  }

which seems to implement exactly the same logic, but *without* modifying the 
type as seen in the IR.    It looks like the only change needed for ppc would 
be to remove the `!DirectTy->isStructTy()` check here?   (I guess to avoid 
inadvertently change other targets, this might need to be triggered by a flag 
passed as argument.  On the other hand, maybe there is no other big-endian 
platform using `emitVoidPtrVAArg` anyway?)


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