[clang] [AArch64] Change the coercion type of structs with pointer members. (PR #135064)

David Green via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 10 09:21:13 PDT 2025


================
@@ -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


More information about the cfe-commits mailing list