[clang] 5bde801 - [X86][vectorcall] Pass built types byval when xmm0~6 exhausted (#91846)
via cfe-commits
cfe-commits at lists.llvm.org
Sun May 12 17:31:53 PDT 2024
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
More information about the cfe-commits
mailing list