diff options
| author | Craig Topper <craig.topper@intel.com> | 2018-05-14 17:50:40 +0000 | 
|---|---|---|
| committer | Craig Topper <craig.topper@intel.com> | 2018-05-14 17:50:40 +0000 | 
| commit | 25de41cfbcb6e374a244ac4c9f76c74e669459fd (patch) | |
| tree | 58ea32aba0123d940e60cdde5f3b37db242c6332 /clang/test/CodeGen/avx512f-builtins.c | |
| parent | 64a2ea41eaca32a6ba66db6b699ca33b2eee095b (diff) | |
| download | bcm5719-llvm-25de41cfbcb6e374a244ac4c9f76c74e669459fd.tar.gz bcm5719-llvm-25de41cfbcb6e374a244ac4c9f76c74e669459fd.zip | |
[X86] Use __builtin_convertvector to replace some of the avx512 truncate builtins.
As long as the destination type is a 256 or 128 bit vector with the same number of elements we can use __builtin_convertvector to directly generate trunc IR instruction which will be handled natively by the backend.
Differential Revision: https://reviews.llvm.org/D46742
llvm-svn: 332266
Diffstat (limited to 'clang/test/CodeGen/avx512f-builtins.c')
| -rw-r--r-- | clang/test/CodeGen/avx512f-builtins.c | 32 | 
1 files changed, 20 insertions, 12 deletions
| diff --git a/clang/test/CodeGen/avx512f-builtins.c b/clang/test/CodeGen/avx512f-builtins.c index b84740d9345..3b053f87621 100644 --- a/clang/test/CodeGen/avx512f-builtins.c +++ b/clang/test/CodeGen/avx512f-builtins.c @@ -5102,19 +5102,21 @@ void test_mm512_mask_cvtusepi64_storeu_epi16(void *__P, __mmask8 __M, __m512i __  __m128i test_mm512_cvtepi32_epi8(__m512i __A) {    // CHECK-LABEL: @test_mm512_cvtepi32_epi8 -  // CHECK: @llvm.x86.avx512.mask.pmov.db.512 +  // CHECK: trunc <16 x i32> %{{.*}} to <16 x i8>    return _mm512_cvtepi32_epi8(__A);   }  __m128i test_mm512_mask_cvtepi32_epi8(__m128i __O, __mmask16 __M, __m512i __A) {    // CHECK-LABEL: @test_mm512_mask_cvtepi32_epi8 -  // CHECK: @llvm.x86.avx512.mask.pmov.db.512 +  // CHECK: trunc <16 x i32> %{{.*}} to <16 x i8> +  // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}    return _mm512_mask_cvtepi32_epi8(__O, __M, __A);   }  __m128i test_mm512_maskz_cvtepi32_epi8(__mmask16 __M, __m512i __A) {    // CHECK-LABEL: @test_mm512_maskz_cvtepi32_epi8 -  // CHECK: @llvm.x86.avx512.mask.pmov.db.512 +  // CHECK: trunc <16 x i32> %{{.*}} to <16 x i8> +  // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}    return _mm512_maskz_cvtepi32_epi8(__M, __A);   } @@ -5126,19 +5128,21 @@ void test_mm512_mask_cvtepi32_storeu_epi8(void * __P, __mmask16 __M, __m512i __A  __m256i test_mm512_cvtepi32_epi16(__m512i __A) {    // CHECK-LABEL: @test_mm512_cvtepi32_epi16 -  // CHECK: @llvm.x86.avx512.mask.pmov.dw.512 +  // CHECK: trunc <16 x i32> %{{.*}} to <16 x i16>    return _mm512_cvtepi32_epi16(__A);   }  __m256i test_mm512_mask_cvtepi32_epi16(__m256i __O, __mmask16 __M, __m512i __A) {    // CHECK-LABEL: @test_mm512_mask_cvtepi32_epi16 -  // CHECK: @llvm.x86.avx512.mask.pmov.dw.512 +  // CHECK: trunc <16 x i32> %{{.*}} to <16 x i16> +  // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}    return _mm512_mask_cvtepi32_epi16(__O, __M, __A);   }  __m256i test_mm512_maskz_cvtepi32_epi16(__mmask16 __M, __m512i __A) {    // CHECK-LABEL: @test_mm512_maskz_cvtepi32_epi16 -  // CHECK: @llvm.x86.avx512.mask.pmov.dw.512 +  // CHECK: trunc <16 x i32> %{{.*}} to <16 x i16> +  // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}    return _mm512_maskz_cvtepi32_epi16(__M, __A);   } @@ -5174,19 +5178,21 @@ void test_mm512_mask_cvtepi64_storeu_epi8(void * __P, __mmask8 __M, __m512i __A)  __m256i test_mm512_cvtepi64_epi32(__m512i __A) {    // CHECK-LABEL: @test_mm512_cvtepi64_epi32 -  // CHECK: @llvm.x86.avx512.mask.pmov.qd.512 +  // CHECK: trunc <8 x i64> %{{.*}} to <8 x i32>    return _mm512_cvtepi64_epi32(__A);   }  __m256i test_mm512_mask_cvtepi64_epi32(__m256i __O, __mmask8 __M, __m512i __A) {    // CHECK-LABEL: @test_mm512_mask_cvtepi64_epi32 -  // CHECK: @llvm.x86.avx512.mask.pmov.qd.512 +  // CHECK: trunc <8 x i64> %{{.*}} to <8 x i32> +  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}    return _mm512_mask_cvtepi64_epi32(__O, __M, __A);   }  __m256i test_mm512_maskz_cvtepi64_epi32(__mmask8 __M, __m512i __A) {    // CHECK-LABEL: @test_mm512_maskz_cvtepi64_epi32 -  // CHECK: @llvm.x86.avx512.mask.pmov.qd.512 +  // CHECK: trunc <8 x i64> %{{.*}} to <8 x i32> +  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}    return _mm512_maskz_cvtepi64_epi32(__M, __A);   } @@ -5198,19 +5204,21 @@ void test_mm512_mask_cvtepi64_storeu_epi32(void* __P, __mmask8 __M, __m512i __A)  __m128i test_mm512_cvtepi64_epi16(__m512i __A) {    // CHECK-LABEL: @test_mm512_cvtepi64_epi16 -  // CHECK: @llvm.x86.avx512.mask.pmov.qw.512 +  // CHECK: trunc <8 x i64> %{{.*}} to <8 x i16>    return _mm512_cvtepi64_epi16(__A);   }  __m128i test_mm512_mask_cvtepi64_epi16(__m128i __O, __mmask8 __M, __m512i __A) {    // CHECK-LABEL: @test_mm512_mask_cvtepi64_epi16 -  // CHECK: @llvm.x86.avx512.mask.pmov.qw.512 +  // CHECK: trunc <8 x i64> %{{.*}} to <8 x i16> +  // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}    return _mm512_mask_cvtepi64_epi16(__O, __M, __A);   }  __m128i test_mm512_maskz_cvtepi64_epi16(__mmask8 __M, __m512i __A) {    // CHECK-LABEL: @test_mm512_maskz_cvtepi64_epi16 -  // CHECK: @llvm.x86.avx512.mask.pmov.qw.512 +  // CHECK: trunc <8 x i64> %{{.*}} to <8 x i16> +  // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}    return _mm512_maskz_cvtepi64_epi16(__M, __A);   } | 

