[clang] [Headers][X86] Allow AVX1 fixed extraction intrinsics to be used in constexpr (PR #161218)
Chaitanya Koparkar via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 29 08:45:19 PDT 2025
https://github.com/ckoparkar updated https://github.com/llvm/llvm-project/pull/161218
>From 416a4a97682581a2cb7fae9430606c8c853994d5 Mon Sep 17 00:00:00 2001
From: Chaitanya Koparkar <ckoparkar at gmail.com>
Date: Mon, 29 Sep 2025 11:28:58 -0400
Subject: [PATCH 1/3] [Headers][X86] Allow AVX1 fixed extraction intrinsics to
be used in constexpr
---
clang/lib/Headers/avxintrin.h | 6 +++---
clang/test/CodeGen/X86/avx-builtins.c | 3 +++
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/clang/lib/Headers/avxintrin.h b/clang/lib/Headers/avxintrin.h
index a7f70994be9db..65588f333e307 100644
--- a/clang/lib/Headers/avxintrin.h
+++ b/clang/lib/Headers/avxintrin.h
@@ -2311,7 +2311,7 @@ _mm256_cvttps_epi32(__m256 __a)
/// \param __a
/// A 256-bit vector of [4 x double].
/// \returns A 64 bit double containing the first element of the input vector.
-static __inline double __DEFAULT_FN_ATTRS
+static __inline double __DEFAULT_FN_ATTRS_CONSTEXPR
_mm256_cvtsd_f64(__m256d __a)
{
return __a[0];
@@ -2327,7 +2327,7 @@ _mm256_cvtsd_f64(__m256d __a)
/// \param __a
/// A 256-bit vector of [8 x i32].
/// \returns A 32 bit integer containing the first element of the input vector.
-static __inline int __DEFAULT_FN_ATTRS
+static __inline int __DEFAULT_FN_ATTRS_CONSTEXPR
_mm256_cvtsi256_si32(__m256i __a)
{
__v8si __b = (__v8si)__a;
@@ -2344,7 +2344,7 @@ _mm256_cvtsi256_si32(__m256i __a)
/// \param __a
/// A 256-bit vector of [8 x float].
/// \returns A 32 bit float containing the first element of the input vector.
-static __inline float __DEFAULT_FN_ATTRS
+static __inline float __DEFAULT_FN_ATTRS_CONSTEXPR
_mm256_cvtss_f32(__m256 __a)
{
return __a[0];
diff --git a/clang/test/CodeGen/X86/avx-builtins.c b/clang/test/CodeGen/X86/avx-builtins.c
index 347cd9ee6a667..3018bb9719b89 100644
--- a/clang/test/CodeGen/X86/avx-builtins.c
+++ b/clang/test/CodeGen/X86/avx-builtins.c
@@ -985,18 +985,21 @@ double test_mm256_cvtsd_f64(__m256d __a) {
// CHECK: extractelement <4 x double> %{{.*}}, i32 0
return _mm256_cvtsd_f64(__a);
}
+TEST_CONSTEXPR(_mm256_cvtsd_f64((__m256d){8.0, 7.0, 6.0, 5.0}) == 8.0);
int test_mm256_cvtsi256_si32(__m256i __a) {
// CHECK-LABEL: test_mm256_cvtsi256_si32
// CHECK: extractelement <8 x i32> %{{.*}}, i32 0
return _mm256_cvtsi256_si32(__a);
}
+TEST_CONSTEXPR(_mm256_cvtsi256_si32((__m256i)(__v8si){8, 7, 6, 5, 4, 3, 2, 1}) == 8);
float test_mm256_cvtss_f32(__m256 __a) {
// CHECK-LABEL: test_mm256_cvtss_f32
// CHECK: extractelement <8 x float> %{{.*}}, i32 0
return _mm256_cvtss_f32(__a);
}
+TEST_CONSTEXPR(_mm256_cvtss_f32((__m256){8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f}) == 8.0f);
__m128i test_mm256_cvttpd_epi32(__m256d A) {
// CHECK-LABEL: test_mm256_cvttpd_epi32
>From 38c83e7e553b7aa2ae5e7bbd416410ced00d620e Mon Sep 17 00:00:00 2001
From: Chaitanya Koparkar <ckoparkar at gmail.com>
Date: Mon, 29 Sep 2025 11:40:34 -0400
Subject: [PATCH 2/3] Fix formatting
---
clang/lib/Headers/avxintrin.h | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/clang/lib/Headers/avxintrin.h b/clang/lib/Headers/avxintrin.h
index 65588f333e307..bba97a8b6eaba 100644
--- a/clang/lib/Headers/avxintrin.h
+++ b/clang/lib/Headers/avxintrin.h
@@ -2312,8 +2312,7 @@ _mm256_cvttps_epi32(__m256 __a)
/// A 256-bit vector of [4 x double].
/// \returns A 64 bit double containing the first element of the input vector.
static __inline double __DEFAULT_FN_ATTRS_CONSTEXPR
-_mm256_cvtsd_f64(__m256d __a)
-{
+_mm256_cvtsd_f64(__m256d __a) {
return __a[0];
}
@@ -2328,8 +2327,7 @@ _mm256_cvtsd_f64(__m256d __a)
/// A 256-bit vector of [8 x i32].
/// \returns A 32 bit integer containing the first element of the input vector.
static __inline int __DEFAULT_FN_ATTRS_CONSTEXPR
-_mm256_cvtsi256_si32(__m256i __a)
-{
+_mm256_cvtsi256_si32(__m256i __a) {
__v8si __b = (__v8si)__a;
return __b[0];
}
@@ -2345,8 +2343,7 @@ _mm256_cvtsi256_si32(__m256i __a)
/// A 256-bit vector of [8 x float].
/// \returns A 32 bit float containing the first element of the input vector.
static __inline float __DEFAULT_FN_ATTRS_CONSTEXPR
-_mm256_cvtss_f32(__m256 __a)
-{
+_mm256_cvtss_f32(__m256 __a) {
return __a[0];
}
>From bcdec54887a76d7d78fd02fdfe102c4bc00e8843 Mon Sep 17 00:00:00 2001
From: Chaitanya Koparkar <ckoparkar at gmail.com>
Date: Mon, 29 Sep 2025 11:44:52 -0400
Subject: [PATCH 3/3] Fix formatting, again
---
clang/lib/Headers/avxintrin.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/clang/lib/Headers/avxintrin.h b/clang/lib/Headers/avxintrin.h
index bba97a8b6eaba..d6ba19a6c78af 100644
--- a/clang/lib/Headers/avxintrin.h
+++ b/clang/lib/Headers/avxintrin.h
@@ -2313,7 +2313,7 @@ _mm256_cvttps_epi32(__m256 __a)
/// \returns A 64 bit double containing the first element of the input vector.
static __inline double __DEFAULT_FN_ATTRS_CONSTEXPR
_mm256_cvtsd_f64(__m256d __a) {
- return __a[0];
+ return __a[0];
}
/// Returns the first element of the input vector of [8 x i32].
@@ -2328,8 +2328,8 @@ _mm256_cvtsd_f64(__m256d __a) {
/// \returns A 32 bit integer containing the first element of the input vector.
static __inline int __DEFAULT_FN_ATTRS_CONSTEXPR
_mm256_cvtsi256_si32(__m256i __a) {
- __v8si __b = (__v8si)__a;
- return __b[0];
+ __v8si __b = (__v8si)__a;
+ return __b[0];
}
/// Returns the first element of the input vector of [8 x float].
@@ -2344,7 +2344,7 @@ _mm256_cvtsi256_si32(__m256i __a) {
/// \returns A 32 bit float containing the first element of the input vector.
static __inline float __DEFAULT_FN_ATTRS_CONSTEXPR
_mm256_cvtss_f32(__m256 __a) {
- return __a[0];
+ return __a[0];
}
/* Vector replicate */
More information about the cfe-commits
mailing list