From 8d1314f96d960215a4101f3f2cf269c061ca6ea6 Mon Sep 17 00:00:00 2001 From: sskzakaria Date: Thu, 26 Mar 2026 10:20:45 -0400 Subject: [PATCH] [X86][Clang] VectorExprEvaluator::VisitCallExpr / InterpretBuiltin - allow AVX512 VPTESTM intrinsics to be used in constexpr #162071 (#174021) Adding Constexpr tests for ``` _mm_test_epi8_mask _mm_mask_test_epi8_mask _mm_test_epi16_mask _mm_mask_test_epi16_mask _mm_test_epi64_mask _mm_mask_test_epi32_mask _mm_test_epi32_mask _mm_mask_test_epi64_mask _mm_testn_epi8_mask _mm_mask_testn_epi8_mask _mm_testn_epi16_mask _mm_mask_testn_epi16_mask _mm_testn_epi64_mask _mm_mask_testn_epi32_mask _mm_testn_epi32_mask _mm_mask_testn_epi64_mask _mm256_test_epi8_mask _mm256_mask_test_epi8_mask _mm256_test_epi16_mask _mm256_mask_test_epi16_mask _mm256_test_epi64_mask _mm256_mask_test_epi32_mask _mm256_test_epi32_mask _mm256_mask_test_epi64_mask _mm256_testn_epi8_mask _mm256_mask_testn_epi8_mask _mm256_testn_epi16_mask _mm256_mask_testn_epi16_mask _mm256_testn_epi64_mask _mm256_mask_testn_epi32_mask _mm256_testn_epi32_mask _mm256_mask_testn_epi64_mask _mm512_test_epi8_mask _mm512_mask_test_epi8_mask _mm512_test_epi16_mask _mm512_mask_test_epi16_mask _mm512_test_epi64_mask _mm512_mask_test_epi32_mask _mm512_test_epi32_mask _mm512_mask_test_epi64_mask _mm512_testn_epi8_mask _mm512_mask_testn_epi8_mask _mm512_testn_epi16_mask _mm512_mask_testn_epi16_mask _mm512_testn_epi64_mask _mm512_mask_testn_epi32_mask _mm512_testn_epi32_mask _mm512_mask_testn_epi64_mask ``` FIXES #162071 --- clang/lib/Headers/avx512bwintrin.h | 40 ++++----- clang/lib/Headers/avx512fintrin.h | 40 ++++----- clang/lib/Headers/avx512vlbwintrin.h | 60 ++++++------- clang/lib/Headers/avx512vlintrin.h | 80 +++++++----------- clang/test/CodeGen/X86/avx512bw-builtins.c | 46 +++++++++- clang/test/CodeGen/X86/avx512f-builtins.c | 60 ++++++++++++- clang/test/CodeGen/X86/avx512vl-builtins.c | 88 ++++++++++++++++++++ clang/test/CodeGen/X86/avx512vlbw-builtins.c | 68 +++++++++++++++ 8 files changed, 348 insertions(+), 134 deletions(-) diff --git a/clang/lib/Headers/avx512bwintrin.h b/clang/lib/Headers/avx512bwintrin.h index cd4663abe7d9..83cabc0dfb5a 100644 --- a/clang/lib/Headers/avx512bwintrin.h +++ b/clang/lib/Headers/avx512bwintrin.h @@ -1695,57 +1695,49 @@ _mm512_mask_storeu_epi8 (void *__P, __mmask64 __U, __m512i __A) (__mmask64) __U); } -static __inline__ __mmask64 __DEFAULT_FN_ATTRS512 -_mm512_test_epi8_mask (__m512i __A, __m512i __B) -{ +static __inline__ __mmask64 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_test_epi8_mask(__m512i __A, __m512i __B) { return _mm512_cmpneq_epi8_mask (_mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } -static __inline__ __mmask64 __DEFAULT_FN_ATTRS512 -_mm512_mask_test_epi8_mask (__mmask64 __U, __m512i __A, __m512i __B) -{ +static __inline__ __mmask64 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_mask_test_epi8_mask(__mmask64 __U, __m512i __A, __m512i __B) { return _mm512_mask_cmpneq_epi8_mask (__U, _mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } -static __inline__ __mmask32 __DEFAULT_FN_ATTRS512 -_mm512_test_epi16_mask (__m512i __A, __m512i __B) -{ +static __inline__ __mmask32 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_test_epi16_mask(__m512i __A, __m512i __B) { return _mm512_cmpneq_epi16_mask (_mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } -static __inline__ __mmask32 __DEFAULT_FN_ATTRS512 -_mm512_mask_test_epi16_mask (__mmask32 __U, __m512i __A, __m512i __B) -{ +static __inline__ __mmask32 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_mask_test_epi16_mask(__mmask32 __U, __m512i __A, __m512i __B) { return _mm512_mask_cmpneq_epi16_mask (__U, _mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } -static __inline__ __mmask64 __DEFAULT_FN_ATTRS512 -_mm512_testn_epi8_mask (__m512i __A, __m512i __B) -{ +static __inline__ __mmask64 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_testn_epi8_mask(__m512i __A, __m512i __B) { return _mm512_cmpeq_epi8_mask (_mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } -static __inline__ __mmask64 __DEFAULT_FN_ATTRS512 -_mm512_mask_testn_epi8_mask (__mmask64 __U, __m512i __A, __m512i __B) -{ +static __inline__ __mmask64 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_mask_testn_epi8_mask(__mmask64 __U, __m512i __A, __m512i __B) { return _mm512_mask_cmpeq_epi8_mask (__U, _mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } -static __inline__ __mmask32 __DEFAULT_FN_ATTRS512 -_mm512_testn_epi16_mask (__m512i __A, __m512i __B) -{ +static __inline__ __mmask32 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_testn_epi16_mask(__m512i __A, __m512i __B) { return _mm512_cmpeq_epi16_mask (_mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } -static __inline__ __mmask32 __DEFAULT_FN_ATTRS512 -_mm512_mask_testn_epi16_mask (__mmask32 __U, __m512i __A, __m512i __B) -{ +static __inline__ __mmask32 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_mask_testn_epi16_mask(__mmask32 __U, __m512i __A, __m512i __B) { return _mm512_mask_cmpeq_epi16_mask (__U, _mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } diff --git a/clang/lib/Headers/avx512fintrin.h b/clang/lib/Headers/avx512fintrin.h index edd33968848f..698f869f4549 100644 --- a/clang/lib/Headers/avx512fintrin.h +++ b/clang/lib/Headers/avx512fintrin.h @@ -8202,58 +8202,50 @@ _mm512_maskz_compress_epi32(__mmask16 __U, __m512i __A) { /* Bit Test */ -static __inline __mmask16 __DEFAULT_FN_ATTRS512 -_mm512_test_epi32_mask (__m512i __A, __m512i __B) -{ +static __inline __mmask16 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_test_epi32_mask(__m512i __A, __m512i __B) { return _mm512_cmpneq_epi32_mask (_mm512_and_epi32(__A, __B), _mm512_setzero_si512()); } -static __inline__ __mmask16 __DEFAULT_FN_ATTRS512 -_mm512_mask_test_epi32_mask (__mmask16 __U, __m512i __A, __m512i __B) -{ +static __inline__ __mmask16 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_mask_test_epi32_mask(__mmask16 __U, __m512i __A, __m512i __B) { return _mm512_mask_cmpneq_epi32_mask (__U, _mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } -static __inline __mmask8 __DEFAULT_FN_ATTRS512 -_mm512_test_epi64_mask (__m512i __A, __m512i __B) -{ +static __inline __mmask8 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_test_epi64_mask(__m512i __A, __m512i __B) { return _mm512_cmpneq_epi64_mask (_mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS512 -_mm512_mask_test_epi64_mask (__mmask8 __U, __m512i __A, __m512i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_mask_test_epi64_mask(__mmask8 __U, __m512i __A, __m512i __B) { return _mm512_mask_cmpneq_epi64_mask (__U, _mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } -static __inline__ __mmask16 __DEFAULT_FN_ATTRS512 -_mm512_testn_epi32_mask (__m512i __A, __m512i __B) -{ +static __inline__ __mmask16 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_testn_epi32_mask(__m512i __A, __m512i __B) { return _mm512_cmpeq_epi32_mask (_mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } -static __inline__ __mmask16 __DEFAULT_FN_ATTRS512 -_mm512_mask_testn_epi32_mask (__mmask16 __U, __m512i __A, __m512i __B) -{ +static __inline__ __mmask16 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_mask_testn_epi32_mask(__mmask16 __U, __m512i __A, __m512i __B) { return _mm512_mask_cmpeq_epi32_mask (__U, _mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS512 -_mm512_testn_epi64_mask (__m512i __A, __m512i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_testn_epi64_mask(__m512i __A, __m512i __B) { return _mm512_cmpeq_epi64_mask (_mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS512 -_mm512_mask_testn_epi64_mask (__mmask8 __U, __m512i __A, __m512i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS512_CONSTEXPR +_mm512_mask_testn_epi64_mask(__mmask8 __U, __m512i __A, __m512i __B) { return _mm512_mask_cmpeq_epi64_mask (__U, _mm512_and_epi32 (__A, __B), _mm512_setzero_si512()); } diff --git a/clang/lib/Headers/avx512vlbwintrin.h b/clang/lib/Headers/avx512vlbwintrin.h index fb5d9d4dcc90..930261d98158 100644 --- a/clang/lib/Headers/avx512vlbwintrin.h +++ b/clang/lib/Headers/avx512vlbwintrin.h @@ -2394,36 +2394,31 @@ _mm256_test_epi8_mask(__m256i __A, __m256i __B) { _mm256_setzero_si256()); } -static __inline__ __mmask32 __DEFAULT_FN_ATTRS256 -_mm256_mask_test_epi8_mask (__mmask32 __U, __m256i __A, __m256i __B) -{ +static __inline__ __mmask32 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_mask_test_epi8_mask(__mmask32 __U, __m256i __A, __m256i __B) { return _mm256_mask_cmpneq_epi8_mask (__U, _mm256_and_si256(__A, __B), _mm256_setzero_si256()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS128 -_mm_test_epi16_mask (__m128i __A, __m128i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS128_CONSTEXPR +_mm_test_epi16_mask(__m128i __A, __m128i __B) { return _mm_cmpneq_epi16_mask (_mm_and_si128 (__A, __B), _mm_setzero_si128()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS128 -_mm_mask_test_epi16_mask (__mmask8 __U, __m128i __A, __m128i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS128_CONSTEXPR +_mm_mask_test_epi16_mask(__mmask8 __U, __m128i __A, __m128i __B) { return _mm_mask_cmpneq_epi16_mask (__U, _mm_and_si128 (__A, __B), _mm_setzero_si128()); } -static __inline__ __mmask16 __DEFAULT_FN_ATTRS256 -_mm256_test_epi16_mask (__m256i __A, __m256i __B) -{ +static __inline__ __mmask16 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_test_epi16_mask(__m256i __A, __m256i __B) { return _mm256_cmpneq_epi16_mask (_mm256_and_si256 (__A, __B), _mm256_setzero_si256 ()); } -static __inline__ __mmask16 __DEFAULT_FN_ATTRS256 -_mm256_mask_test_epi16_mask (__mmask16 __U, __m256i __A, __m256i __B) -{ +static __inline__ __mmask16 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_mask_test_epi16_mask(__mmask16 __U, __m256i __A, __m256i __B) { return _mm256_mask_cmpneq_epi16_mask (__U, _mm256_and_si256(__A, __B), _mm256_setzero_si256()); } @@ -2433,49 +2428,42 @@ _mm_testn_epi8_mask(__m128i __A, __m128i __B) { return _mm_cmpeq_epi8_mask (_mm_and_si128 (__A, __B), _mm_setzero_si128()); } -static __inline__ __mmask16 __DEFAULT_FN_ATTRS128 -_mm_mask_testn_epi8_mask (__mmask16 __U, __m128i __A, __m128i __B) -{ +static __inline__ __mmask16 __DEFAULT_FN_ATTRS128_CONSTEXPR +_mm_mask_testn_epi8_mask(__mmask16 __U, __m128i __A, __m128i __B) { return _mm_mask_cmpeq_epi8_mask (__U, _mm_and_si128 (__A, __B), _mm_setzero_si128()); } -static __inline__ __mmask32 __DEFAULT_FN_ATTRS256 -_mm256_testn_epi8_mask (__m256i __A, __m256i __B) -{ +static __inline__ __mmask32 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_testn_epi8_mask(__m256i __A, __m256i __B) { return _mm256_cmpeq_epi8_mask (_mm256_and_si256 (__A, __B), _mm256_setzero_si256()); } -static __inline__ __mmask32 __DEFAULT_FN_ATTRS256 -_mm256_mask_testn_epi8_mask (__mmask32 __U, __m256i __A, __m256i __B) -{ +static __inline__ __mmask32 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_mask_testn_epi8_mask(__mmask32 __U, __m256i __A, __m256i __B) { return _mm256_mask_cmpeq_epi8_mask (__U, _mm256_and_si256 (__A, __B), _mm256_setzero_si256()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS128 -_mm_testn_epi16_mask (__m128i __A, __m128i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS128_CONSTEXPR +_mm_testn_epi16_mask(__m128i __A, __m128i __B) { return _mm_cmpeq_epi16_mask (_mm_and_si128 (__A, __B), _mm_setzero_si128()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS128 -_mm_mask_testn_epi16_mask (__mmask8 __U, __m128i __A, __m128i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS128_CONSTEXPR +_mm_mask_testn_epi16_mask(__mmask8 __U, __m128i __A, __m128i __B) { return _mm_mask_cmpeq_epi16_mask (__U, _mm_and_si128(__A, __B), _mm_setzero_si128()); } -static __inline__ __mmask16 __DEFAULT_FN_ATTRS256 -_mm256_testn_epi16_mask (__m256i __A, __m256i __B) -{ +static __inline__ __mmask16 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_testn_epi16_mask(__m256i __A, __m256i __B) { return _mm256_cmpeq_epi16_mask (_mm256_and_si256(__A, __B), _mm256_setzero_si256()); } -static __inline__ __mmask16 __DEFAULT_FN_ATTRS256 -_mm256_mask_testn_epi16_mask (__mmask16 __U, __m256i __A, __m256i __B) -{ +static __inline__ __mmask16 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_mask_testn_epi16_mask(__mmask16 __U, __m256i __A, __m256i __B) { return _mm256_mask_cmpeq_epi16_mask (__U, _mm256_and_si256 (__A, __B), _mm256_setzero_si256()); } diff --git a/clang/lib/Headers/avx512vlintrin.h b/clang/lib/Headers/avx512vlintrin.h index c816b9ef77a6..fe80857f171a 100644 --- a/clang/lib/Headers/avx512vlintrin.h +++ b/clang/lib/Headers/avx512vlintrin.h @@ -5887,110 +5887,94 @@ _mm256_maskz_permutevar_ps(__mmask8 __U, __m256 __A, __m256i __C) { (__v8sf)_mm256_setzero_ps()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS128 -_mm_test_epi32_mask (__m128i __A, __m128i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS128_CONSTEXPR +_mm_test_epi32_mask(__m128i __A, __m128i __B) { return _mm_cmpneq_epi32_mask (_mm_and_si128 (__A, __B), _mm_setzero_si128()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS128 -_mm_mask_test_epi32_mask (__mmask8 __U, __m128i __A, __m128i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS128_CONSTEXPR +_mm_mask_test_epi32_mask(__mmask8 __U, __m128i __A, __m128i __B) { return _mm_mask_cmpneq_epi32_mask (__U, _mm_and_si128 (__A, __B), _mm_setzero_si128()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS256 -_mm256_test_epi32_mask (__m256i __A, __m256i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_test_epi32_mask(__m256i __A, __m256i __B) { return _mm256_cmpneq_epi32_mask (_mm256_and_si256 (__A, __B), _mm256_setzero_si256()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS256 -_mm256_mask_test_epi32_mask (__mmask8 __U, __m256i __A, __m256i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_mask_test_epi32_mask(__mmask8 __U, __m256i __A, __m256i __B) { return _mm256_mask_cmpneq_epi32_mask (__U, _mm256_and_si256 (__A, __B), _mm256_setzero_si256()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS128 -_mm_test_epi64_mask (__m128i __A, __m128i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS128_CONSTEXPR +_mm_test_epi64_mask(__m128i __A, __m128i __B) { return _mm_cmpneq_epi64_mask (_mm_and_si128 (__A, __B), _mm_setzero_si128()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS128 -_mm_mask_test_epi64_mask (__mmask8 __U, __m128i __A, __m128i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS128_CONSTEXPR +_mm_mask_test_epi64_mask(__mmask8 __U, __m128i __A, __m128i __B) { return _mm_mask_cmpneq_epi64_mask (__U, _mm_and_si128 (__A, __B), _mm_setzero_si128()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS256 -_mm256_test_epi64_mask (__m256i __A, __m256i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_test_epi64_mask(__m256i __A, __m256i __B) { return _mm256_cmpneq_epi64_mask (_mm256_and_si256 (__A, __B), _mm256_setzero_si256()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS256 -_mm256_mask_test_epi64_mask (__mmask8 __U, __m256i __A, __m256i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_mask_test_epi64_mask(__mmask8 __U, __m256i __A, __m256i __B) { return _mm256_mask_cmpneq_epi64_mask (__U, _mm256_and_si256 (__A, __B), _mm256_setzero_si256()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS128 -_mm_testn_epi32_mask (__m128i __A, __m128i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS128_CONSTEXPR +_mm_testn_epi32_mask(__m128i __A, __m128i __B) { return _mm_cmpeq_epi32_mask (_mm_and_si128 (__A, __B), _mm_setzero_si128()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS128 -_mm_mask_testn_epi32_mask (__mmask8 __U, __m128i __A, __m128i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS128_CONSTEXPR +_mm_mask_testn_epi32_mask(__mmask8 __U, __m128i __A, __m128i __B) { return _mm_mask_cmpeq_epi32_mask (__U, _mm_and_si128 (__A, __B), _mm_setzero_si128()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS256 -_mm256_testn_epi32_mask (__m256i __A, __m256i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_testn_epi32_mask(__m256i __A, __m256i __B) { return _mm256_cmpeq_epi32_mask (_mm256_and_si256 (__A, __B), _mm256_setzero_si256()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS256 -_mm256_mask_testn_epi32_mask (__mmask8 __U, __m256i __A, __m256i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_mask_testn_epi32_mask(__mmask8 __U, __m256i __A, __m256i __B) { return _mm256_mask_cmpeq_epi32_mask (__U, _mm256_and_si256 (__A, __B), _mm256_setzero_si256()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS128 -_mm_testn_epi64_mask (__m128i __A, __m128i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS128_CONSTEXPR +_mm_testn_epi64_mask(__m128i __A, __m128i __B) { return _mm_cmpeq_epi64_mask (_mm_and_si128 (__A, __B), _mm_setzero_si128()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS128 -_mm_mask_testn_epi64_mask (__mmask8 __U, __m128i __A, __m128i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS128_CONSTEXPR +_mm_mask_testn_epi64_mask(__mmask8 __U, __m128i __A, __m128i __B) { return _mm_mask_cmpeq_epi64_mask (__U, _mm_and_si128 (__A, __B), _mm_setzero_si128()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS256 -_mm256_testn_epi64_mask (__m256i __A, __m256i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_testn_epi64_mask(__m256i __A, __m256i __B) { return _mm256_cmpeq_epi64_mask (_mm256_and_si256 (__A, __B), _mm256_setzero_si256()); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS256 -_mm256_mask_testn_epi64_mask (__mmask8 __U, __m256i __A, __m256i __B) -{ +static __inline__ __mmask8 __DEFAULT_FN_ATTRS256_CONSTEXPR +_mm256_mask_testn_epi64_mask(__mmask8 __U, __m256i __A, __m256i __B) { return _mm256_mask_cmpeq_epi64_mask (__U, _mm256_and_si256 (__A, __B), _mm256_setzero_si256()); } diff --git a/clang/test/CodeGen/X86/avx512bw-builtins.c b/clang/test/CodeGen/X86/avx512bw-builtins.c index 96b809cffdd9..2020b72a649a 100644 --- a/clang/test/CodeGen/X86/avx512bw-builtins.c +++ b/clang/test/CodeGen/X86/avx512bw-builtins.c @@ -2861,7 +2861,12 @@ __mmask64 test_mm512_test_epi8_mask(__m512i __A, __m512i __B) { // CHECK: and <16 x i32> %{{.*}}, %{{.*}} // CHECK: icmp ne <64 x i8> %{{.*}}, %{{.*}} return _mm512_test_epi8_mask(__A, __B); -} +} + +TEST_CONSTEXPR(_mm512_test_epi8_mask( + ((__m512i)(__v64qs){-15, -66, 2, -45, -13, 29, -13, -76, -1, -94, 8, 81, 3, -80, 9, 90, 3, -50, 10, -25, -2, -31, 12, 81, 14, -80, -13, -36, 5, 9, -2, 3, 9, 74, -1, -73, -1, -37, -2, 72, 6, 97, -10, 37, -1, 4, -4, 39, 8, -21, 5, 38, 6, 74, -12, -15, -13, 49, 14, -92, -1, -81, 11, 88}), + ((__m512i)(__v64qs){-46, -66, 55, -45, 113, -65, 86, -65, -115, -89, -80, 113, -107, -66, 116, -34, -81, -50, -17, -17, -54, -19, 41, -9, 39, -3, 30, -2, -49, 73, -121, -93, 52, -5, -108, -73, -123, -5, -30, -51, -82, 111, -64, -27, -19, -74, 92, -65, -53, -1, -124, 54, -26, 78, 101, -9, 40, 125, -57, -1, -84, -65, 32, -4}) +) == (__mmask64)0xbffffffeffffbbff); void test_mm512_storeu_epi8(void *__P, __m512i __A) { // CHECK-LABEL: test_mm512_storeu_epi8 @@ -2882,6 +2887,12 @@ __mmask64 test_mm512_mask_test_epi8_mask(__mmask64 __U, __m512i __A, __m512i __B return _mm512_mask_test_epi8_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm512_mask_test_epi8_mask( + (__mmask64)0xaaaaaaaaaaaaaaaa, + ((__m512i)(__v64qs){20, 45, -30, 67, 89, -12, 54, -78, 91, 33, -88, 76, 44, -56, 109, 22, -67, 88, 34, -91, 77, 45, -123, 66, 34, -99, 87, 23, -76, 112, 56, -34, 91, 44, -67, 89, 23, -101, 78, 56, -89, 67, 44, -78, 91, 23, -87, 109, 56, -44, 88, 33, -91, 76, 45, -67, 89, 34, -102, 77, 56, -88, 91, 44}), + ((__m512i)(__v64qs){-20, -45, 30, -67, -89, 12, -54, 78, -91, -33, 88, -76, -44, 56, -109, -22, 67, -88, -34, 91, -77, -45, 123, -66, -34, 99, -87, -23, 76, -112, -56, 34, -91, -44, 67, -89, -23, 101, -78, -56, 89, -67, -44, 78, -91, -23, 87, -109, -56, 44, -88, -33, 91, -76, -45, 67, -89, -34, 102, -77, -56, 88, -91, -44}) +) == (__mmask64)0xaaaaaaaaaaaaaaaa); + __mmask32 test_mm512_test_epi16_mask(__m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_test_epi16_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} @@ -2889,6 +2900,11 @@ __mmask32 test_mm512_test_epi16_mask(__m512i __A, __m512i __B) { return _mm512_test_epi16_mask(__A, __B); } +TEST_CONSTEXPR(_mm512_test_epi16_mask( + ((__m512i)(__v32hi){45, -67, 88, 23, -91, 76, 34, -112, 67, 89, -45, 77, 56, -88, 91, 44, -67, 88, 34, -91, 77, 45, -123, 66, 89, -44, 76, 33, -91, 88, 45, -78}), + ((__m512i)(__v32hi){-45, 67, -88, -23, 91, -76, -34, 112, -67, -89, 45, -77, -56, 88, -91, -44, 67, -88, -34, 91, -77, -45, 123, -66, -89, 44, -76, -33, 91, -88, -45, 78}) +) == (__mmask32)0xffffffff); + __mmask32 test_mm512_mask_test_epi16_mask(__mmask32 __U, __m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_mask_test_epi16_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} @@ -2897,6 +2913,12 @@ __mmask32 test_mm512_mask_test_epi16_mask(__mmask32 __U, __m512i __A, __m512i __ return _mm512_mask_test_epi16_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm512_mask_test_epi16_mask( + (__mmask32)0x55555555, + ((__m512i)(__v32hi){-199, 7714, -208, -1362, 209, 9551, 167, -774, 72, 9352, 33, -7329, -169, -8586, 139, 97, 66, -4065, -173, 6613, -89, -476, -124, -7227, 7, -7438, -198, -2009, 14, -942, -5, 9905}), + ((__m512i)(__v32hi){20634, 19106, -6623, 2494, 25733, -30897, 16385, 5374, -8135, 2537, -12516, 31487, -10307, 7543, -4838, -7817, 8275, 13535, -17882, -12545, 29549, 19070, 5415, 16607, -31893, -23049, 6730, -2321, 4674, -25250, 12393, -17739}) +) == (__mmask32)0x55555155); + __mmask64 test_mm512_testn_epi8_mask(__m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_testn_epi8_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} @@ -2904,6 +2926,11 @@ __mmask64 test_mm512_testn_epi8_mask(__m512i __A, __m512i __B) { return _mm512_testn_epi8_mask(__A, __B); } +TEST_CONSTEXPR(_mm512_testn_epi8_mask( + ((__m512i)(__v64qs){-15, -66, 2, -45, -13, 29, -13, -76, -1, -94, 8, 81, 3, -80, 9, 90, 3, -50, 10, -25, -2, -31, 12, 81, 14, -80, -13, -36, 5, 9, -2, 3, 9, 74, -1, -73, -1, -37, -2, 72, 6, 97, -10, 37, -1, 4, -4, 39, 8, -21, 5, 38, 6, 74, -12, -15, -13, 49, 14, -92, -1, -81, 11, 88}), + ((__m512i)(__v64qs){-46, -66, 55, -45, 113, -65, 86, -65, -115, -89, -80, 113, -107, -66, 116, -34, -81, -50, -17, -17, -54, -19, 41, -9, 39, -3, 30, -2, -49, 73, -121, -93, 52, -5, -108, -73, -123, -5, -30, -51, -82, 111, -64, -27, -19, -74, 92, -65, -53, -1, -124, 54, -26, 78, 101, -9, 40, 125, -57, -1, -84, -65, 32, -4}) +) == (__mmask64)0x4000000100004400); + __mmask64 test_mm512_mask_testn_epi8_mask(__mmask64 __U, __m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_mask_testn_epi8_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} @@ -2912,6 +2939,12 @@ __mmask64 test_mm512_mask_testn_epi8_mask(__mmask64 __U, __m512i __A, __m512i __ return _mm512_mask_testn_epi8_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm512_mask_testn_epi8_mask( + (__mmask64)0x5555555555555555, + ((__m512i)(__v64qs){1, 2, 4, 8, 16, 32, 64, 127, 1, 2, 4, 8, 16, 32, 64, 127, 1, 2, 4, 8, 16, 32, 64, 127, 1, 2, 4, 8, 16, 32, 64, 127, 1, 2, 4, 8, 16, 32, 64, 127, 1, 2, 4, 8, 16, 32, 64, 127, 1, 2, 4, 8, 16, 32, 64, 127, 1, 2, 4, 8, 16, 32, 64, 127}), + ((__m512i)(__v64qs){-2, -3, -5, -9, -17, -33, -65, -128, -2, -3, -5, -9, -17, -33, -65, -128, -2, -3, -5, -9, -17, -33, -65, -128, -2, -3, -5, -9, -17, -33, -65, -128, -2, -3, -5, -9, -17, -33, -65, -128, -2, -3, -5, -9, -17, -33, -65, -128, -2, -3, -5, -9, -17, -33, -65, -128, -2, -3, -5, -9, -17, -33, -65, -128}) +) == (__mmask64)0x5555555555555555); + __mmask32 test_mm512_testn_epi16_mask(__m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_testn_epi16_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} @@ -2919,6 +2952,11 @@ __mmask32 test_mm512_testn_epi16_mask(__m512i __A, __m512i __B) { return _mm512_testn_epi16_mask(__A, __B); } +TEST_CONSTEXPR(_mm512_testn_epi16_mask( + ((__m512i)(__v32hi){1, 2, 4, 8, 16, 32, 64, 127, 1, 2, 4, 8, 16, 32, 64, 127, 1, 2, 4, 8, 16, 32, 64, 127, 1, 2, 4, 8, 16, 32, 64, 127}), + ((__m512i)(__v32hi){-2, -3, -5, -9, -17, -33, -65, -128, -2, -3, -5, -9, -17, -33, -65, -128, -2, -3, -5, -9, -17, -33, -65, -128, -2, -3, -5, -9, -17, -33, -65, -128}) +) == (__mmask32)0xffffffff); + __mmask32 test_mm512_mask_testn_epi16_mask(__mmask32 __U, __m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_mask_testn_epi16_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} @@ -2927,6 +2965,12 @@ __mmask32 test_mm512_mask_testn_epi16_mask(__mmask32 __U, __m512i __A, __m512i _ return _mm512_mask_testn_epi16_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm512_mask_testn_epi16_mask( + (__mmask32)0x55555555, + ((__m512i)(__v32hi){-199, 7714, -208, -1362, 209, 9551, 167, -774, 72, 9352, 33, -7329, -169, -8586, 139, 97, 66, -4065, -173, 6613, -89, -476, -124, -7227, 7, -7438, -198, -2009, 14, -942, -5, 9905}), + ((__m512i)(__v32hi){20634, 19106, -6623, 2494, 25733, -30897, 16385, 5374, -8135, 2537, -12516, 31487, -10307, 7543, -4838, -7817, 8275, 13535, -17882, -12545, 29549, 19070, 5415, 16607, -31893, -23049, 6730, -2321, 4674, -25250, 12393, -17739}) +) == (__mmask32)0x00000400); + __mmask64 test_mm512_movepi8_mask(__m512i __A) { // CHECK-LABEL: test_mm512_movepi8_mask // CHECK: [[CMP:%.*]] = icmp slt <64 x i8> %{{.*}}, zeroinitializer diff --git a/clang/test/CodeGen/X86/avx512f-builtins.c b/clang/test/CodeGen/X86/avx512f-builtins.c index af6d86ced584..249a917a0046 100644 --- a/clang/test/CodeGen/X86/avx512f-builtins.c +++ b/clang/test/CodeGen/X86/avx512f-builtins.c @@ -5887,6 +5887,18 @@ TEST_CONSTEXPR(match_m512d( (__m512d){101.0, 102.0, 103.0, 104.0, 105.0, 106.0, 107.0, 108.0}), 1.0, 108.0, 1.0, 8.0, 2.0, 2.0, 3.0, 3.0)); +__mmask16 test_mm512_test_epi32_mask(__m512i __A, __m512i __B) { + // CHECK-LABEL: test_mm512_test_epi32_mask + // CHECK: and <16 x i32> %{{.*}}, %{{.*}} + // CHECK: icmp ne <16 x i32> %{{.*}}, %{{.*}} + return _mm512_test_epi32_mask(__A, __B); +} + +TEST_CONSTEXPR(_mm512_test_epi32_mask( + ((__m512i)(__v16si){12, 25, 38, 51, 64, 77, 90, 103, 116, 129, 142, 155, 168, 181, 194, 207}), + ((__m512i)(__v16si){4, 0, 6, 0, 8, 0, 10, 0, 12, 0, 14, 0, 16, 0, 18, 0}) +) == (__mmask16)0x4545); + __mmask16 test_mm512_testn_epi32_mask(__m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_testn_epi32_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} @@ -5894,6 +5906,11 @@ __mmask16 test_mm512_testn_epi32_mask(__m512i __A, __m512i __B) { return _mm512_testn_epi32_mask(__A, __B); } +TEST_CONSTEXPR(_mm512_testn_epi32_mask( + ((__m512i)(__v16si){1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}), + ((__m512i)(__v16si){1, 0, 2, 0, 1, 0, 2, 0, 1, 0, 2, 0, 1, 0, 2, 0}) +) == (__mmask16)0xaaaa); + __mmask16 test_mm512_mask_testn_epi32_mask(__mmask16 __U, __m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_mask_testn_epi32_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} @@ -5902,13 +5919,36 @@ __mmask16 test_mm512_mask_testn_epi32_mask(__mmask16 __U, __m512i __A, __m512i _ return _mm512_mask_testn_epi32_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm512_mask_testn_epi32_mask( + (__mmask16)0x00ff, + ((__m512i)(__v16si){2887, -199459, -5595, 207077, 53140, -229505, 7854, -45521, -10031, -69855, 26898, 1398, -21387, -337371, -20689, 295044}), + ((__m512i)(__v16si){-727662, 249055, -763143, 32741, 185776, 665855, 590967, 546559, 777954, 233715, 203962, 969215, 325997, 230077, -119727, 260598}) +) == (__mmask16)0x0000); + +__mmask8 test_mm512_test_epi64_mask(__m512i __A, __m512i __B) { + // CHECK-LABEL: test_mm512_test_epi64_mask + // CHECK: and <16 x i32> %{{.*}}, %{{.*}} + // CHECK: icmp ne <8 x i64> %{{.*}}, %{{.*}} + return _mm512_test_epi64_mask(__A, __B); +} + +TEST_CONSTEXPR(_mm512_test_epi64_mask( + ((__m512i)(__v8di){-50, -45408, -221, 16141, 88, -79206, 213, -76258}), + ((__m512i)(__v8di){50312, 547813, -35606, 176877, 98239, 732863, 64269, 141183}) +) == (__mmask8)0xff); + __mmask8 test_mm512_testn_epi64_mask(__m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_testn_epi64_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}} - return _mm512_testn_epi64_mask(__A, __B); + return _mm512_testn_epi64_mask(__A, __B); } +TEST_CONSTEXPR(_mm512_testn_epi64_mask( + ((__m512i)(__v8di){-50, -45408, -221, 16141, 88, -79206, 213, -76258}), + ((__m512i)(__v8di){50312, 547813, -35606, 176877, 98239, 732863, 64269, 141183}) +) == (__mmask8)0x00); + __mmask8 test_mm512_mask_testn_epi64_mask(__mmask8 __U, __m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_mask_testn_epi64_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} @@ -5917,6 +5957,12 @@ __mmask8 test_mm512_mask_testn_epi64_mask(__mmask8 __U, __m512i __A, __m512i __B return _mm512_mask_testn_epi64_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm512_mask_testn_epi64_mask( + (__mmask8)0x55, + ((__m512i)(__v8di){-19, 65680, -249, -68576, 11, -39009, 2, -2654}), + ((__m512i)(__v8di){33489, 895378, -75114, 849966, -38304, 974303, 54148, 154851}) +) == (__mmask8)0x50); + __mmask16 test_mm512_mask_test_epi32_mask (__mmask16 __U, __m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_mask_test_epi32_mask @@ -5925,6 +5971,12 @@ __mmask16 test_mm512_mask_test_epi32_mask (__mmask16 __U, __m512i __A, __m512i _ return _mm512_mask_test_epi32_mask (__U,__A,__B); } +TEST_CONSTEXPR(_mm512_mask_test_epi32_mask( + (__mmask16)0x00ff, + ((__m512i)(__v16si){2887, -199459, -5595, 207077, 53140, -229505, 7854, -45521, -10031, -69855, 26898, 1398, -21387, -337371, -20689, 295044}), + ((__m512i)(__v16si){-727662, 249055, -763143, 32741, 185776, 665855, 590967, 546559, 777954, 233715, 203962, 969215, 325997, 230077, -119727, 260598}) +) == (__mmask16)0x00ff); + __mmask8 test_mm512_mask_test_epi64_mask (__mmask8 __U, __m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_mask_test_epi64_mask @@ -5934,6 +5986,12 @@ __mmask8 test_mm512_mask_test_epi64_mask (__mmask8 __U, __m512i __A, __m512i __B return _mm512_mask_test_epi64_mask (__U,__A,__B); } +TEST_CONSTEXPR(_mm512_mask_test_epi64_mask( + (__mmask8)0x55, + ((__m512i)(__v8di){-19, 65680, -249, -68576, 11, -39009, 2, -2654}), + ((__m512i)(__v8di){33489, 895378, -75114, 849966, -38304, 974303, 54148, 154851}) +) == (__mmask8)0x05); + __m512i test_mm512_maskz_unpackhi_epi32(__mmask16 __U, __m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_maskz_unpackhi_epi32 // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> diff --git a/clang/test/CodeGen/X86/avx512vl-builtins.c b/clang/test/CodeGen/X86/avx512vl-builtins.c index 4a685c5474dc..7d42943d68ca 100644 --- a/clang/test/CodeGen/X86/avx512vl-builtins.c +++ b/clang/test/CodeGen/X86/avx512vl-builtins.c @@ -8313,6 +8313,11 @@ __mmask8 test_mm_test_epi32_mask(__m128i __A, __m128i __B) { return _mm_test_epi32_mask(__A, __B); } +TEST_CONSTEXPR(_mm_test_epi32_mask( + ((__m128i)(__v4si){0, -109, 61, -125}), + ((__m128i)(__v4si){-110, -109, 24, 112}) +) == (__mmask8)0x6); + __mmask8 test_mm_mask_test_epi32_mask(__mmask8 __U, __m128i __A, __m128i __B) { // CHECK-LABEL: test_mm_mask_test_epi32_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} @@ -8321,6 +8326,12 @@ __mmask8 test_mm_mask_test_epi32_mask(__mmask8 __U, __m128i __A, __m128i __B) { return _mm_mask_test_epi32_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm_mask_test_epi32_mask( + (__mmask8)0xc, + ((__m128i)(__v4si){70, 14, 98, -97}), + ((__m128i)(__v4si){70, -109, 75, -97}) +) == (__mmask8)0xc); + __mmask8 test_mm256_test_epi32_mask(__m256i __A, __m256i __B) { // CHECK-LABEL: test_mm256_test_epi32_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} @@ -8328,6 +8339,11 @@ __mmask8 test_mm256_test_epi32_mask(__m256i __A, __m256i __B) { return _mm256_test_epi32_mask(__A, __B); } +TEST_CONSTEXPR(_mm256_test_epi32_mask( + ((__m256i)(__v8si){80, -8, -96, 29, -30, 124, 32, -108}), + ((__m256i)(__v8si){-80, 81, -52, 29, 29, 124, 127, 108}) +) == (__mmask8)0xef); + __mmask8 test_mm256_mask_test_epi32_mask(__mmask8 __U, __m256i __A, __m256i __B) { // CHECK-LABEL: test_mm256_mask_test_epi32_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} @@ -8336,6 +8352,12 @@ __mmask8 test_mm256_mask_test_epi32_mask(__mmask8 __U, __m256i __A, __m256i __B) return _mm256_mask_test_epi32_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm256_mask_test_epi32_mask( + (__mmask8)0xb9, + ((__m256i)(__v8si){63, 102, 65, 107, 31, -24, -109, 113}), + ((__m256i)(__v8si){-64, -102, 65, -8, 31, -50, 108, -98}) +) == (__mmask8)0xb8); + __mmask8 test_mm_test_epi64_mask(__m128i __A, __m128i __B) { // CHECK-LABEL: test_mm_test_epi64_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} @@ -8343,6 +8365,11 @@ __mmask8 test_mm_test_epi64_mask(__m128i __A, __m128i __B) { return _mm_test_epi64_mask(__A, __B); } +TEST_CONSTEXPR(_mm_test_epi64_mask( + ((__m128i)(__v2di){33698, -44147}), + ((__m128i)(__v2di){56499, -20755}) +) == (__mmask8)0x3); + __mmask8 test_mm_mask_test_epi64_mask(__mmask8 __U, __m128i __A, __m128i __B) { // CHECK-LABEL: test_mm_mask_test_epi64_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} @@ -8351,6 +8378,12 @@ __mmask8 test_mm_mask_test_epi64_mask(__mmask8 __U, __m128i __A, __m128i __B) { return _mm_mask_test_epi64_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm_mask_test_epi64_mask( + (__mmask8)0x2, + ((__m128i)(__v2di){-124, -2299}), + ((__m128i)(__v2di){86100, 552445}) +) == (__mmask8)0x2); + __mmask8 test_mm256_test_epi64_mask(__m256i __A, __m256i __B) { // CHECK-LABEL: test_mm256_test_epi64_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} @@ -8358,6 +8391,11 @@ __mmask8 test_mm256_test_epi64_mask(__m256i __A, __m256i __B) { return _mm256_test_epi64_mask(__A, __B); } +TEST_CONSTEXPR(_mm256_test_epi64_mask( + ((__m256i)(__v4di){-70, -11203, -19, -69143}), + ((__m256i)(__v4di){-55003, 22655, -63728, 326379}) +) == (__mmask8)0xf); + __mmask8 test_mm256_mask_test_epi64_mask(__mmask8 __U, __m256i __A, __m256i __B) { // CHECK-LABEL: test_mm256_mask_test_epi64_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} @@ -8366,6 +8404,12 @@ __mmask8 test_mm256_mask_test_epi64_mask(__mmask8 __U, __m256i __A, __m256i __B) return _mm256_mask_test_epi64_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm256_mask_test_epi64_mask( + (__mmask8)0xa, + ((__m256i)(__v4di){24, -44260, 200, -37960}), + ((__m256i)(__v4di){5806, 30268, -78192, 758524}) +) == (__mmask8)0xa); + __mmask8 test_mm_testn_epi32_mask(__m128i __A, __m128i __B) { // CHECK-LABEL: test_mm_testn_epi32_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} @@ -8373,6 +8417,11 @@ __mmask8 test_mm_testn_epi32_mask(__m128i __A, __m128i __B) { return _mm_testn_epi32_mask(__A, __B); } +TEST_CONSTEXPR(_mm_testn_epi32_mask( + ((__m128i)(__v4si){9711, 247117, -39835, 93758}), + ((__m128i)(__v4si){-774681, 693085, 256884, 609599}) +) == (__mmask8)0x0); + __mmask8 test_mm_mask_testn_epi32_mask(__mmask8 __U, __m128i __A, __m128i __B) { // CHECK-LABEL: test_mm_mask_testn_epi32_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} @@ -8381,6 +8430,12 @@ __mmask8 test_mm_mask_testn_epi32_mask(__mmask8 __U, __m128i __A, __m128i __B) { return _mm_mask_testn_epi32_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm_mask_testn_epi32_mask( + (__mmask8)0xf0, + ((__m128i)(__v4si){13807, 5601, 45363, -64113}), + ((__m128i)(__v4si){140515, 221935, -127957, 67775}) +) == (__mmask8)0x0); + __mmask8 test_mm256_testn_epi32_mask(__m256i __A, __m256i __B) { // CHECK-LABEL: test_mm256_testn_epi32_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} @@ -8388,6 +8443,11 @@ __mmask8 test_mm256_testn_epi32_mask(__m256i __A, __m256i __B) { return _mm256_testn_epi32_mask(__A, __B); } +TEST_CONSTEXPR(_mm256_testn_epi32_mask( + ((__m256i)(__v8si){40445, 245961, 61407, 263397, 56243, -139540, 8675, -450842}), + ((__m256i)(__v8si){-960187, 506335, 818314, 32765, 104115, 783086, -339212, 377838}) +) == (__mmask8)0x00); + __mmask8 test_mm256_mask_testn_epi32_mask(__mmask8 __U, __m256i __A, __m256i __B) { // CHECK-LABEL: test_mm256_mask_testn_epi32_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} @@ -8396,6 +8456,12 @@ __mmask8 test_mm256_mask_testn_epi32_mask(__mmask8 __U, __m256i __A, __m256i __B return _mm256_mask_testn_epi32_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm256_mask_testn_epi32_mask( + (__mmask8)0xf0, + ((__m256i)(__v8si){37022, 426122, 41425, -140420, 52378, 242117, 39078, 192582}), + ((__m256i)(__v8si){-440264, 968190, 640358, 596732, -676272, 446165, 987171, 953551}) +) == (__mmask8)0x00); + __mmask8 test_mm_testn_epi64_mask(__m128i __A, __m128i __B) { // CHECK-LABEL: test_mm_testn_epi64_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} @@ -8403,6 +8469,11 @@ __mmask8 test_mm_testn_epi64_mask(__m128i __A, __m128i __B) { return _mm_testn_epi64_mask(__A, __B); } +TEST_CONSTEXPR(_mm_testn_epi64_mask( + ((__m128i)(__v2di){8, -95314}), + ((__m128i)(__v2di){85958, 501758}) +) == (__mmask8)0x1); + __mmask8 test_mm_mask_testn_epi64_mask(__mmask8 __U, __m128i __A, __m128i __B) { // CHECK-LABEL: test_mm_mask_testn_epi64_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} @@ -8411,6 +8482,12 @@ __mmask8 test_mm_mask_testn_epi64_mask(__mmask8 __U, __m128i __A, __m128i __B) { return _mm_mask_testn_epi64_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm_mask_testn_epi64_mask( + (__mmask8)0x2, + ((__m128i)(__v2di){-124, -2299}), + ((__m128i)(__v2di){86100, 552445}) +) == (__mmask8)0x0); + __mmask8 test_mm256_testn_epi64_mask(__m256i __A, __m256i __B) { // CHECK-LABEL: test_mm256_testn_epi64_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} @@ -8418,6 +8495,11 @@ __mmask8 test_mm256_testn_epi64_mask(__m256i __A, __m256i __B) { return _mm256_testn_epi64_mask(__A, __B); } +TEST_CONSTEXPR(_mm256_testn_epi64_mask( + ((__m256i)(__v4di){-70, -11203, -19, -69143}), + ((__m256i)(__v4di){-55003, 22655, -63728, 326379}) +) == (__mmask8)0x0); + __mmask8 test_mm256_mask_testn_epi64_mask(__mmask8 __U, __m256i __A, __m256i __B) { // CHECK-LABEL: test_mm256_mask_testn_epi64_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} @@ -8426,6 +8508,12 @@ __mmask8 test_mm256_mask_testn_epi64_mask(__mmask8 __U, __m256i __A, __m256i __B return _mm256_mask_testn_epi64_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm256_mask_testn_epi64_mask( + (__mmask8)0xa, + ((__m256i)(__v4di){24, -44260, 200, -37960}), + ((__m256i)(__v4di){5806, 30268, -78192, 758524}) +) == (__mmask8)0x0); + __m128i test_mm_mask_unpackhi_epi32(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { // CHECK-LABEL: test_mm_mask_unpackhi_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> diff --git a/clang/test/CodeGen/X86/avx512vlbw-builtins.c b/clang/test/CodeGen/X86/avx512vlbw-builtins.c index 9f70f4639b4a..0ee14909ae80 100644 --- a/clang/test/CodeGen/X86/avx512vlbw-builtins.c +++ b/clang/test/CodeGen/X86/avx512vlbw-builtins.c @@ -3094,6 +3094,12 @@ __mmask32 test_mm256_mask_test_epi8_mask(__mmask32 __U, __m256i __A, __m256i __B return _mm256_mask_test_epi8_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm256_mask_test_epi8_mask( + (__mmask32)0xb367f726, + ((__m256i)(__v32qs){78, -1, -104, -14, -4, -40, -90, -76, -61, 79, 2, -107, 87, -81, 119, 10, 9, -52, -1, -7, -91, 125, 125, -48, -47, -99, -65, -127, 66, -68, -3, 15}), + ((__m256i)(__v32qs){-79, 55, 24, 68, 3, 118, 43, -10, 68, -80, 112, 106, 84, -30, 119, 41, 79, 51, 1, 74, 84, -125, -125, 29, -112, 99, -65, 11, -67, 97, 3, 15}) +) == (__mmask32)0xa365f126); + __mmask8 test_mm_test_epi16_mask(__m128i __A, __m128i __B) { // CHECK-LABEL: test_mm_test_epi16_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} @@ -3101,6 +3107,11 @@ __mmask8 test_mm_test_epi16_mask(__m128i __A, __m128i __B) { return _mm_test_epi16_mask(__A, __B); } +TEST_CONSTEXPR(_mm_test_epi16_mask( + ((__m128i)(__v8hi){108, -67, -74, 111, 44, 88, -116, -73}), + ((__m128i)(__v8hi){-108, -67, -40, -112, 6, 88, -64, -73}) +) == (__mmask8)0xf7); + __mmask8 test_mm_mask_test_epi16_mask(__mmask8 __U, __m128i __A, __m128i __B) { // CHECK-LABEL: test_mm_mask_test_epi16_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} @@ -3109,6 +3120,12 @@ __mmask8 test_mm_mask_test_epi16_mask(__mmask8 __U, __m128i __A, __m128i __B) { return _mm_mask_test_epi16_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm_mask_test_epi16_mask( + (__mmask8)0x6f, + ((__m128i)(__v8hi){-2, 84, -122, 120, 95, -51, -60, 60}), + ((__m128i)(__v8hi){-83, 110, 9, 45, 62, 50, 59, -61}) +) == (__mmask8)0x0b); + __mmask16 test_mm256_test_epi16_mask(__m256i __A, __m256i __B) { // CHECK-LABEL: test_mm256_test_epi16_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} @@ -3116,6 +3133,11 @@ __mmask16 test_mm256_test_epi16_mask(__m256i __A, __m256i __B) { return _mm256_test_epi16_mask(__A, __B); } +TEST_CONSTEXPR(_mm256_test_epi16_mask( + ((__m256i)(__v16hi){25, -91, 71, -13, 4, 108, 32, 8, 119, 75, -32, 80, -31, 67, -103, 25}), + ((__m256i)(__v16hi){-26, 90, 71, -13, 4, -108, -32, 9, 87, -104, 110, 68, -31, 18, 35, -59}) +) == (__mmask16)0xfffc); + __mmask16 test_mm256_mask_test_epi16_mask(__mmask16 __U, __m256i __A, __m256i __B) { // CHECK-LABEL: test_mm256_mask_test_epi16_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} @@ -3124,6 +3146,12 @@ __mmask16 test_mm256_mask_test_epi16_mask(__mmask16 __U, __m256i __A, __m256i __ return _mm256_mask_test_epi16_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm256_mask_test_epi16_mask( + (__mmask16)0x97f3, + ((__m256i)(__v16hi){-27, -10, 93, -45, -26, 104, 30, -95, -74, -65, -34, 78, 17, 10, 0, 125}), + ((__m256i)(__v16hi){70, -10, -94, -46, -26, -104, -30, -64, 73, 64, 34, -78, -102, -11, 96, 125}) +) == (__mmask16)0x94f3); + __mmask16 test_mm_testn_epi8_mask(__m128i __A, __m128i __B) { // CHECK-LABEL: test_mm_testn_epi8_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} @@ -3145,6 +3173,12 @@ __mmask16 test_mm_mask_testn_epi8_mask(__mmask16 __U, __m128i __A, __m128i __B) return _mm_mask_testn_epi8_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm_mask_testn_epi8_mask( + (__mmask16)0x0f73, + ((__m128i)(__v16qs){8, 87, 65, 48, -23, 81, 125, 58, 13, -36, -108, -109, -14, 43, 15, -117}), + ((__m128i)(__v16qs){-78, 87, -66, -112, -84, -2, 125, 58, 87, 36, -64, -30, -109, -44, -15, 116}) +) == (__mmask16)0x0001); + __mmask32 test_mm256_testn_epi8_mask(__m256i __A, __m256i __B) { // CHECK-LABEL: test_mm256_testn_epi8_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} @@ -3152,6 +3186,11 @@ __mmask32 test_mm256_testn_epi8_mask(__m256i __A, __m256i __B) { return _mm256_testn_epi8_mask(__A, __B); } +TEST_CONSTEXPR(_mm256_testn_epi8_mask( + ((__m256i)(__v32qs){-65, 65, -79, -126, -99, -29, -85, -77, -71, 109, 68, -106, -44, 15, -56, -64, -38, -64, 1, -71, -83, -37, -99, 74, 76, -127, 32, 65, -26, -48, 115, 47}), + ((__m256i)(__v32qs){-118, 65, -79, 98, 99, 28, -84, -15, -71, 109, -68, 114, 17, -101, 56, 63, 38, 63, -108, 70, -83, 36, -4, -74, -99, -27, -51, -66, -120, 83, -31, -48}) +) == (__mmask32)0x8c2e8020); + __mmask32 test_mm256_mask_testn_epi8_mask(__mmask32 __U, __m256i __A, __m256i __B) { // CHECK-LABEL: test_mm256_mask_testn_epi8_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} @@ -3160,6 +3199,12 @@ __mmask32 test_mm256_mask_testn_epi8_mask(__mmask32 __U, __m256i __A, __m256i __ return _mm256_mask_testn_epi8_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm256_mask_testn_epi8_mask( + (__mmask32)0xb367f726, + ((__m256i)(__v32qs){78, -1, -104, -14, -4, -40, -90, -76, -61, 79, 2, -107, 87, -81, 119, 10, 9, -52, -1, -7, -91, 125, 125, -48, -47, -99, -65, -127, 66, -68, -3, 15}), + ((__m256i)(__v32qs){-79, 55, 24, 68, 3, 118, 43, -10, 68, -80, 112, 106, 84, -30, 119, 41, 79, 51, 1, 74, 84, -125, -125, 29, -112, 99, -65, 11, -67, 97, 3, 15}) +) == (__mmask32)0x10020600); + __mmask8 test_mm_testn_epi16_mask(__m128i __A, __m128i __B) { // CHECK-LABEL: test_mm_testn_epi16_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} @@ -3167,6 +3212,12 @@ __mmask8 test_mm_testn_epi16_mask(__m128i __A, __m128i __B) { return _mm_testn_epi16_mask(__A, __B); } +TEST_CONSTEXPR(_mm_testn_epi16_mask( + ((__m128i)(__v8hi){108, -67, -74, 111, 44, 88, -116, -73}), + ((__m128i)(__v8hi){-108, -67, -40, -112, 6, 88, -64, -73}) +) == (__mmask8)0x08); + + __mmask8 test_mm_mask_testn_epi16_mask(__mmask8 __U, __m128i __A, __m128i __B) { // CHECK-LABEL: test_mm_mask_testn_epi16_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} @@ -3175,6 +3226,12 @@ __mmask8 test_mm_mask_testn_epi16_mask(__mmask8 __U, __m128i __A, __m128i __B) { return _mm_mask_testn_epi16_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm_mask_testn_epi16_mask( + (__mmask8)0x6f, + ((__m128i)(__v8hi){-2, 84, -122, 120, 95, -51, -60, 60}), + ((__m128i)(__v8hi){-83, 110, 9, 45, 62, 50, 59, -61}) +) == (__mmask8)0x64); + __mmask16 test_mm256_testn_epi16_mask(__m256i __A, __m256i __B) { // CHECK-LABEL: test_mm256_testn_epi16_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} @@ -3182,6 +3239,11 @@ __mmask16 test_mm256_testn_epi16_mask(__m256i __A, __m256i __B) { return _mm256_testn_epi16_mask(__A, __B); } +TEST_CONSTEXPR(_mm256_testn_epi16_mask( + ((__m256i)(__v16hi){25, -91, 71, -13, 4, 108, 32, 8, 119, 75, -32, 80, -31, 67, -103, 25}), + ((__m256i)(__v16hi){-26, 90, 71, -13, 4, -108, -32, 9, 87, -104, 110, 68, -31, 18, 35, -59}) +) == (__mmask16)0x0003); + __mmask16 test_mm256_mask_testn_epi16_mask(__mmask16 __U, __m256i __A, __m256i __B) { // CHECK-LABEL: test_mm256_mask_testn_epi16_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} @@ -3190,6 +3252,12 @@ __mmask16 test_mm256_mask_testn_epi16_mask(__mmask16 __U, __m256i __A, __m256i _ return _mm256_mask_testn_epi16_mask(__U, __A, __B); } +TEST_CONSTEXPR(_mm256_mask_testn_epi16_mask( + (__mmask16)0x97f3, + ((__m256i)(__v16hi){-27, -10, 93, -45, -26, 104, 30, -95, -74, -65, -34, 78, 17, 10, 0, 125}), + ((__m256i)(__v16hi){70, -10, -94, -46, -26, -104, -30, -64, 73, 64, 34, -78, -102, -11, 96, 125}) +) == (__mmask16)0x0300); + __mmask16 test_mm_movepi8_mask(__m128i __A) { // CHECK-LABEL: test_mm_movepi8_mask // CHECK: [[CMP:%.*]] = icmp slt <16 x i8> %{{.*}}, zeroinitializer