Skip to content

Commit 7b5adbd

Browse files
author
git apple-llvm automerger
committed
Merge commit '449f84fea652' from llvm.org/main into next
2 parents e4bb69a + 449f84f commit 7b5adbd

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

flang/lib/Optimizer/CodeGen/Target.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,13 @@ struct TargetAArch64 : public GenericTarget<TargetAArch64> {
930930
.Case<fir::VectorType>([&](auto) {
931931
TODO(loc, "passing vector argument to C by value is not supported");
932932
return NRegs{};
933+
})
934+
.Default([&](auto ty) {
935+
if (fir::conformsWithPassByRef(ty))
936+
return NRegs{1, false}; // Pointers take 1 integer register
937+
TODO(loc, "unsupported component type for BIND(C), VALUE derived "
938+
"type argument");
939+
return NRegs{};
933940
});
934941
}
935942

flang/test/Fir/struct-passing-aarch64-byval.fir

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,17 @@ func.func private @too_many_hfa(!fir.type<hfa_max{i:f128,j:f128,k:f128,l:f128}>,
7171

7272
// CHECK-LABEL: func.func private @too_big(!fir.ref<!fir.type<too_big{i:!fir.array<5xi32>}>> {{{.*}}, llvm.byval = !fir.type<too_big{i:!fir.array<5xi32>}>})
7373
func.func private @too_big(!fir.type<too_big{i:!fir.array<5xi32>}>)
74+
75+
// CHECK-LABEL: func.func private @pointer_type(!fir.ref<i64>, !fir.array<1xi64>)
76+
func.func private @pointer_type(!fir.ref<i64>, !fir.type<pointer_type{i:i64}>)
77+
78+
// CHECK-LABEL: func.func private @pointer_type_too_many_int(!fir.ref<i64>,
79+
// CHECK-SAME: !fir.array<2xi64>,
80+
// CHECK-SAME: !fir.array<2xi64>,
81+
// CHECK-SAME: !fir.array<2xi64>,
82+
// CHECK-SAME: !fir.ref<!fir.type<int_max{i:i64,j:i64}>> {{{.*}}, llvm.byval = !fir.type<int_max{i:i64,j:i64}>})
83+
func.func private @pointer_type_too_many_int(!fir.ref<i64>,
84+
!fir.type<int_max{i:i64,j:i64}>,
85+
!fir.type<int_max{i:i64,j:i64}>,
86+
!fir.type<int_max{i:i64,j:i64}>,
87+
!fir.type<int_max{i:i64,j:i64}>)

0 commit comments

Comments
 (0)