efriedma added a comment.

It looks like there's some missing documentation in the ARM64 ABI document 
involving homogeneous aggregates... in particular, it looks like non-POD types 
are never homogeneous, or something along those lines.  I guess we can address 
that in a followup, though.

@TomTan could you look into updating the ARM64 ABI documentation?

Testcase:

  struct Pod {
    double b[2];
  };
  struct NotAggregate {
    NotAggregate();
    double b[2];
  };
  struct NotPod {
    NotAggregate x;
  };
  Pod copy(Pod *x) { return *x; }  // ldp d0,d1,[x0]
  NotAggregate copy(NotAggregate *x) { return *x; } // stp x8,x9,[x0]
  NotPod copy(NotPod *x) { return *x; } // ldp x0,x1,[x8]



================
Comment at: lib/Sema/SemaDeclCXX.cpp:5956
+    bool isAArch64 = S.Context.getTargetInfo().getTriple().isAArch64();
+    if (!isAArch64 && CopyCtorIsTrivial &&
         S.getASTContext().getTypeSize(D->getTypeForDecl()) <= 64)
----------------
just did some quick tests; I think this rule does in fact apply to AArch64, 
except that the limit is 128 bits, instead of 64 bits.


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

https://reviews.llvm.org/D60349



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

Reply via email to