https://github.com/xgupta updated 
https://github.com/llvm/llvm-project/pull/219863

>From 3ef3f33317ddcd7182c33f9fe072787dd827105b Mon Sep 17 00:00:00 2001
From: Shivam Gupta <[email protected]>
Date: Mon, 31 Aug 2026 00:40:41 +0530
Subject: [PATCH 1/2] [clang][x86] Fix _mm_frcz_{ss,sd} to take two arguments

The _mm_frcz_ss and _mm_frcz_sd intrinsics incorrectly take a single
argument in Clang, while GCC and MSVC define them with two arguments.

Preserve the upper elements of the first argument and replace the low
element with the result of applying FRCZ to the low element of the
second argument.

Fixes #48017
---
 clang/lib/Headers/xopintrin.h         | 10 ++++++----
 clang/test/CodeGen/X86/xop-builtins.c | 12 ++++++++----
 2 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/clang/lib/Headers/xopintrin.h b/clang/lib/Headers/xopintrin.h
index aba632f941152..860412f6a3941 100644
--- a/clang/lib/Headers/xopintrin.h
+++ b/clang/lib/Headers/xopintrin.h
@@ -737,15 +737,17 @@ _mm_comtrue_epi64(__m128i __A, __m128i __B)
                                         (__v8si)(__m256i)(C), (I)))
 
 static __inline__ __m128 __DEFAULT_FN_ATTRS
-_mm_frcz_ss(__m128 __A)
+_mm_frcz_ss(__m128 __A, __m128 __B)
 {
-  return (__m128)__builtin_ia32_vfrczss((__v4sf)__A);
+  __A[0] = ((__v4sf)__builtin_ia32_vfrczss((__v4sf)__B))[0];
+  return __A;
 }
 
 static __inline__ __m128d __DEFAULT_FN_ATTRS
-_mm_frcz_sd(__m128d __A)
+_mm_frcz_sd(__m128d __A, __m128d __B)
 {
-  return (__m128d)__builtin_ia32_vfrczsd((__v2df)__A);
+  __A[0] = ((__v2df)__builtin_ia32_vfrczsd((__v2df)__B))[0];
+  return __A;
 }
 
 static __inline__ __m128 __DEFAULT_FN_ATTRS
diff --git a/clang/test/CodeGen/X86/xop-builtins.c 
b/clang/test/CodeGen/X86/xop-builtins.c
index a3cff2c89da1f..6e2adb4927d05 100644
--- a/clang/test/CodeGen/X86/xop-builtins.c
+++ b/clang/test/CodeGen/X86/xop-builtins.c
@@ -394,16 +394,20 @@ __m256 test_mm256_permute2_ps(__m256 a, __m256 b, __m256i 
c) {
   return _mm256_permute2_ps(a, b, c, 0);
 }
 
-__m128 test_mm_frcz_ss(__m128 a) {
+__m128 test_mm_frcz_ss(__m128 a, __m128 b) {
   // CHECK-LABEL: test_mm_frcz_ss
   // CHECK: call {{.*}}<4 x float> @llvm.x86.xop.vfrcz.ss(<4 x float> %{{.*}})
-  return _mm_frcz_ss(a);
+  // CHECK: extractelement <4 x float> {{.*}}, i32 0
+  // CHECK: insertelement <4 x float> {{.*}}, float {{.*}}, i32 0
+  return _mm_frcz_ss(a, b);
 }
 
-__m128d test_mm_frcz_sd(__m128d a) {
+__m128d test_mm_frcz_sd(__m128d a, __m128d b) {
   // CHECK-LABEL: test_mm_frcz_sd
   // CHECK: call {{.*}}<2 x double> @llvm.x86.xop.vfrcz.sd(<2 x double> 
%{{.*}})
-  return _mm_frcz_sd(a);
+  // CHECK: extractelement <2 x double> {{.*}}, i32 0
+  // CHECK: insertelement <2 x double> {{.*}}, double {{.*}}, i32 0
+  return _mm_frcz_sd(a, b);
 }
 
 __m128 test_mm_frcz_ps(__m128 a) {

>From 0a89ec0fc75e68dc437f0d91e6cda8c104a906ee Mon Sep 17 00:00:00 2001
From: Shivam Gupta <[email protected]>
Date: Mon, 31 Aug 2026 07:47:02 +0530
Subject: [PATCH 2/2] clang-format

---
 clang/lib/Headers/xopintrin.h | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/clang/lib/Headers/xopintrin.h b/clang/lib/Headers/xopintrin.h
index 860412f6a3941..e87acbc03a87b 100644
--- a/clang/lib/Headers/xopintrin.h
+++ b/clang/lib/Headers/xopintrin.h
@@ -736,16 +736,14 @@ _mm_comtrue_epi64(__m128i __A, __m128i __B)
                                         (__v8sf)(__m256)(Y), \
                                         (__v8si)(__m256i)(C), (I)))
 
-static __inline__ __m128 __DEFAULT_FN_ATTRS
-_mm_frcz_ss(__m128 __A, __m128 __B)
-{
+static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_frcz_ss(__m128 __A,
+                                                        __m128 __B) {
   __A[0] = ((__v4sf)__builtin_ia32_vfrczss((__v4sf)__B))[0];
   return __A;
 }
 
-static __inline__ __m128d __DEFAULT_FN_ATTRS
-_mm_frcz_sd(__m128d __A, __m128d __B)
-{
+static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_frcz_sd(__m128d __A,
+                                                         __m128d __B) {
   __A[0] = ((__v2df)__builtin_ia32_vfrczsd((__v2df)__B))[0];
   return __A;
 }

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to