https://github.com/RKSimon updated https://github.com/llvm/llvm-project/pull/180013
>From 3a3881f3e963811d3aef2fa23d6114796c71cf9b Mon Sep 17 00:00:00 2001 From: NagaChaitanya Vellanki <[email protected]> Date: Thu, 5 Feb 2026 10:55:57 -0800 Subject: [PATCH] [NFC][clang][X86] Add tests for NaN,Denormal,Inf and rounding modes Follow up: #171966 --- .../SemaCXX/constexpr-x86-avx-builtins.cpp | 92 +++++++++++++ .../constexpr-x86-avx512f-builtins.cpp | 128 ++++++++++++++++++ .../SemaCXX/constexpr-x86-sse2-builtins.cpp | 116 ++++++++++++++++ 3 files changed, 336 insertions(+) diff --git a/clang/test/SemaCXX/constexpr-x86-avx-builtins.cpp b/clang/test/SemaCXX/constexpr-x86-avx-builtins.cpp index 724aff3011ded..1eedf6072ecdb 100644 --- a/clang/test/SemaCXX/constexpr-x86-avx-builtins.cpp +++ b/clang/test/SemaCXX/constexpr-x86-avx-builtins.cpp @@ -16,3 +16,95 @@ constexpr __m128 r = _mm256_cvtpd_ps(a); // expected-note@-3 {{in call to '_mm256_cvtpd_ps({1.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00})'}} } } + +namespace Test_mm256_min_ps { +namespace OK { +constexpr __m256 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f }; +constexpr __m256 b = { 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +TEST_CONSTEXPR(match_m256(_mm256_min_ps(a, b), 1.0f, 2.0f, 3.0f, 4.0f, 4.0f, 3.0f, 2.0f, 1.0f)); +} +namespace NaN_A { +constexpr __m256 a = { __builtin_nanf(""), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f }; +constexpr __m256 b = { 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m256 r = _mm256_min_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Inf_B { +constexpr __m256 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f }; +constexpr __m256 b = { 8.0f, -__builtin_huge_valf(), 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m256 r = _mm256_min_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Denormal_A { +constexpr __m256 a = { 1e-40f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f }; +constexpr __m256 b = { 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m256 r = _mm256_min_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +} + +namespace Test_mm256_max_ps { +namespace OK { +constexpr __m256 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f }; +constexpr __m256 b = { 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +TEST_CONSTEXPR(match_m256(_mm256_max_ps(a, b), 8.0f, 7.0f, 6.0f, 5.0f, 5.0f, 6.0f, 7.0f, 8.0f)); +} +namespace NaN_B { +constexpr __m256 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f }; +constexpr __m256 b = { 8.0f, 7.0f, __builtin_nanf(""), 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m256 r = _mm256_max_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Inf_A { +constexpr __m256 a = { __builtin_huge_valf(), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f }; +constexpr __m256 b = { 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m256 r = _mm256_max_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +} + +namespace Test_mm256_min_pd { +namespace OK { +constexpr __m256d a = { 1.0, 2.0, 3.0, 4.0 }; +constexpr __m256d b = { 4.0, 3.0, 2.0, 1.0 }; +TEST_CONSTEXPR(match_m256d(_mm256_min_pd(a, b), 1.0, 2.0, 2.0, 1.0)); +} +namespace NaN_A { +constexpr __m256d a = { __builtin_nan(""), 2.0, 3.0, 4.0 }; +constexpr __m256d b = { 4.0, 3.0, 2.0, 1.0 }; +constexpr __m256d r = _mm256_min_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Inf_B { +constexpr __m256d a = { 1.0, 2.0, 3.0, 4.0 }; +constexpr __m256d b = { 4.0, 3.0, -__builtin_huge_val(), 1.0 }; +constexpr __m256d r = _mm256_min_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Denormal_B { +constexpr __m256d a = { 1.0, 2.0, 3.0, 4.0 }; +constexpr __m256d b = { 4.0, 3.0, 2.0, -1e-310 }; +constexpr __m256d r = _mm256_min_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +} + +namespace Test_mm256_max_pd { +namespace OK { +constexpr __m256d a = { 1.0, 2.0, 3.0, 4.0 }; +constexpr __m256d b = { 4.0, 3.0, 2.0, 1.0 }; +TEST_CONSTEXPR(match_m256d(_mm256_max_pd(a, b), 4.0, 3.0, 3.0, 4.0)); +} +namespace NaN_B { +constexpr __m256d a = { 1.0, 2.0, 3.0, 4.0 }; +constexpr __m256d b = { 4.0, __builtin_nan(""), 2.0, 1.0 }; +constexpr __m256d r = _mm256_max_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Inf_A { +constexpr __m256d a = { 1.0, __builtin_huge_val(), 3.0, 4.0 }; +constexpr __m256d b = { 4.0, 3.0, 2.0, 1.0 }; +constexpr __m256d r = _mm256_max_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +} diff --git a/clang/test/SemaCXX/constexpr-x86-avx512f-builtins.cpp b/clang/test/SemaCXX/constexpr-x86-avx512f-builtins.cpp index 95d26bc44b9a3..b101f84596d9e 100644 --- a/clang/test/SemaCXX/constexpr-x86-avx512f-builtins.cpp +++ b/clang/test/SemaCXX/constexpr-x86-avx512f-builtins.cpp @@ -743,3 +743,131 @@ constexpr __m128d a = (__m128d)(__v2df){-__builtin_inf(), 20.0}; constexpr __m128d b = (__m128d)(__v2df){100.0, 200.0}; constexpr __m128d result = _mm_max_sd(a, b); // expected-error {{must be initialized by a constant expression}} } + +namespace Test_mm512_min_ps { +namespace OK { +constexpr __m512 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f }; +constexpr __m512 b = { 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +TEST_CONSTEXPR(match_m512(_mm512_min_ps(a, b), 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f)); +} +namespace NaN_A { +constexpr __m512 a = { __builtin_nanf(""), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f }; +constexpr __m512 b = { 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m512 r = _mm512_min_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Inf_B { +constexpr __m512 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f }; +constexpr __m512 b = { 16.0f, -__builtin_huge_valf(), 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m512 r = _mm512_min_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Denormal_A { +constexpr __m512 a = { 1e-40f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f }; +constexpr __m512 b = { 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m512 r = _mm512_min_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +} + +namespace Test_mm512_max_ps { +namespace OK { +constexpr __m512 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f }; +constexpr __m512 b = { 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +TEST_CONSTEXPR(match_m512(_mm512_max_ps(a, b), 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f)); +} +namespace NaN_B { +constexpr __m512 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f }; +constexpr __m512 b = { 16.0f, 15.0f, __builtin_nanf(""), 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m512 r = _mm512_max_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Inf_A { +constexpr __m512 a = { __builtin_huge_valf(), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f }; +constexpr __m512 b = { 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m512 r = _mm512_max_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +} + +namespace Test_mm512_max_round_ps { +namespace InvalidRounding { +constexpr __m512 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f }; +constexpr __m512 b = { 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m512 r = _mm512_max_round_ps(a, b, _MM_FROUND_TO_ZERO); +// expected-error@-1 {{invalid rounding argument}} +} +} + +namespace Test_mm512_min_pd { +namespace OK { +constexpr __m512d a = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 }; +constexpr __m512d b = { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 }; +TEST_CONSTEXPR(match_m512d(_mm512_min_pd(a, b), 1.0, 2.0, 3.0, 4.0, 4.0, 3.0, 2.0, 1.0)); +} +namespace NaN_A { +constexpr __m512d a = { __builtin_nan(""), 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 }; +constexpr __m512d b = { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 }; +constexpr __m512d r = _mm512_min_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Inf_B { +constexpr __m512d a = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 }; +constexpr __m512d b = { 8.0, 7.0, -__builtin_huge_val(), 5.0, 4.0, 3.0, 2.0, 1.0 }; +constexpr __m512d r = _mm512_min_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Denormal_B { +constexpr __m512d a = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 }; +constexpr __m512d b = { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, -1e-310 }; +constexpr __m512d r = _mm512_min_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +} + +namespace Test_mm512_min_round_pd { +namespace InvalidRounding { +constexpr __m512d a = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 }; +constexpr __m512d b = { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 }; +constexpr __m512d r = _mm512_min_round_pd(a, b, _MM_FROUND_TO_ZERO); +// expected-error@-1 {{invalid rounding argument}} +} +} + +namespace Test_mm512_min_round_ps { +namespace InvalidRounding { +constexpr __m512 a = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f }; +constexpr __m512 b = { 16.0f, 15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m512 r = _mm512_min_round_ps(a, b, _MM_FROUND_TO_NEG_INF); +// expected-error@-1 {{invalid rounding argument}} +} +} + +namespace Test_mm512_max_pd { +namespace OK { +constexpr __m512d a = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 }; +constexpr __m512d b = { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 }; +TEST_CONSTEXPR(match_m512d(_mm512_max_pd(a, b), 8.0, 7.0, 6.0, 5.0, 5.0, 6.0, 7.0, 8.0)); +} +namespace NaN_B { +constexpr __m512d a = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 }; +constexpr __m512d b = { 8.0, __builtin_nan(""), 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 }; +constexpr __m512d r = _mm512_max_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Inf_A { +constexpr __m512d a = { 1.0, __builtin_huge_val(), 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 }; +constexpr __m512d b = { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 }; +constexpr __m512d r = _mm512_max_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +} + +namespace Test_mm512_max_round_pd { +namespace InvalidRounding { +constexpr __m512d a = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 }; +constexpr __m512d b = { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 }; +constexpr __m512d r = _mm512_max_round_pd(a, b, _MM_FROUND_TO_POS_INF); +// expected-error@-1 {{invalid rounding argument}} +} +} diff --git a/clang/test/SemaCXX/constexpr-x86-sse2-builtins.cpp b/clang/test/SemaCXX/constexpr-x86-sse2-builtins.cpp index 319a3b02a94f9..251b46be7e7ff 100644 --- a/clang/test/SemaCXX/constexpr-x86-sse2-builtins.cpp +++ b/clang/test/SemaCXX/constexpr-x86-sse2-builtins.cpp @@ -77,3 +77,119 @@ constexpr __m128 r = _mm_cvtpd_ps(a); // expected-note@-3 {{in call to '_mm_cvtpd_ps({1.000000e-310, 0.000000e+00})'}} } } + +namespace Test_mm_min_ps { +namespace OK { +constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f }; +constexpr __m128 b = { 4.0f, 3.0f, 2.0f, 1.0f }; +TEST_CONSTEXPR(match_m128(_mm_min_ps(a, b), 1.0f, 2.0f, 2.0f, 1.0f)); +} +namespace NaN_A { +constexpr __m128 a = { __builtin_nanf(""), 2.0f, 3.0f, 4.0f }; +constexpr __m128 b = { 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m128 r = _mm_min_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Inf_B { +constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f }; +constexpr __m128 b = { 4.0f, 3.0f, -__builtin_huge_valf(), 1.0f }; +constexpr __m128 r = _mm_min_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Denormal_A { +constexpr __m128 a = { 1e-40f, 2.0f, 3.0f, 4.0f }; +constexpr __m128 b = { 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m128 r = _mm_min_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +} + +namespace Test_mm_max_ps { +namespace OK { +constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f }; +constexpr __m128 b = { 4.0f, 3.0f, 2.0f, 1.0f }; +TEST_CONSTEXPR(match_m128(_mm_max_ps(a, b), 4.0f, 3.0f, 3.0f, 4.0f)); +} +namespace NaN_B { +constexpr __m128 a = { 1.0f, 2.0f, 3.0f, 4.0f }; +constexpr __m128 b = { 4.0f, __builtin_nanf(""), 2.0f, 1.0f }; +constexpr __m128 r = _mm_max_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Inf_A { +constexpr __m128 a = { __builtin_huge_valf(), 2.0f, 3.0f, 4.0f }; +constexpr __m128 b = { 4.0f, 3.0f, 2.0f, 1.0f }; +constexpr __m128 r = _mm_max_ps(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +} + +namespace Test_mm_min_pd { +namespace OK { +constexpr __m128d a = { 1.0, 2.0 }; +constexpr __m128d b = { 2.0, 1.0 }; +TEST_CONSTEXPR(match_m128d(_mm_min_pd(a, b), 1.0, 1.0)); +} +namespace NaN_A { +constexpr __m128d a = { __builtin_nan(""), 2.0 }; +constexpr __m128d b = { 2.0, 1.0 }; +constexpr __m128d r = _mm_min_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace NaN_B { +constexpr __m128d a = { 1.0, 2.0 }; +constexpr __m128d b = { 2.0, __builtin_nan("") }; +constexpr __m128d r = _mm_min_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Inf_A { +constexpr __m128d a = { __builtin_huge_val(), 2.0 }; +constexpr __m128d b = { 2.0, 1.0 }; +constexpr __m128d r = _mm_min_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Inf_B { +constexpr __m128d a = { 1.0, 2.0 }; +constexpr __m128d b = { 2.0, -__builtin_huge_val() }; +constexpr __m128d r = _mm_min_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Denormal_A { +constexpr __m128d a = { 1e-310, 2.0 }; +constexpr __m128d b = { 2.0, 1.0 }; +constexpr __m128d r = _mm_min_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Denormal_B { +constexpr __m128d a = { 1.0, 2.0 }; +constexpr __m128d b = { 2.0, -1e-310 }; +constexpr __m128d r = _mm_min_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +} + +namespace Test_mm_max_pd { +namespace OK { +constexpr __m128d a = { 1.0, 2.0 }; +constexpr __m128d b = { 2.0, 1.0 }; +TEST_CONSTEXPR(match_m128d(_mm_max_pd(a, b), 2.0, 2.0)); +} +namespace NaN_A { +constexpr __m128d a = { __builtin_nan(""), 2.0 }; +constexpr __m128d b = { 2.0, 1.0 }; +constexpr __m128d r = _mm_max_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Inf_A { +constexpr __m128d a = { __builtin_huge_val(), 2.0 }; +constexpr __m128d b = { 2.0, 1.0 }; +constexpr __m128d r = _mm_max_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +namespace Denormal_A { +constexpr __m128d a = { 1e-310, 2.0 }; +constexpr __m128d b = { 2.0, 1.0 }; +constexpr __m128d r = _mm_max_pd(a, b); +// expected-error@-1 {{must be initialized by a constant expression}} +} +} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
