From 1b44c52de64a95094f85abfa1e968b0132f4c568 Mon Sep 17 00:00:00 2001 From: Michael Zuckerman Date: Tue, 10 May 2016 11:34:19 +0000 Subject: [PATCH] [Clang][AVX512] completing missing intrinsics [vmin/vmax]{sd|sq|uq|ud}. Differential Revision: http://reviews.llvm.org/D20064 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@269042 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Headers/avx512fintrin.h | 146 +++++++++++++++++++++++++++++++- test/CodeGen/avx512f-builtins.c | 113 +++++++++++++++++++++++- 2 files changed, 257 insertions(+), 2 deletions(-) diff --git a/lib/Headers/avx512fintrin.h b/lib/Headers/avx512fintrin.h index 1eccd4c5fd..8abb756fa2 100644 --- a/lib/Headers/avx512fintrin.h +++ b/lib/Headers/avx512fintrin.h @@ -848,7 +848,7 @@ _mm_maskz_max_sd(__mmask8 __U,__m128d __A, __m128d __B) { (__m128d) __builtin_ia32_maxsd_round_mask ((__v2df) __A, (__v2df) __B, \ (__v2df) _mm_setzero_pd(), (__mmask8) __U,__R); }) -static __inline __m512i +static __inline __m512i __DEFAULT_FN_ATTRS _mm512_max_epi32(__m512i __A, __m512i __B) { @@ -859,6 +859,24 @@ _mm512_max_epi32(__m512i __A, __m512i __B) (__mmask16) -1); } +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_mask_max_epi32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pmaxsd512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) __W, __M); +} + +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_maskz_max_epi32 (__mmask16 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pmaxsd512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) + _mm512_setzero_si512 (), + __M); +} + static __inline __m512i __DEFAULT_FN_ATTRS _mm512_max_epu32(__m512i __A, __m512i __B) { @@ -869,6 +887,24 @@ _mm512_max_epu32(__m512i __A, __m512i __B) (__mmask16) -1); } +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_mask_max_epu32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pmaxud512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) __W, __M); +} + +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_maskz_max_epu32 (__mmask16 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pmaxud512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) + _mm512_setzero_si512 (), + __M); +} + static __inline __m512i __DEFAULT_FN_ATTRS _mm512_max_epi64(__m512i __A, __m512i __B) { @@ -879,6 +915,24 @@ _mm512_max_epi64(__m512i __A, __m512i __B) (__mmask8) -1); } +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_mask_max_epi64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pmaxsq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) __W, __M); +} + +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_maskz_max_epi64 (__mmask8 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pmaxsq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) + _mm512_setzero_si512 (), + __M); +} + static __inline __m512i __DEFAULT_FN_ATTRS _mm512_max_epu64(__m512i __A, __m512i __B) { @@ -889,6 +943,24 @@ _mm512_max_epu64(__m512i __A, __m512i __B) (__mmask8) -1); } +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_mask_max_epu64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pmaxuq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) __W, __M); +} + +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_maskz_max_epu64 (__mmask8 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pmaxuq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) + _mm512_setzero_si512 (), + __M); +} + static __inline__ __m512d __DEFAULT_FN_ATTRS _mm512_min_pd(__m512d __A, __m512d __B) { @@ -1024,6 +1096,24 @@ _mm512_min_epi32(__m512i __A, __m512i __B) (__mmask16) -1); } +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_mask_min_epi32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pminsd512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) __W, __M); +} + +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_maskz_min_epi32 (__mmask16 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pminsd512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) + _mm512_setzero_si512 (), + __M); +} + static __inline __m512i __DEFAULT_FN_ATTRS _mm512_min_epu32(__m512i __A, __m512i __B) { @@ -1034,6 +1124,24 @@ _mm512_min_epu32(__m512i __A, __m512i __B) (__mmask16) -1); } +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_mask_min_epu32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pminud512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) __W, __M); +} + +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_maskz_min_epu32 (__mmask16 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pminud512_mask ((__v16si) __A, + (__v16si) __B, + (__v16si) + _mm512_setzero_si512 (), + __M); +} + static __inline __m512i __DEFAULT_FN_ATTRS _mm512_min_epi64(__m512i __A, __m512i __B) { @@ -1044,6 +1152,24 @@ _mm512_min_epi64(__m512i __A, __m512i __B) (__mmask8) -1); } +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_mask_min_epi64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pminsq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) __W, __M); +} + +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_maskz_min_epi64 (__mmask8 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pminsq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) + _mm512_setzero_si512 (), + __M); +} + static __inline __m512i __DEFAULT_FN_ATTRS _mm512_min_epu64(__m512i __A, __m512i __B) { @@ -1054,6 +1180,24 @@ _mm512_min_epu64(__m512i __A, __m512i __B) (__mmask8) -1); } +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_mask_min_epu64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pminuq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) __W, __M); +} + +static __inline__ __m512i __DEFAULT_FN_ATTRS +_mm512_maskz_min_epu64 (__mmask8 __M, __m512i __A, __m512i __B) +{ + return (__m512i) __builtin_ia32_pminuq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) + _mm512_setzero_si512 (), + __M); +} + static __inline __m512i __DEFAULT_FN_ATTRS _mm512_mul_epi32(__m512i __X, __m512i __Y) { diff --git a/test/CodeGen/avx512f-builtins.c b/test/CodeGen/avx512f-builtins.c index 58795a2f19..079c4d0cfc 100644 --- a/test/CodeGen/avx512f-builtins.c +++ b/test/CodeGen/avx512f-builtins.c @@ -5990,7 +5990,6 @@ __m512i test_mm512_mask_cvtps_epu32 (__m512i __W, __mmask16 __U, __m512 __A) return _mm512_mask_cvtps_epu32( __W, __U, __A); } - __m512d test_mm512_mask_max_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { // CHECK-LABEL: @test_mm512_mask_max_pd @@ -6102,3 +6101,115 @@ __m512d test_mm512_maskz_roundscale_pd(__mmask8 __U, __m512d __A) // CHECK: @llvm.x86.avx512.mask.rndscale.pd.512 return _mm512_maskz_roundscale_pd(__U,__A, 1); } + +__m512i test_mm512_mask_max_epi32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_mask_max_epi32 + // CHECK: @llvm.x86.avx512.mask.pmaxs.d.512 + return _mm512_mask_max_epi32 (__W,__M,__A,__B); +} + +__m512i test_mm512_maskz_max_epi32 (__mmask16 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_maskz_max_epi32 + // CHECK: @llvm.x86.avx512.mask.pmaxs.d.512 + return _mm512_maskz_max_epi32 (__M,__A,__B); +} + +__m512i test_mm512_mask_max_epi64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_mask_max_epi64 + // CHECK: @llvm.x86.avx512.mask.pmaxs.q.512 + return _mm512_mask_max_epi64 (__W,__M,__A,__B); +} + +__m512i test_mm512_maskz_max_epi64 (__mmask8 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_maskz_max_epi64 + // CHECK: @llvm.x86.avx512.mask.pmaxs.q.512 + return _mm512_maskz_max_epi64 (__M,__A,__B); +} + +__m512i test_mm512_mask_max_epu64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_mask_max_epu64 + // CHECK: @llvm.x86.avx512.mask.pmaxu.q.512 + return _mm512_mask_max_epu64 (__W,__M,__A,__B); +} + +__m512i test_mm512_maskz_max_epu64 (__mmask8 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_maskz_max_epu64 + // CHECK: @llvm.x86.avx512.mask.pmaxu.q.512 + return _mm512_maskz_max_epu64 (__M,__A,__B); +} + +__m512i test_mm512_mask_max_epu32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_mask_max_epu32 + // CHECK: @llvm.x86.avx512.mask.pmaxu.d.512 + return _mm512_mask_max_epu32 (__W,__M,__A,__B); +} + +__m512i test_mm512_maskz_max_epu32 (__mmask16 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_maskz_max_epu32 + // CHECK: @llvm.x86.avx512.mask.pmaxu.d.512 + return _mm512_maskz_max_epu32 (__M,__A,__B); +} + +__m512i test_mm512_mask_min_epi32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_mask_min_epi32 + // CHECK: @llvm.x86.avx512.mask.pmins.d.512 + return _mm512_mask_min_epi32 (__W,__M,__A,__B); +} + +__m512i test_mm512_maskz_min_epi32 (__mmask16 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_maskz_min_epi32 + // CHECK: @llvm.x86.avx512.mask.pmins.d.512 + return _mm512_maskz_min_epi32 (__M,__A,__B); +} + +__m512i test_mm512_mask_min_epu32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_mask_min_epu32 + // CHECK: @llvm.x86.avx512.mask.pminu.d.512 + return _mm512_mask_min_epu32 (__W,__M,__A,__B); +} + +__m512i test_mm512_maskz_min_epu32 (__mmask16 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_maskz_min_epu32 + // CHECK: @llvm.x86.avx512.mask.pminu.d.512 + return _mm512_maskz_min_epu32 (__M,__A,__B); +} + +__m512i test_mm512_mask_min_epi64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_mask_min_epi64 + // CHECK: @llvm.x86.avx512.mask.pmins.q.512 + return _mm512_mask_min_epi64 (__W,__M,__A,__B); +} + +__m512i test_mm512_maskz_min_epi64 (__mmask8 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_maskz_min_epi64 + // CHECK: @llvm.x86.avx512.mask.pmins.q.512 + return _mm512_maskz_min_epi64 (__M,__A,__B); +} + +__m512i test_mm512_mask_min_epu64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_mask_min_epu64 + // CHECK: @llvm.x86.avx512.mask.pminu.q.512 + return _mm512_mask_min_epu64 (__W,__M,__A,__B); +} + +__m512i test_mm512_maskz_min_epu64 (__mmask8 __M, __m512i __A, __m512i __B) +{ + // CHECK-LABEL: @test_mm512_maskz_min_epu64 + // CHECK: @llvm.x86.avx512.mask.pminu.q.512 + return _mm512_maskz_min_epu64 (__M,__A,__B); +} -- 2.40.0