1 // PR target/88152
2 // { dg-do compile }
3 // { dg-options "-O2 -mavx2 -std=c++11" }
4 // { dg-final { scan-assembler-times "vpmovmskb\[^\n\r]*xmm" 6 } }
5 // { dg-final { scan-assembler-times "vpmovmskb\[^\n\r]*ymm" 6 } }
6 // { dg-final { scan-assembler-times "vmovmskps\[^\n\r]*xmm" 4 } }
7 // { dg-final { scan-assembler-times "vmovmskps\[^\n\r]*ymm" 4 } }
8 // { dg-final { scan-assembler-times "vmovmskpd\[^\n\r]*xmm" 4 } }
9 // { dg-final { scan-assembler-times "vmovmskpd\[^\n\r]*ymm" 4 } }
10 // { dg-final { scan-assembler-not "vpcmpgt|vpcmpeq|vpsra" } }
11 
12 #include <x86intrin.h>
13 
14 template <typename T, size_t N>
15 using V [[gnu::vector_size(N)]] = T;
16 
f0(V<unsigned char,16> a)17 int f0 (V<unsigned char, 16> a) { return _mm_movemask_epi8 (reinterpret_cast<__m128i> (a > 0x7f)); }
f1(V<unsigned char,16> a)18 long int f1 (V<unsigned char, 16> a) { return (unsigned) _mm_movemask_epi8 (reinterpret_cast<__m128i> (a >= 0x80)); }
f2(V<signed char,16> a)19 long int f2 (V<signed char, 16> a) { return (unsigned) _mm_movemask_epi8 (reinterpret_cast<__m128i> (a < 0)); }
f3(V<signed char,16> a)20 int f3 (V<signed char, 16> a) { return _mm_movemask_epi8 (reinterpret_cast<__m128i> (a <= -1)); }
f4(V<char,16> a)21 int f4 (V<char, 16> a) { return _mm_movemask_epi8 (reinterpret_cast<__m128i> (a < 0)); }
f5(V<char,16> a)22 long int f5 (V<char, 16> a) { return (unsigned) _mm_movemask_epi8 (reinterpret_cast<__m128i> (a <= -1)); }
f6(V<unsigned int,16> a)23 int f6 (V<unsigned int, 16> a) { return _mm_movemask_ps (reinterpret_cast<__m128> (a > __INT_MAX__)); }
f7(V<unsigned int,16> a)24 int f7 (V<unsigned int, 16> a) { return _mm_movemask_ps (reinterpret_cast<__m128> (a >= 1U + __INT_MAX__)); }
f8(V<int,16> a)25 int f8 (V<int, 16> a) { return _mm_movemask_ps (reinterpret_cast<__m128> (a < 0)); }
f9(V<int,16> a)26 int f9 (V<int, 16> a) { return _mm_movemask_ps (reinterpret_cast<__m128> (a <= -1)); }
f10(V<unsigned long long,16> a)27 int f10 (V<unsigned long long, 16> a) { return _mm_movemask_pd (reinterpret_cast<__m128d> (a > __LONG_LONG_MAX__)); }
f11(V<unsigned long long,16> a)28 int f11 (V<unsigned long long, 16> a) { return _mm_movemask_pd (reinterpret_cast<__m128d> (a >= 1ULL + __LONG_LONG_MAX__)); }
f12(V<long long,16> a)29 long int f12 (V<long long, 16> a) { return (unsigned) _mm_movemask_pd (reinterpret_cast<__m128d> (a < 0)); }
f13(V<long long,16> a)30 int f13 (V<long long, 16> a) { return _mm_movemask_pd (reinterpret_cast<__m128d> (a <= -1)); }
f14(V<unsigned char,32> a)31 int f14 (V<unsigned char, 32> a) { return _mm256_movemask_epi8 (reinterpret_cast<__m256i> (a > 0x7f)); }
f15(V<unsigned char,32> a)32 int f15 (V<unsigned char, 32> a) { return _mm256_movemask_epi8 (reinterpret_cast<__m256i> (a >= 0x80)); }
f16(V<signed char,32> a)33 long int f16 (V<signed char, 32> a) { return (unsigned) _mm256_movemask_epi8 (reinterpret_cast<__m256i> (a < 0)); }
f17(V<signed char,32> a)34 int f17 (V<signed char, 32> a) { return _mm256_movemask_epi8 (reinterpret_cast<__m256i> (a <= -1)); }
f18(V<char,32> a)35 int f18 (V<char, 32> a) { return _mm256_movemask_epi8 (reinterpret_cast<__m256i> (a < 0)); }
f19(V<char,32> a)36 int f19 (V<char, 32> a) { return _mm256_movemask_epi8 (reinterpret_cast<__m256i> (a <= -1)); }
f20(V<unsigned int,32> a)37 long int f20 (V<unsigned int, 32> a) { return (unsigned) _mm256_movemask_ps (reinterpret_cast<__m256> (a > __INT_MAX__)); }
f21(V<unsigned int,32> a)38 int f21 (V<unsigned int, 32> a) { return _mm256_movemask_ps (reinterpret_cast<__m256> (a >= 1U + __INT_MAX__)); }
f22(V<int,32> a)39 int f22 (V<int, 32> a) { return _mm256_movemask_ps (reinterpret_cast<__m256> (a < 0)); }
f23(V<int,32> a)40 int f23 (V<int, 32> a) { return _mm256_movemask_ps (reinterpret_cast<__m256> (a <= -1)); }
f24(V<unsigned long long,32> a)41 int f24 (V<unsigned long long, 32> a) { return _mm256_movemask_pd (reinterpret_cast<__m256d> (a > __LONG_LONG_MAX__)); }
f25(V<unsigned long long,32> a)42 int f25 (V<unsigned long long, 32> a) { return _mm256_movemask_pd (reinterpret_cast<__m256d> (a >= 1ULL + __LONG_LONG_MAX__)); }
f26(V<long long,32> a)43 int f26 (V<long long, 32> a) { return _mm256_movemask_pd (reinterpret_cast<__m256d> (a < 0)); }
f27(V<long long,32> a)44 long int f27 (V<long long, 32> a) { return (unsigned) _mm256_movemask_pd (reinterpret_cast<__m256d> (a <= -1)); }
45