diff options
| author | Asaf Badouh <asaf.badouh@intel.com> | 2016-08-07 10:43:04 +0000 |
|---|---|---|
| committer | Asaf Badouh <asaf.badouh@intel.com> | 2016-08-07 10:43:04 +0000 |
| commit | 2f344b788c68613489499a5aca9bd8eff61aa67d (patch) | |
| tree | 52dec6ae9cb2fe399e6c1fc769c90e904d0e92e7 /clang | |
| parent | 2fabdcc60ac50da4ac550199a642615968f312a7 (diff) | |
| download | bcm5719-llvm-2f344b788c68613489499a5aca9bd8eff61aa67d.tar.gz bcm5719-llvm-2f344b788c68613489499a5aca9bd8eff61aa67d.zip | |
[AVX512] integer comparisions enumeration.
fix Bug 28842 https://llvm.org/bugs/show_bug.cgi?id=28842
Differential Revision: https://reviews.llvm.org/D22212
llvm-svn: 277955
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Headers/avx512fintrin.h | 13 | ||||
| -rw-r--r-- | clang/test/CodeGen/avx512f-builtins.c | 24 | ||||
| -rw-r--r-- | clang/test/CodeGen/avx512vl-builtins.c | 54 |
3 files changed, 52 insertions, 39 deletions
diff --git a/clang/lib/Headers/avx512fintrin.h b/clang/lib/Headers/avx512fintrin.h index 2395233d252..a159d42edbd 100644 --- a/clang/lib/Headers/avx512fintrin.h +++ b/clang/lib/Headers/avx512fintrin.h @@ -54,6 +54,19 @@ typedef unsigned short __mmask16; #define _MM_FROUND_TO_ZERO 0x03 #define _MM_FROUND_CUR_DIRECTION 0x04 +/* Constants for integer comparison predicates */ +typedef enum { + _MM_CMPINT_EQ, /* Equal */ + _MM_CMPINT_LT, /* Less than */ + _MM_CMPINT_LE, /* Less than or Equal */ + _MM_CMPINT_UNUSED, + _MM_CMPINT_NE, /* Not Equal */ + _MM_CMPINT_NLT, /* Not Less than */ +#define _MM_CMPINT_GE _MM_CMPINT_NLT /* Greater than or Equal */ + _MM_CMPINT_NLE /* Not Less than or Equal */ +#define _MM_CMPINT_GT _MM_CMPINT_NLE /* Greater than */ +} _MM_CMPINT_ENUM; + typedef enum { _MM_PERM_AAAA = 0x00, _MM_PERM_AAAB = 0x01, _MM_PERM_AAAC = 0x02, diff --git a/clang/test/CodeGen/avx512f-builtins.c b/clang/test/CodeGen/avx512f-builtins.c index 029299c6aa6..a51a485620e 100644 --- a/clang/test/CodeGen/avx512f-builtins.c +++ b/clang/test/CodeGen/avx512f-builtins.c @@ -1342,30 +1342,30 @@ __mmask8 test_mm512_mask_cmpneq_epu64_mask(__mmask8 __u, __m512i __a, __m512i __ return (__mmask8)_mm512_mask_cmpneq_epu64_mask(__u, __a, __b); } -__mmask16 test_mm512_cmp_epi32_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmp_epi32_mask +__mmask16 test_mm512_cmp_eq_epi32_mask(__m512i __a, __m512i __b) { + // CHECK-LABEL: @test_mm512_cmp_eq_epi32_mask // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}} - return (__mmask16)_mm512_cmp_epi32_mask(__a, __b, 0); + return (__mmask16)_mm512_cmp_epi32_mask(__a, __b, _MM_CMPINT_EQ); } -__mmask16 test_mm512_mask_cmp_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmp_epi32_mask +__mmask16 test_mm512_mask_cmp_eq_epi32_mask(__mmask16 __u, __m512i __a, __m512i __b) { + // CHECK-LABEL: @test_mm512_mask_cmp_eq_epi32_mask // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} - return (__mmask16)_mm512_mask_cmp_epi32_mask(__u, __a, __b, 0); + return (__mmask16)_mm512_mask_cmp_epi32_mask(__u, __a, __b, _MM_CMPINT_EQ); } -__mmask8 test_mm512_cmp_epi64_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmp_epi64_mask +__mmask8 test_mm512_cmp_eq_epi64_mask(__m512i __a, __m512i __b) { + // CHECK-LABEL: @test_mm512_cmp_eq_epi64_mask // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}} - return (__mmask8)_mm512_cmp_epi64_mask(__a, __b, 0); + return (__mmask8)_mm512_cmp_epi64_mask(__a, __b, _MM_CMPINT_EQ); } -__mmask8 test_mm512_mask_cmp_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmp_epi64_mask +__mmask8 test_mm512_mask_cmp_eq_epi64_mask(__mmask8 __u, __m512i __a, __m512i __b) { + // CHECK-LABEL: @test_mm512_mask_cmp_eq_epi64_mask // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} - return (__mmask8)_mm512_mask_cmp_epi64_mask(__u, __a, __b, 0); + return (__mmask8)_mm512_mask_cmp_epi64_mask(__u, __a, __b, _MM_CMPINT_EQ); } __mmask16 test_mm512_cmp_epu32_mask(__m512i __a, __m512i __b) { diff --git a/clang/test/CodeGen/avx512vl-builtins.c b/clang/test/CodeGen/avx512vl-builtins.c index 791cb441d04..d9031fe1680 100644 --- a/clang/test/CodeGen/avx512vl-builtins.c +++ b/clang/test/CodeGen/avx512vl-builtins.c @@ -501,56 +501,56 @@ __mmask8 test_mm256_mask_cmpneq_epu64_mask(__mmask8 __u, __m256i __a, __m256i __ return (__mmask8)_mm256_mask_cmpneq_epu64_mask(__u, __a, __b); } -__mmask8 test_mm_cmp_epi32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmp_epi32_mask +__mmask8 test_mm_cmp_eq_epi32_mask(__m128i __a, __m128i __b) { + // CHECK-LABEL: @test_mm_cmp_eq_epi32_mask // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}} - return (__mmask8)_mm_cmp_epi32_mask(__a, __b, 0); + return (__mmask8)_mm_cmp_epi32_mask(__a, __b, _MM_CMPINT_EQ); } -__mmask8 test_mm_mask_cmp_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmp_epi32_mask - // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}} +__mmask8 test_mm_mask_cmp_lt_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { + // CHECK-LABEL: @test_mm_mask_cmp_lt_epi32_mask + // CHECK: icmp slt <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} - return (__mmask8)_mm_mask_cmp_epi32_mask(__u, __a, __b, 0); + return (__mmask8)_mm_mask_cmp_epi32_mask(__u, __a, __b, _MM_CMPINT_LT); } -__mmask8 test_mm_cmp_epi64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmp_epi64_mask - // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}} - return (__mmask8)_mm_cmp_epi64_mask(__a, __b, 0); +__mmask8 test_mm_cmp_lt_epi64_mask(__m128i __a, __m128i __b) { + // CHECK-LABEL: @test_mm_cmp_lt_epi64_mask + // CHECK: icmp slt <2 x i64> %{{.*}}, %{{.*}} + return (__mmask8)_mm_cmp_epi64_mask(__a, __b, _MM_CMPINT_LT); } -__mmask8 test_mm_mask_cmp_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmp_epi64_mask +__mmask8 test_mm_mask_cmp_eq_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { + // CHECK-LABEL: @test_mm_mask_cmp_eq_epi64_mask // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} - return (__mmask8)_mm_mask_cmp_epi64_mask(__u, __a, __b, 0); + return (__mmask8)_mm_mask_cmp_epi64_mask(__u, __a, __b, _MM_CMPINT_EQ); } -__mmask8 test_mm256_cmp_epi32_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmp_epi32_mask +__mmask8 test_mm256_cmp_eq_epi32_mask(__m256i __a, __m256i __b) { + // CHECK-LABEL: @test_mm256_cmp_eq_epi32_mask // CHECK: icmp eq <8 x i32> %{{.*}}, %{{.*}} - return (__mmask8)_mm256_cmp_epi32_mask(__a, __b, 0); + return (__mmask8)_mm256_cmp_epi32_mask(__a, __b, _MM_CMPINT_EQ); } -__mmask8 test_mm256_mask_cmp_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmp_epi32_mask - // CHECK: icmp eq <8 x i32> %{{.*}}, %{{.*}} +__mmask8 test_mm256_mask_cmp_le_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { + // CHECK-LABEL: @test_mm256_mask_cmp_le_epi32_mask + // CHECK: icmp sle <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} - return (__mmask8)_mm256_mask_cmp_epi32_mask(__u, __a, __b, 0); + return (__mmask8)_mm256_mask_cmp_epi32_mask(__u, __a, __b, _MM_CMPINT_LE); } -__mmask8 test_mm256_cmp_epi64_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmp_epi64_mask +__mmask8 test_mm256_cmp_eq_epi64_mask(__m256i __a, __m256i __b) { + // CHECK-LABEL: @test_mm256_cmp_eq_epi64_mask // CHECK: icmp eq <4 x i64> %{{.*}}, %{{.*}} - return (__mmask8)_mm256_cmp_epi64_mask(__a, __b, 0); + return (__mmask8)_mm256_cmp_epi64_mask(__a, __b, _MM_CMPINT_EQ); } -__mmask8 test_mm256_mask_cmp_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmp_epi64_mask +__mmask8 test_mm256_mask_cmp_eq_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { + // CHECK-LABEL: @test_mm256_mask_cmp_eq_epi64_mask // CHECK: icmp eq <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} - return (__mmask8)_mm256_mask_cmp_epi64_mask(__u, __a, __b, 0); + return (__mmask8)_mm256_mask_cmp_epi64_mask(__u, __a, __b, _MM_CMPINT_EQ); } __mmask8 test_mm_cmp_epu32_mask(__m128i __a, __m128i __b) { |

