diff options
| author | Craig Topper <craig.topper@gmail.com> | 2016-06-13 04:15:11 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@gmail.com> | 2016-06-13 04:15:11 +0000 |
| commit | fc07498e4aca8a94dea665a786d7509a60ffeb59 (patch) | |
| tree | 857e590e7a4ce0acd5c932c25abf72736be2211b | |
| parent | 27c72d2fdb40f9aad28c18bc4e1bfd91c86db55c (diff) | |
| download | bcm5719-llvm-fc07498e4aca8a94dea665a786d7509a60ffeb59.tar.gz bcm5719-llvm-fc07498e4aca8a94dea665a786d7509a60ffeb59.zip | |
[AVX512] Masked pcmpeqd, pcmpeqq, pcmpgtd, and pcmpgtq don't require avx512bw, just avx512vl.
llvm-svn: 272532
| -rw-r--r-- | clang/include/clang/Basic/BuiltinsX86.def | 16 | ||||
| -rw-r--r-- | clang/lib/Headers/avx512vlintrin.h | 34 | ||||
| -rw-r--r-- | clang/test/CodeGen/avx512vl-builtins.c | 96 |
3 files changed, 120 insertions, 26 deletions
diff --git a/clang/include/clang/Basic/BuiltinsX86.def b/clang/include/clang/Basic/BuiltinsX86.def index e8537ee22bd..b2ea3c6db7c 100644 --- a/clang/include/clang/Basic/BuiltinsX86.def +++ b/clang/include/clang/Basic/BuiltinsX86.def @@ -939,12 +939,12 @@ TARGET_BUILTIN(__builtin_ia32_pcmpeqq512_mask, "cV8LLiV8LLic", "", "avx512f") TARGET_BUILTIN(__builtin_ia32_pcmpeqw512_mask, "iV32sV32si", "", "avx512bw") TARGET_BUILTIN(__builtin_ia32_pcmpeqb256_mask, "iV32cV32ci", "", "avx512vl,avx512bw") -TARGET_BUILTIN(__builtin_ia32_pcmpeqd256_mask, "cV8iV8ic", "", "avx512vl,avx512bw") -TARGET_BUILTIN(__builtin_ia32_pcmpeqq256_mask, "cV4LLiV4LLic", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpeqd256_mask, "cV8iV8ic", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pcmpeqq256_mask, "cV4LLiV4LLic", "", "avx512vl") TARGET_BUILTIN(__builtin_ia32_pcmpeqw256_mask, "sV16sV16ss", "", "avx512vl,avx512bw") TARGET_BUILTIN(__builtin_ia32_pcmpeqb128_mask, "sV16cV16cs", "", "avx512vl,avx512bw") -TARGET_BUILTIN(__builtin_ia32_pcmpeqd128_mask, "cV4iV4ic", "", "avx512vl,avx512bw") -TARGET_BUILTIN(__builtin_ia32_pcmpeqq128_mask, "cV2LLiV2LLic", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpeqd128_mask, "cV4iV4ic", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pcmpeqq128_mask, "cV2LLiV2LLic", "", "avx512vl") TARGET_BUILTIN(__builtin_ia32_pcmpeqw128_mask, "cV8sV8sc", "", "avx512vl,avx512bw") TARGET_BUILTIN(__builtin_ia32_pcmpgtb512_mask, "LLiV64cV64cLLi", "", "avx512bw") @@ -953,12 +953,12 @@ TARGET_BUILTIN(__builtin_ia32_pcmpgtq512_mask, "cV8LLiV8LLic", "", "avx512f") TARGET_BUILTIN(__builtin_ia32_pcmpgtw512_mask, "iV32sV32si", "", "avx512bw") TARGET_BUILTIN(__builtin_ia32_pcmpgtb256_mask, "iV32cV32ci", "", "avx512vl,avx512bw") -TARGET_BUILTIN(__builtin_ia32_pcmpgtd256_mask, "cV8iV8ic", "", "avx512vl,avx512bw") -TARGET_BUILTIN(__builtin_ia32_pcmpgtq256_mask, "cV4LLiV4LLic", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpgtd256_mask, "cV8iV8ic", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pcmpgtq256_mask, "cV4LLiV4LLic", "", "avx512vl") TARGET_BUILTIN(__builtin_ia32_pcmpgtw256_mask, "sV16sV16ss", "", "avx512vl,avx512bw") TARGET_BUILTIN(__builtin_ia32_pcmpgtb128_mask, "sV16cV16cs", "", "avx512vl,avx512bw") -TARGET_BUILTIN(__builtin_ia32_pcmpgtd128_mask, "cV4iV4ic", "", "avx512vl,avx512bw") -TARGET_BUILTIN(__builtin_ia32_pcmpgtq128_mask, "cV2LLiV2LLic", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpgtd128_mask, "cV4iV4ic", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pcmpgtq128_mask, "cV2LLiV2LLic", "", "avx512vl") TARGET_BUILTIN(__builtin_ia32_pcmpgtw128_mask, "cV8sV8sc", "", "avx512vl,avx512bw") TARGET_BUILTIN(__builtin_ia32_cmppd512_mask, "UcV8dV8dIiUcIi", "", "avx512f") diff --git a/clang/lib/Headers/avx512vlintrin.h b/clang/lib/Headers/avx512vlintrin.h index 830be8d1590..c03821f5996 100644 --- a/clang/lib/Headers/avx512vlintrin.h +++ b/clang/lib/Headers/avx512vlintrin.h @@ -29,7 +29,6 @@ #define __AVX512VLINTRIN_H #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vl"))) -#define __DEFAULT_FN_ATTRS_BOTH __attribute__((__always_inline__, __nodebug__, __target__("avx512vl, avx512bw"))) static __inline __v2di __DEFAULT_FN_ATTRS _mm_setzero_di(void) { @@ -38,13 +37,13 @@ _mm_setzero_di(void) { /* Integer compare */ -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm_cmpeq_epi32_mask(__m128i __a, __m128i __b) { return (__mmask8)__builtin_ia32_pcmpeqd128_mask((__v4si)__a, (__v4si)__b, (__mmask8)-1); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm_mask_cmpeq_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { return (__mmask8)__builtin_ia32_pcmpeqd128_mask((__v4si)__a, (__v4si)__b, __u); @@ -62,13 +61,13 @@ _mm_mask_cmpeq_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { __u); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm256_cmpeq_epi32_mask(__m256i __a, __m256i __b) { return (__mmask8)__builtin_ia32_pcmpeqd256_mask((__v8si)__a, (__v8si)__b, (__mmask8)-1); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm256_mask_cmpeq_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { return (__mmask8)__builtin_ia32_pcmpeqd256_mask((__v8si)__a, (__v8si)__b, __u); @@ -86,13 +85,13 @@ _mm256_mask_cmpeq_epu32_mask(__mmask8 __u, __m256i __a, __m256i __b) { __u); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm_cmpeq_epi64_mask(__m128i __a, __m128i __b) { return (__mmask8)__builtin_ia32_pcmpeqq128_mask((__v2di)__a, (__v2di)__b, (__mmask8)-1); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm_mask_cmpeq_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { return (__mmask8)__builtin_ia32_pcmpeqq128_mask((__v2di)__a, (__v2di)__b, __u); @@ -110,13 +109,13 @@ _mm_mask_cmpeq_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { __u); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm256_cmpeq_epi64_mask(__m256i __a, __m256i __b) { return (__mmask8)__builtin_ia32_pcmpeqq256_mask((__v4di)__a, (__v4di)__b, (__mmask8)-1); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm256_mask_cmpeq_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { return (__mmask8)__builtin_ia32_pcmpeqq256_mask((__v4di)__a, (__v4di)__b, __u); @@ -231,13 +230,13 @@ _mm256_mask_cmpge_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) { __u); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm_cmpgt_epi32_mask(__m128i __a, __m128i __b) { return (__mmask8)__builtin_ia32_pcmpgtd128_mask((__v4si)__a, (__v4si)__b, (__mmask8)-1); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm_mask_cmpgt_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { return (__mmask8)__builtin_ia32_pcmpgtd128_mask((__v4si)__a, (__v4si)__b, __u); @@ -255,13 +254,13 @@ _mm_mask_cmpgt_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { __u); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm256_cmpgt_epi32_mask(__m256i __a, __m256i __b) { return (__mmask8)__builtin_ia32_pcmpgtd256_mask((__v8si)__a, (__v8si)__b, (__mmask8)-1); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm256_mask_cmpgt_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { return (__mmask8)__builtin_ia32_pcmpgtd256_mask((__v8si)__a, (__v8si)__b, __u); @@ -279,13 +278,13 @@ _mm256_mask_cmpgt_epu32_mask(__mmask8 __u, __m256i __a, __m256i __b) { __u); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm_cmpgt_epi64_mask(__m128i __a, __m128i __b) { return (__mmask8)__builtin_ia32_pcmpgtq128_mask((__v2di)__a, (__v2di)__b, (__mmask8)-1); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm_mask_cmpgt_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { return (__mmask8)__builtin_ia32_pcmpgtq128_mask((__v2di)__a, (__v2di)__b, __u); @@ -303,13 +302,13 @@ _mm_mask_cmpgt_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { __u); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm256_cmpgt_epi64_mask(__m256i __a, __m256i __b) { return (__mmask8)__builtin_ia32_pcmpgtq256_mask((__v4di)__a, (__v4di)__b, (__mmask8)-1); } -static __inline__ __mmask8 __DEFAULT_FN_ATTRS_BOTH +static __inline__ __mmask8 __DEFAULT_FN_ATTRS _mm256_mask_cmpgt_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { return (__mmask8)__builtin_ia32_pcmpgtq256_mask((__v4di)__a, (__v4di)__b, __u); @@ -9427,6 +9426,5 @@ _mm256_maskz_cvtps_ph ( __mmask8 __U, __m256 __A) #undef __DEFAULT_FN_ATTRS -#undef __DEFAULT_FN_ATTRS_BOTH #endif /* __AVX512VLINTRIN_H */ diff --git a/clang/test/CodeGen/avx512vl-builtins.c b/clang/test/CodeGen/avx512vl-builtins.c index 958f4a206df..f7375523dc2 100644 --- a/clang/test/CodeGen/avx512vl-builtins.c +++ b/clang/test/CodeGen/avx512vl-builtins.c @@ -6738,3 +6738,99 @@ __m128i test_mm256_maskz_cvt_roundps_ph(__mmask8 __U, __m256 __A) { // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.256 return _mm256_maskz_cvt_roundps_ph(__U, __A, _MM_FROUND_CUR_DIRECTION); } + +__mmask8 test_mm_cmpeq_epi32_mask(__m128i __a, __m128i __b) { + // CHECK-LABEL: @test_mm_cmpeq_epi32_mask + // CHECK: @llvm.x86.avx512.mask.pcmpeq.d.128 + return (__mmask8)_mm_cmpeq_epi32_mask(__a, __b); +} + +__mmask8 test_mm_mask_cmpeq_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { + // CHECK-LABEL: @test_mm_mask_cmpeq_epi32_mask + // CHECK: @llvm.x86.avx512.mask.pcmpeq.d.128 + return (__mmask8)_mm_mask_cmpeq_epi32_mask(__u, __a, __b); +} + +__mmask8 test_mm_mask_cmpeq_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { + // CHECK-LABEL: @test_mm_mask_cmpeq_epi64_mask + // CHECK: @llvm.x86.avx512.mask.pcmpeq.q.128 + return (__mmask8)_mm_mask_cmpeq_epi64_mask(__u, __a, __b); +} + +__mmask8 test_mm_cmpeq_epi64_mask(__m128i __a, __m128i __b) { + // CHECK-LABEL: @test_mm_cmpeq_epi64_mask + // CHECK: @llvm.x86.avx512.mask.pcmpeq.q.128 + return (__mmask8)_mm_cmpeq_epi64_mask(__a, __b); +} + +__mmask8 test_mm_cmpgt_epi32_mask(__m128i __a, __m128i __b) { + // CHECK-LABEL: @test_mm_cmpgt_epi32_mask + // CHECK: @llvm.x86.avx512.mask.pcmpgt.d.128 + return (__mmask8)_mm_cmpgt_epi32_mask(__a, __b); +} + +__mmask8 test_mm_mask_cmpgt_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { + // CHECK-LABEL: @test_mm_mask_cmpgt_epi32_mask + // CHECK: @llvm.x86.avx512.mask.pcmpgt.d.128 + return (__mmask8)_mm_mask_cmpgt_epi32_mask(__u, __a, __b); +} + +__mmask8 test_mm_mask_cmpgt_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { + // CHECK-LABEL: @test_mm_mask_cmpgt_epi64_mask + // CHECK: @llvm.x86.avx512.mask.pcmpgt.q.128 + return (__mmask8)_mm_mask_cmpgt_epi64_mask(__u, __a, __b); +} + +__mmask8 test_mm_cmpgt_epi64_mask(__m128i __a, __m128i __b) { + // CHECK-LABEL: @test_mm_cmpgt_epi64_mask + // CHECK: @llvm.x86.avx512.mask.pcmpgt.q.128 + return (__mmask8)_mm_cmpgt_epi64_mask(__a, __b); +} + +__mmask8 test_mm256_cmpeq_epi32_mask(__m256i __a, __m256i __b) { + // CHECK-LABEL: @test_mm256_cmpeq_epi32_mask + // CHECK: @llvm.x86.avx512.mask.pcmpeq.d.256 + return (__mmask8)_mm256_cmpeq_epi32_mask(__a, __b); +} + +__mmask8 test_mm256_mask_cmpeq_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { + // CHECK-LABEL: @test_mm256_mask_cmpeq_epi32_mask + // CHECK: @llvm.x86.avx512.mask.pcmpeq.d.256 + return (__mmask8)_mm256_mask_cmpeq_epi32_mask(__u, __a, __b); +} + +__mmask8 test_mm256_mask_cmpeq_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { + // CHECK-LABEL: @test_mm256_mask_cmpeq_epi64_mask + // CHECK: @llvm.x86.avx512.mask.pcmpeq.q.256 + return (__mmask8)_mm256_mask_cmpeq_epi64_mask(__u, __a, __b); +} + +__mmask8 test_mm256_cmpeq_epi64_mask(__m256i __a, __m256i __b) { + // CHECK-LABEL: @test_mm256_cmpeq_epi64_mask + // CHECK: @llvm.x86.avx512.mask.pcmpeq.q.256 + return (__mmask8)_mm256_cmpeq_epi64_mask(__a, __b); +} + +__mmask8 test_mm256_cmpgt_epi32_mask(__m256i __a, __m256i __b) { + // CHECK-LABEL: @test_mm256_cmpgt_epi32_mask + // CHECK: @llvm.x86.avx512.mask.pcmpgt.d.256 + return (__mmask8)_mm256_cmpgt_epi32_mask(__a, __b); +} + +__mmask8 test_mm256_mask_cmpgt_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { + // CHECK-LABEL: @test_mm256_mask_cmpgt_epi32_mask + // CHECK: @llvm.x86.avx512.mask.pcmpgt.d.256 + return (__mmask8)_mm256_mask_cmpgt_epi32_mask(__u, __a, __b); +} + +__mmask8 test_mm256_mask_cmpgt_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { + // CHECK-LABEL: @test_mm256_mask_cmpgt_epi64_mask + // CHECK: @llvm.x86.avx512.mask.pcmpgt.q.256 + return (__mmask8)_mm256_mask_cmpgt_epi64_mask(__u, __a, __b); +} + +__mmask8 test_mm256_cmpgt_epi64_mask(__m256i __a, __m256i __b) { + // CHECK-LABEL: @test_mm256_cmpgt_epi64_mask + // CHECK: @llvm.x86.avx512.mask.pcmpgt.q.256 + return (__mmask8)_mm256_cmpgt_epi64_mask(__a, __b); +} |

