https://github.com/jmgorius created https://github.com/llvm/llvm-project/pull/189254
The CVTPD2DQ instruction converts packed 64-bit floating-point values to packed 32-bit signed integer values. This patch fixes the return type of the corresponding builtin, which previously returned a vector of two 64-bit signed integers. The new behavior is in line with the return type of the CVTTPD2DQ builtin. >From 93b24fb6aa3311840e840b92642aabcbb54c07b7 Mon Sep 17 00:00:00 2001 From: Jean-Michel Gorius <[email protected]> Date: Sun, 29 Mar 2026 17:52:17 +0200 Subject: [PATCH] [clang][x86] Fix the return type of the cvtpd2dq builtin --- clang/include/clang/Basic/BuiltinsX86.td | 2 +- clang/lib/Headers/emmintrin.h | 2 +- clang/test/CodeGen/builtins-x86.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/clang/include/clang/Basic/BuiltinsX86.td b/clang/include/clang/Basic/BuiltinsX86.td index f47532a63de04..0cab8c77d465d 100644 --- a/clang/include/clang/Basic/BuiltinsX86.td +++ b/clang/include/clang/Basic/BuiltinsX86.td @@ -180,7 +180,7 @@ let Features = "avx512f", Attributes = [NoThrow, Const, Constexpr, RequiredVecto let Features = "sse2", Attributes = [NoThrow, Const, RequiredVectorWidth<128>] in { def psadbw128 : X86Builtin<"_Vector<2, long long int>(_Vector<16, char>, _Vector<16, char>)">; - def cvtpd2dq : X86Builtin<"_Vector<2, long long int>(_Vector<2, double>)">; + def cvtpd2dq : X86Builtin<"_Vector<4, int>(_Vector<2, double>)">; def cvttpd2dq : X86Builtin<"_Vector<4, int>(_Vector<2, double>)">; def cvtsd2si : X86Builtin<"int(_Vector<2, double>)">; def cvttsd2si : X86Builtin<"int(_Vector<2, double>)">; diff --git a/clang/lib/Headers/emmintrin.h b/clang/lib/Headers/emmintrin.h index bbf366133c68a..43c93263f015a 100644 --- a/clang/lib/Headers/emmintrin.h +++ b/clang/lib/Headers/emmintrin.h @@ -1343,7 +1343,7 @@ _mm_cvtepi32_pd(__m128i __a) { /// \returns A 128-bit vector of [4 x i32] whose lower 64 bits contain the /// converted values. The upper 64 bits are set to zero. static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtpd_epi32(__m128d __a) { - return __builtin_ia32_cvtpd2dq((__v2df)__a); + return (__m128i)__builtin_ia32_cvtpd2dq((__v2df)__a); } /// Converts the low-order element of a 128-bit vector of [2 x double] diff --git a/clang/test/CodeGen/builtins-x86.c b/clang/test/CodeGen/builtins-x86.c index a1e63d59e88e1..0f66d8c4e3120 100644 --- a/clang/test/CodeGen/builtins-x86.c +++ b/clang/test/CodeGen/builtins-x86.c @@ -290,7 +290,7 @@ void f0(void) { (void) __builtin_ia32_movnti64(tmp_LLip, tmp_LLi); #endif tmp_V2LLi = __builtin_ia32_psadbw128(tmp_V16c, tmp_V16c); - tmp_V2LLi = __builtin_ia32_cvtpd2dq(tmp_V2d); + tmp_V4i = __builtin_ia32_cvtpd2dq(tmp_V2d); tmp_V4f = __builtin_ia32_cvtpd2ps(tmp_V2d); tmp_V4i = __builtin_ia32_cvttpd2dq(tmp_V2d); tmp_i = __builtin_ia32_cvtsd2si(tmp_V2d); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
