https://github.com/aschwaighofer updated https://github.com/llvm/llvm-project/pull/69953
>From 3dcc80df1acfe192e70f531995dff7518589d1ec Mon Sep 17 00:00:00 2001 From: Arnold Schwaighofer <aschwaigho...@apple.com> Date: Wed, 18 Oct 2023 11:44:16 -0700 Subject: [PATCH] SwiftCallingConv: Fix the splitVectorEntry function When splitting an entry into multiple entries, the indices of the split entries are a combination of the original split entry's and the number of elements we split that entry to. --- clang/lib/CodeGen/SwiftCallingConv.cpp | 7 ++++--- clang/test/CodeGen/64bit-swiftcall.c | 21 +++++++++++++++++++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/clang/lib/CodeGen/SwiftCallingConv.cpp b/clang/lib/CodeGen/SwiftCallingConv.cpp index 055dd3704386673..16fbf52a517db48 100644 --- a/clang/lib/CodeGen/SwiftCallingConv.cpp +++ b/clang/lib/CodeGen/SwiftCallingConv.cpp @@ -409,9 +409,10 @@ void SwiftAggLowering::splitVectorEntry(unsigned index) { CharUnits begin = Entries[index].Begin; for (unsigned i = 0; i != numElts; ++i) { - Entries[index].Type = eltTy; - Entries[index].Begin = begin; - Entries[index].End = begin + eltSize; + unsigned idx = index + i; + Entries[idx].Type = eltTy; + Entries[idx].Begin = begin; + Entries[idx].End = begin + eltSize; begin += eltSize; } } diff --git a/clang/test/CodeGen/64bit-swiftcall.c b/clang/test/CodeGen/64bit-swiftcall.c index 5290de2471e8e55..da6f18248c2af29 100644 --- a/clang/test/CodeGen/64bit-swiftcall.c +++ b/clang/test/CodeGen/64bit-swiftcall.c @@ -985,8 +985,8 @@ struct { } s; } union_het_vecint; TEST(union_het_vecint) -// CHECK: define{{.*}} swiftcc void @return_union_het_vecint(ptr noalias sret([[UNION:.+]]) -// CHECK: define{{.*}} swiftcc void @take_union_het_vecint(ptr +// CHECK: define{{.*}} swiftcc { i64, i64, i64, i64 } @return_union_het_vecint() +// CHECK: define{{.*}} swiftcc void @take_union_het_vecint(i64 %0, i64 %1, i64 %2, i64 %3) typedef struct { float3 f3; @@ -1044,3 +1044,20 @@ typedef struct { // CHECK-LABEL: use_atomic_padded(i64 %0, i64 %1) SWIFTCALL void use_atomic_padded(atomic_padded a) {} + + +typedef union { + float4 v; + float3 v2; + struct { + float a; + float b; + float c; + float d; + }; +} vector_union; + +TEST(vector_union) + +// CHECK-LABEL: define swiftcc { float, float, float, float } @return_vector_union() +// CHECK-LABEL: define swiftcc void @take_vector_union(float %0, float %1, float %2, float %3) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits