Author: Phoebe Wang Date: 2024-05-13T08:31:49+08:00 New Revision: 5bde8017a1109128d011510dcf4ba79140a224fe
URL: https://github.com/llvm/llvm-project/commit/5bde8017a1109128d011510dcf4ba79140a224fe DIFF: https://github.com/llvm/llvm-project/commit/5bde8017a1109128d011510dcf4ba79140a224fe.diff LOG: [X86][vectorcall] Pass built types byval when xmm0~6 exhausted (#91846) This is how MSVC handles it. https://godbolt.org/z/fG386bjnf Added: Modified: clang/lib/CodeGen/Targets/X86.cpp clang/test/CodeGen/vectorcall.c Removed: ################################################################################ diff --git a/clang/lib/CodeGen/Targets/X86.cpp b/clang/lib/CodeGen/Targets/X86.cpp index 717a27fc9c574..29d98aad8fcb4 100644 --- a/clang/lib/CodeGen/Targets/X86.cpp +++ b/clang/lib/CodeGen/Targets/X86.cpp @@ -792,6 +792,8 @@ ABIArgInfo X86_32ABIInfo::classifyArgumentType(QualType Ty, CCState &State, return ABIArgInfo::getDirect(); return ABIArgInfo::getExpand(); } + if (IsVectorCall && Ty->isBuiltinType()) + return ABIArgInfo::getDirect(); return getIndirectResult(Ty, /*ByVal=*/false, State); } diff --git a/clang/test/CodeGen/vectorcall.c b/clang/test/CodeGen/vectorcall.c index cb53ecc70351d..71dc3b0b9585a 100644 --- a/clang/test/CodeGen/vectorcall.c +++ b/clang/test/CodeGen/vectorcall.c @@ -140,4 +140,20 @@ void __vectorcall vectorcall_indirect_vec( // X86-SAME: ptr inreg noundef %0, // X86-SAME: i32 inreg noundef %edx, // X86-SAME: ptr noundef %1) + +void __vectorcall vectorcall_indirect_fp( + double xmm0, double xmm1, double xmm2, double xmm3, double xmm4, + v4f32 xmm5, v4f32 ecx, int edx, double mem) { +} + +// X86: define dso_local x86_vectorcallcc void @"\01vectorcall_indirect_fp@@{{[0-9]+}}" +// X86-SAME: (double inreg noundef %xmm0, +// X86-SAME: double inreg noundef %xmm1, +// X86-SAME: double inreg noundef %xmm2, +// X86-SAME: double inreg noundef %xmm3, +// X86-SAME: double inreg noundef %xmm4, +// X86-SAME: <4 x float> inreg noundef %xmm5, +// X86-SAME: ptr inreg noundef %0, +// X86-SAME: i32 inreg noundef %edx, +// X86-SAME: double noundef %mem) #endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits