https://github.com/phoebewang created 
https://github.com/llvm/llvm-project/pull/211185

Fixes part of #210947

Assisted-by: Claude Opus 4.8

>From af8732ee64b20a4efab22202dcd88d58df48335e Mon Sep 17 00:00:00 2001
From: Phoebe Wang <[email protected]>
Date: Wed, 22 Jul 2026 00:14:43 -0700
Subject: [PATCH] [X86][AVX10.2] Add missing _mm_cvtts_ss/sd* intrinsics

Fixes part of #210947

Assisted-by: Claude Opus 4.8
---
 clang/lib/Headers/avx10_2satcvtdsintrin.h     | 67 +++++++++++++++++++
 .../X86/avx10_2satcvtds-builtins-x64.c        | 36 ++++++++++
 .../CodeGen/X86/avx10_2satcvtds-builtins.c    | 36 ++++++++++
 3 files changed, 139 insertions(+)

diff --git a/clang/lib/Headers/avx10_2satcvtdsintrin.h 
b/clang/lib/Headers/avx10_2satcvtdsintrin.h
index 57d299606a173..d4ece3c3c0842 100644
--- a/clang/lib/Headers/avx10_2satcvtdsintrin.h
+++ b/clang/lib/Headers/avx10_2satcvtdsintrin.h
@@ -44,6 +44,38 @@
   ((unsigned int)__builtin_ia32_vcvttss2usis32((__v4sf)(__m128)(__A),          
\
                                                (const int)(__R)))
 
+static __inline__ int __DEFAULT_FN_ATTRS128 _mm_cvtts_sd_i32(__m128d __A) {
+  return (int)__builtin_ia32_vcvttsd2sis32((__v2df)__A,
+                                           _MM_FROUND_CUR_DIRECTION);
+}
+
+static __inline__ int __DEFAULT_FN_ATTRS128 _mm_cvtts_sd_si32(__m128d __A) {
+  return (int)__builtin_ia32_vcvttsd2sis32((__v2df)__A,
+                                           _MM_FROUND_CUR_DIRECTION);
+}
+
+static __inline__ unsigned int __DEFAULT_FN_ATTRS128
+_mm_cvtts_sd_u32(__m128d __A) {
+  return (unsigned int)__builtin_ia32_vcvttsd2usis32((__v2df)__A,
+                                                     _MM_FROUND_CUR_DIRECTION);
+}
+
+static __inline__ int __DEFAULT_FN_ATTRS128 _mm_cvtts_ss_i32(__m128 __A) {
+  return (int)__builtin_ia32_vcvttss2sis32((__v4sf)__A,
+                                           _MM_FROUND_CUR_DIRECTION);
+}
+
+static __inline__ int __DEFAULT_FN_ATTRS128 _mm_cvtts_ss_si32(__m128 __A) {
+  return (int)__builtin_ia32_vcvttss2sis32((__v4sf)__A,
+                                           _MM_FROUND_CUR_DIRECTION);
+}
+
+static __inline__ unsigned int __DEFAULT_FN_ATTRS128
+_mm_cvtts_ss_u32(__m128 __A) {
+  return (unsigned int)__builtin_ia32_vcvttss2usis32((__v4sf)__A,
+                                                     _MM_FROUND_CUR_DIRECTION);
+}
+
 #ifdef __x86_64__
 #define _mm_cvtts_roundss_u64(__A, __R)                                        
\
   ((unsigned long long)__builtin_ia32_vcvttss2usis64((__v4sf)(__m128)(__A),    
\
@@ -68,6 +100,41 @@
 #define _mm_cvtts_roundsd_i64(__A, __R)                                        
\
   ((long long)__builtin_ia32_vcvttsd2sis64((__v2df)(__m128d)(__A),             
\
                                            (const int)(__R)))
+
+static __inline__ unsigned long long
+    __DEFAULT_FN_ATTRS128 _mm_cvtts_ss_u64(__m128 __A) {
+  return (unsigned long long)__builtin_ia32_vcvttss2usis64(
+      (__v4sf)__A, _MM_FROUND_CUR_DIRECTION);
+}
+
+static __inline__ unsigned long long __DEFAULT_FN_ATTRS128
+_mm_cvtts_sd_u64(__m128d __A) {
+  return (unsigned long long)__builtin_ia32_vcvttsd2usis64(
+      (__v2df)__A, _MM_FROUND_CUR_DIRECTION);
+}
+
+static __inline__ long long __DEFAULT_FN_ATTRS128 _mm_cvtts_ss_i64(__m128 __A) 
{
+  return (long long)__builtin_ia32_vcvttss2sis64((__v4sf)__A,
+                                                 _MM_FROUND_CUR_DIRECTION);
+}
+
+static __inline__ long long __DEFAULT_FN_ATTRS128
+_mm_cvtts_ss_si64(__m128 __A) {
+  return (long long)__builtin_ia32_vcvttss2sis64((__v4sf)__A,
+                                                 _MM_FROUND_CUR_DIRECTION);
+}
+
+static __inline__ long long __DEFAULT_FN_ATTRS128
+_mm_cvtts_sd_si64(__m128d __A) {
+  return (long long)__builtin_ia32_vcvttsd2sis64((__v2df)__A,
+                                                 _MM_FROUND_CUR_DIRECTION);
+}
+
+static __inline__ long long __DEFAULT_FN_ATTRS128
+_mm_cvtts_sd_i64(__m128d __A) {
+  return (long long)__builtin_ia32_vcvttsd2sis64((__v2df)__A,
+                                                 _MM_FROUND_CUR_DIRECTION);
+}
 #endif /* __x86_64__ */
 
 // 128 Bit : Double -> int
diff --git a/clang/test/CodeGen/X86/avx10_2satcvtds-builtins-x64.c 
b/clang/test/CodeGen/X86/avx10_2satcvtds-builtins-x64.c
index bcfe43b1f34a6..c4f2f4ab0b55d 100644
--- a/clang/test/CodeGen/X86/avx10_2satcvtds-builtins-x64.c
+++ b/clang/test/CodeGen/X86/avx10_2satcvtds-builtins-x64.c
@@ -41,6 +41,42 @@ unsigned test_mm_cvtts_ss_u32(__m128 __A) {
   return _mm_cvtts_roundss_u32(__A, _MM_FROUND_NO_EXC);
 }
 
+unsigned long long test_mm_cvtts_ss_u64(__m128 __A) {
+  // CHECK-LABEL: @test_mm_cvtts_ss_u64(
+  // CHECK: @llvm.x86.avx10.vcvttss2usis64(<4 x float>
+  return _mm_cvtts_ss_u64(__A);
+}
+
+unsigned long long test_mm_cvtts_sd_u64(__m128d __A) {
+  // CHECK-LABEL: @test_mm_cvtts_sd_u64(
+  // CHECK: @llvm.x86.avx10.vcvttsd2usis64(<2 x double>
+  return _mm_cvtts_sd_u64(__A);
+}
+
+long long test_mm_cvtts_ss_i64(__m128 __A) {
+  // CHECK-LABEL: @test_mm_cvtts_ss_i64(
+  // CHECK: @llvm.x86.avx10.vcvttss2sis64(<4 x float>
+  return _mm_cvtts_ss_i64(__A);
+}
+
+long long test_mm_cvtts_ss_si64(__m128 __A) {
+  // CHECK-LABEL: @test_mm_cvtts_ss_si64(
+  // CHECK: @llvm.x86.avx10.vcvttss2sis64(<4 x float>
+  return _mm_cvtts_ss_si64(__A);
+}
+
+long long test_mm_cvtts_sd_si64(__m128d __A) {
+  // CHECK-LABEL: @test_mm_cvtts_sd_si64(
+  // CHECK: @llvm.x86.avx10.vcvttsd2sis64(<2 x double>
+  return _mm_cvtts_sd_si64(__A);
+}
+
+long long test_mm_cvtts_sd_i64(__m128d __A) {
+  // CHECK-LABEL: @test_mm_cvtts_sd_i64(
+  // CHECK: @llvm.x86.avx10.vcvttsd2sis64(<2 x double>
+  return _mm_cvtts_sd_i64(__A);
+}
+
 // vector
 // 128 bit
 __m128i test_mm_cvtts_pd_epi64(__m128d A){
diff --git a/clang/test/CodeGen/X86/avx10_2satcvtds-builtins.c 
b/clang/test/CodeGen/X86/avx10_2satcvtds-builtins.c
index a0e5cfdcd5ec6..1455dcb550e01 100644
--- a/clang/test/CodeGen/X86/avx10_2satcvtds-builtins.c
+++ b/clang/test/CodeGen/X86/avx10_2satcvtds-builtins.c
@@ -4,6 +4,42 @@
 #include <immintrin.h>
 #include <stddef.h>
 
+int test_mm_cvtts_sd_i32(__m128d __A) {
+  // CHECK-LABEL: @test_mm_cvtts_sd_i32(
+  // CHECK: @llvm.x86.avx10.vcvttsd2sis(<2 x double>
+  return _mm_cvtts_sd_i32(__A);
+}
+
+int test_mm_cvtts_sd_si32(__m128d __A) {
+  // CHECK-LABEL: @test_mm_cvtts_sd_si32(
+  // CHECK: @llvm.x86.avx10.vcvttsd2sis(<2 x double>
+  return _mm_cvtts_sd_si32(__A);
+}
+
+unsigned int test_mm_cvtts_sd_u32(__m128d __A) {
+  // CHECK-LABEL: @test_mm_cvtts_sd_u32(
+  // CHECK: @llvm.x86.avx10.vcvttsd2usis(<2 x double>
+  return _mm_cvtts_sd_u32(__A);
+}
+
+int test_mm_cvtts_ss_i32(__m128 __A) {
+  // CHECK-LABEL: @test_mm_cvtts_ss_i32(
+  // CHECK: @llvm.x86.avx10.vcvttss2sis(<4 x float>
+  return _mm_cvtts_ss_i32(__A);
+}
+
+int test_mm_cvtts_ss_si32(__m128 __A) {
+  // CHECK-LABEL: @test_mm_cvtts_ss_si32(
+  // CHECK: @llvm.x86.avx10.vcvttss2sis(<4 x float>
+  return _mm_cvtts_ss_si32(__A);
+}
+
+unsigned int test_mm_cvtts_ss_u32(__m128 __A) {
+  // CHECK-LABEL: @test_mm_cvtts_ss_u32(
+  // CHECK: @llvm.x86.avx10.vcvttss2usis(<4 x float>
+  return _mm_cvtts_ss_u32(__A);
+}
+
 __m128i test_mm_cvtts_pd_epi32(__m128d A){
 // CHECK-LABEL: @test_mm_cvtts_pd_epi32
 // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.128(<2 x double>

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

Reply via email to