https://github.com/hpkfft created https://github.com/llvm/llvm-project/pull/202063
The static rounding mode for X86 intrinsics that produce floating-point results should use the macro `_MM_FROUND_TO_NEAREST_TIES_EVEN` rather than `MM_FROUND_TO_NEAREST_INT`. See also: https://github.com/llvm/llvm-project/pull/99691#issuecomment-2245842818 >From 297400934b25361b1646162a2813a22e8fa70807 Mon Sep 17 00:00:00 2001 From: Paul Caprioli <[email protected]> Date: Sat, 6 Jun 2026 10:00:31 -0700 Subject: [PATCH] [test][X86] Use _MM_FROUND_TO_NEAREST_TIES_EVEN --- .../CodeGen/X86/avx10_2_512convert-builtins.c | 4 ++-- .../X86/avx512dq-builtins-constrained.c | 24 +++++++++---------- clang/test/CodeGen/X86/avx512dq-builtins.c | 24 +++++++++---------- clang/test/CodeGen/X86/f16c-builtins.c | 4 ++-- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/clang/test/CodeGen/X86/avx10_2_512convert-builtins.c b/clang/test/CodeGen/X86/avx10_2_512convert-builtins.c index 7fbdcdc2d18c2..192258fa88aaa 100644 --- a/clang/test/CodeGen/X86/avx10_2_512convert-builtins.c +++ b/clang/test/CodeGen/X86/avx10_2_512convert-builtins.c @@ -32,13 +32,13 @@ __m512h test_mm512_cvtx_round2ps_ph(__m512 __A, __m512 __B) { __m512h test_mm512_mask_cvtx_round2ps_ph(__m512h __W, __mmask32 __U, __m512 __A, __m512 __B) { // CHECK-LABEL: @test_mm512_mask_cvtx_round2ps_ph( // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvt2ps2phx.512 - return _mm512_mask_cvtx_round2ps_ph(__W, __U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_mask_cvtx_round2ps_ph(__W, __U, __A, __B, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_cvtx_round2ps_ph(__mmask32 __U, __m512 __A, __m512 __B) { // CHECK-LABEL: @test_mm512_maskz_cvtx_round2ps_ph( // CHECK: call <32 x half> @llvm.x86.avx10.mask.vcvt2ps2phx.512 - return _mm512_maskz_cvtx_round2ps_ph(__U, __A, __B, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_maskz_cvtx_round2ps_ph(__U, __A, __B, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m256i test_mm512_cvtbiasph_bf8(__m512i __A, __m512h __B) { diff --git a/clang/test/CodeGen/X86/avx512dq-builtins-constrained.c b/clang/test/CodeGen/X86/avx512dq-builtins-constrained.c index fc7c3361c9b76..3bfc1b94875a2 100644 --- a/clang/test/CodeGen/X86/avx512dq-builtins-constrained.c +++ b/clang/test/CodeGen/X86/avx512dq-builtins-constrained.c @@ -46,7 +46,7 @@ __m512d test_mm512_cvt_roundepi64_pd(__m512i __A) { // COMMON-LABEL: test_mm512_cvt_roundepi64_pd // COMMONIR: @llvm.x86.avx512.sitofp.round.v8f64.v8i64 // CHECK-ASM: vcvtqq2pd - return _mm512_cvt_roundepi64_pd(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_cvt_roundepi64_pd(__A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m512d test_mm512_mask_cvt_roundepi64_pd(__m512d __W, __mmask8 __U, __m512i __A) { @@ -54,7 +54,7 @@ __m512d test_mm512_mask_cvt_roundepi64_pd(__m512d __W, __mmask8 __U, __m512i __A // COMMONIR: @llvm.x86.avx512.sitofp.round.v8f64.v8i64 // COMMONIR: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} // CHECK-ASM: vcvtqq2pd - return _mm512_mask_cvt_roundepi64_pd(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_mask_cvt_roundepi64_pd(__W, __U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m512d test_mm512_maskz_cvt_roundepi64_pd(__mmask8 __U, __m512i __A) { @@ -62,7 +62,7 @@ __m512d test_mm512_maskz_cvt_roundepi64_pd(__mmask8 __U, __m512i __A) { // COMMONIR: @llvm.x86.avx512.sitofp.round.v8f64.v8i64 // COMMONIR: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} // CHECK-ASM: vcvtqq2pd - return _mm512_maskz_cvt_roundepi64_pd(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_maskz_cvt_roundepi64_pd(__U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m256 test_mm512_cvtepi64_ps(__m512i __A) { @@ -95,7 +95,7 @@ __m256 test_mm512_cvt_roundepi64_ps(__m512i __A) { // COMMON-LABEL: test_mm512_cvt_roundepi64_ps // COMMONIR: @llvm.x86.avx512.sitofp.round.v8f32.v8i64 // CHECK-ASM: vcvtqq2ps - return _mm512_cvt_roundepi64_ps(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_cvt_roundepi64_ps(__A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m256 test_mm512_mask_cvt_roundepi64_ps(__m256 __W, __mmask8 __U, __m512i __A) { @@ -103,7 +103,7 @@ __m256 test_mm512_mask_cvt_roundepi64_ps(__m256 __W, __mmask8 __U, __m512i __A) // COMMONIR: @llvm.x86.avx512.sitofp.round.v8f32.v8i64 // COMMONIR: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} // CHECK-ASM: vcvtqq2ps - return _mm512_mask_cvt_roundepi64_ps(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_mask_cvt_roundepi64_ps(__W, __U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m256 test_mm512_maskz_cvt_roundepi64_ps(__mmask8 __U, __m512i __A) { @@ -111,7 +111,7 @@ __m256 test_mm512_maskz_cvt_roundepi64_ps(__mmask8 __U, __m512i __A) { // COMMONIR: @llvm.x86.avx512.sitofp.round.v8f32.v8i64 // COMMONIR: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} // CHECK-ASM: vcvtqq2ps - return _mm512_maskz_cvt_roundepi64_ps(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_maskz_cvt_roundepi64_ps(__U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m512d test_mm512_cvtepu64_pd(__m512i __A) { @@ -144,7 +144,7 @@ __m512d test_mm512_cvt_roundepu64_pd(__m512i __A) { // COMMON-LABEL: test_mm512_cvt_roundepu64_pd // COMMONIR: @llvm.x86.avx512.uitofp.round.v8f64.v8i64 // CHECK-ASM: vcvtuqq2pd - return _mm512_cvt_roundepu64_pd(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_cvt_roundepu64_pd(__A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m512d test_mm512_mask_cvt_roundepu64_pd(__m512d __W, __mmask8 __U, __m512i __A) { @@ -152,7 +152,7 @@ __m512d test_mm512_mask_cvt_roundepu64_pd(__m512d __W, __mmask8 __U, __m512i __A // COMMONIR: @llvm.x86.avx512.uitofp.round.v8f64.v8i64 // COMMONIR: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} // CHECK-ASM: vcvtuqq2pd - return _mm512_mask_cvt_roundepu64_pd(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_mask_cvt_roundepu64_pd(__W, __U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m512d test_mm512_maskz_cvt_roundepu64_pd(__mmask8 __U, __m512i __A) { @@ -160,7 +160,7 @@ __m512d test_mm512_maskz_cvt_roundepu64_pd(__mmask8 __U, __m512i __A) { // COMMONIR: @llvm.x86.avx512.uitofp.round.v8f64.v8i64 // COMMONIR: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} // CHECK-ASM: vcvtuqq2pd - return _mm512_maskz_cvt_roundepu64_pd(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_maskz_cvt_roundepu64_pd(__U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m256 test_mm512_cvtepu64_ps(__m512i __A) { @@ -193,7 +193,7 @@ __m256 test_mm512_cvt_roundepu64_ps(__m512i __A) { // COMMON-LABEL: test_mm512_cvt_roundepu64_ps // COMMONIR: @llvm.x86.avx512.uitofp.round.v8f32.v8i64 // CHECK-ASM: vcvtuqq2ps - return _mm512_cvt_roundepu64_ps(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_cvt_roundepu64_ps(__A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m256 test_mm512_mask_cvt_roundepu64_ps(__m256 __W, __mmask8 __U, __m512i __A) { @@ -201,7 +201,7 @@ __m256 test_mm512_mask_cvt_roundepu64_ps(__m256 __W, __mmask8 __U, __m512i __A) // COMMONIR: @llvm.x86.avx512.uitofp.round.v8f32.v8i64 // COMMONIR: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} // CHECK-ASM: vcvtuqq2ps - return _mm512_mask_cvt_roundepu64_ps(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_mask_cvt_roundepu64_ps(__W, __U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m256 test_mm512_maskz_cvt_roundepu64_ps(__mmask8 __U, __m512i __A) { @@ -209,6 +209,6 @@ __m256 test_mm512_maskz_cvt_roundepu64_ps(__mmask8 __U, __m512i __A) { // COMMONIR: @llvm.x86.avx512.uitofp.round.v8f32.v8i64 // COMMONIR: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} // CHECK-ASM: vcvtuqq2ps - return _mm512_maskz_cvt_roundepu64_ps(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_maskz_cvt_roundepu64_ps(__U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } diff --git a/clang/test/CodeGen/X86/avx512dq-builtins.c b/clang/test/CodeGen/X86/avx512dq-builtins.c index edbe591b02cbb..51a556ffcd986 100644 --- a/clang/test/CodeGen/X86/avx512dq-builtins.c +++ b/clang/test/CodeGen/X86/avx512dq-builtins.c @@ -791,21 +791,21 @@ TEST_CONSTEXPR(match_m512d(_mm512_maskz_cvtepi64_pd(/*1010 0101=*/0xa5, (__m512i __m512d test_mm512_cvt_roundepi64_pd(__m512i __A) { // CHECK-LABEL: test_mm512_cvt_roundepi64_pd // CHECK: @llvm.x86.avx512.sitofp.round.v8f64.v8i64 - return _mm512_cvt_roundepi64_pd(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_cvt_roundepi64_pd(__A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m512d test_mm512_mask_cvt_roundepi64_pd(__m512d __W, __mmask8 __U, __m512i __A) { // CHECK-LABEL: test_mm512_mask_cvt_roundepi64_pd // CHECK: @llvm.x86.avx512.sitofp.round.v8f64.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} - return _mm512_mask_cvt_roundepi64_pd(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_mask_cvt_roundepi64_pd(__W, __U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m512d test_mm512_maskz_cvt_roundepi64_pd(__mmask8 __U, __m512i __A) { // CHECK-LABEL: test_mm512_maskz_cvt_roundepi64_pd // CHECK: @llvm.x86.avx512.sitofp.round.v8f64.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} - return _mm512_maskz_cvt_roundepi64_pd(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_maskz_cvt_roundepi64_pd(__U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m256 test_mm512_cvtepi64_ps(__m512i __A) { @@ -831,21 +831,21 @@ __m256 test_mm512_maskz_cvtepi64_ps(__mmask8 __U, __m512i __A) { __m256 test_mm512_cvt_roundepi64_ps(__m512i __A) { // CHECK-LABEL: test_mm512_cvt_roundepi64_ps // CHECK: @llvm.x86.avx512.sitofp.round.v8f32.v8i64 - return _mm512_cvt_roundepi64_ps(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_cvt_roundepi64_ps(__A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m256 test_mm512_mask_cvt_roundepi64_ps(__m256 __W, __mmask8 __U, __m512i __A) { // CHECK-LABEL: test_mm512_mask_cvt_roundepi64_ps // CHECK: @llvm.x86.avx512.sitofp.round.v8f32.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} - return _mm512_mask_cvt_roundepi64_ps(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_mask_cvt_roundepi64_ps(__W, __U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m256 test_mm512_maskz_cvt_roundepi64_ps(__mmask8 __U, __m512i __A) { // CHECK-LABEL: test_mm512_maskz_cvt_roundepi64_ps // CHECK: @llvm.x86.avx512.sitofp.round.v8f32.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} - return _mm512_maskz_cvt_roundepi64_ps(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_maskz_cvt_roundepi64_ps(__U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m512i test_mm512_cvttpd_epi64(__m512d __A) { @@ -1021,21 +1021,21 @@ TEST_CONSTEXPR(match_m512d(_mm512_maskz_cvtepu64_pd(/*1010 0101=*/0xa5, (__m512i __m512d test_mm512_cvt_roundepu64_pd(__m512i __A) { // CHECK-LABEL: test_mm512_cvt_roundepu64_pd // CHECK: @llvm.x86.avx512.uitofp.round.v8f64.v8i64 - return _mm512_cvt_roundepu64_pd(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_cvt_roundepu64_pd(__A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m512d test_mm512_mask_cvt_roundepu64_pd(__m512d __W, __mmask8 __U, __m512i __A) { // CHECK-LABEL: test_mm512_mask_cvt_roundepu64_pd // CHECK: @llvm.x86.avx512.uitofp.round.v8f64.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} - return _mm512_mask_cvt_roundepu64_pd(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_mask_cvt_roundepu64_pd(__W, __U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m512d test_mm512_maskz_cvt_roundepu64_pd(__mmask8 __U, __m512i __A) { // CHECK-LABEL: test_mm512_maskz_cvt_roundepu64_pd // CHECK: @llvm.x86.avx512.uitofp.round.v8f64.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} - return _mm512_maskz_cvt_roundepu64_pd(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_maskz_cvt_roundepu64_pd(__U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m256 test_mm512_cvtepu64_ps(__m512i __A) { @@ -1061,21 +1061,21 @@ __m256 test_mm512_maskz_cvtepu64_ps(__mmask8 __U, __m512i __A) { __m256 test_mm512_cvt_roundepu64_ps(__m512i __A) { // CHECK-LABEL: test_mm512_cvt_roundepu64_ps // CHECK: @llvm.x86.avx512.uitofp.round.v8f32.v8i64 - return _mm512_cvt_roundepu64_ps(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_cvt_roundepu64_ps(__A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m256 test_mm512_mask_cvt_roundepu64_ps(__m256 __W, __mmask8 __U, __m512i __A) { // CHECK-LABEL: test_mm512_mask_cvt_roundepu64_ps // CHECK: @llvm.x86.avx512.uitofp.round.v8f32.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} - return _mm512_mask_cvt_roundepu64_ps(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_mask_cvt_roundepu64_ps(__W, __U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m256 test_mm512_maskz_cvt_roundepu64_ps(__mmask8 __U, __m512i __A) { // CHECK-LABEL: test_mm512_maskz_cvt_roundepu64_ps // CHECK: @llvm.x86.avx512.uitofp.round.v8f32.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} - return _mm512_maskz_cvt_roundepu64_ps(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + return _mm512_maskz_cvt_roundepu64_ps(__U, __A, _MM_FROUND_TO_NEAREST_TIES_EVEN | _MM_FROUND_NO_EXC); } __m512d test_mm512_range_pd(__m512d __A, __m512d __B) { diff --git a/clang/test/CodeGen/X86/f16c-builtins.c b/clang/test/CodeGen/X86/f16c-builtins.c index 2ae4bc857b431..7533abd67cb2b 100755 --- a/clang/test/CodeGen/X86/f16c-builtins.c +++ b/clang/test/CodeGen/X86/f16c-builtins.c @@ -55,7 +55,7 @@ __m128 test_mm_cvtph_ps(__m128i a) { // // Test values: -2.5f, 1.123f, POS_HALFWAY TEST_CONSTEXPR(match_v8hi( - _mm_cvtps_ph(_mm_setr_ps(-2.5f, 1.123f, POS_HALFWAY, 0.0f), _MM_FROUND_TO_NEAREST_INT), + _mm_cvtps_ph(_mm_setr_ps(-2.5f, 1.123f, POS_HALFWAY, 0.0f), _MM_FROUND_TO_NEAREST_TIES_EVEN), 0xC100, 0x3C7E, 0x3C00, 0x0000, 0, 0, 0, 0 )); TEST_CONSTEXPR(match_v8hi( @@ -86,7 +86,7 @@ TEST_CONSTEXPR(match_m256( // // Test values: -2.5f, 1.123f, POS_HALFWAY TEST_CONSTEXPR(match_v8hi( - _mm256_cvtps_ph(_mm256_setr_ps(-2.5f, 1.123f, POS_HALFWAY, 0.0f, -2.5f, 1.123f, POS_HALFWAY, 0.0f), _MM_FROUND_TO_NEAREST_INT), + _mm256_cvtps_ph(_mm256_setr_ps(-2.5f, 1.123f, POS_HALFWAY, 0.0f, -2.5f, 1.123f, POS_HALFWAY, 0.0f), _MM_FROUND_TO_NEAREST_TIES_EVEN), 0xC100, 0x3C7E, 0x3C00, 0x0000, 0xC100, 0x3C7E, 0x3C00, 0x0000 )); TEST_CONSTEXPR(match_v8hi( _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
