[flang-commits] [flang] [flang] AArch64 support for BIND(C) derived return types (PR #114051)
Kiran Chandramohan via flang-commits
flang-commits at lists.llvm.org
Tue Oct 29 10:51:31 PDT 2024
================
@@ -825,6 +825,48 @@ struct TargetAArch64 : public GenericTarget<TargetAArch64> {
}
return marshal;
}
+
+ static bool isHFA(fir::RecordType ty) {
+ auto types = ty.getTypeList();
+ if (types.empty() || types.size() > 4) {
+ return false;
+ }
+
+ if (!isa_real(types.front().second)) {
+ types.front().second.dump();
+ return false;
+ }
+
+ return llvm::all_equal(llvm::make_second_range(types));
+ }
+
+ CodeGenSpecifics::Marshalling
+ structReturnType(mlir::Location loc, fir::RecordType ty) const override {
+ CodeGenSpecifics::Marshalling marshal;
+
+ if (isHFA(ty)) {
+ auto newTy = fir::SequenceType::get({ty.getNumFields()}, ty.getType(0));
+ marshal.emplace_back(newTy, AT{});
+ return marshal;
+ }
+
+ auto [size, align] =
+ fir::getTypeSizeAndAlignmentOrCrash(loc, ty, getDataLayout(), kindMap);
+
+ // return in registers if size <= 16 bytes
+ if (size <= 16) {
+ auto dwordSize = (size + 7) / 8;
----------------
kiranchandramohan wrote:
Nit:Spell the type.
https://github.com/llvm/llvm-project/pull/114051
More information about the flang-commits
mailing list