================ @@ -485,6 +485,24 @@ ABIArgInfo AArch64ABIInfo::classifyArgumentType(QualType Ty, bool IsVariadicFn, } Size = llvm::alignTo(Size, Alignment); + // If the Aggregate is made up of pointers, use an array of pointers for the + // coerced type. This prevents having to convert ptr2int->int2ptr through + // the call, allowing alias analysis to produce better code. + if (const RecordType *RT = Ty->getAs<RecordType>()) { + if (const RecordDecl *RD = RT->getDecl()) { + if (all_of(RD->fields(), [](FieldDecl *FD) { + return FD->getType()->isPointerOrReferenceType(); ---------------- davemgreen wrote:
Thanks - isHomogeneousAggregate was useful to look at. Let me know if there are any other tests that would be useful to add. https://github.com/llvm/llvm-project/pull/135064 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits