summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2018-05-14 17:50:40 +0000
committerCraig Topper <craig.topper@intel.com>2018-05-14 17:50:40 +0000
commit25de41cfbcb6e374a244ac4c9f76c74e669459fd (patch)
tree58ea32aba0123d940e60cdde5f3b37db242c6332 /clang/test
parent64a2ea41eaca32a6ba66db6b699ca33b2eee095b (diff)
downloadbcm5719-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')
-rw-r--r--clang/test/CodeGen/avx512bw-builtins.c8
-rw-r--r--clang/test/CodeGen/avx512f-builtins.c32
-rw-r--r--clang/test/CodeGen/avx512vl-builtins.c16
-rw-r--r--clang/test/CodeGen/avx512vlbw-builtins.c8
4 files changed, 40 insertions, 24 deletions
diff --git a/clang/test/CodeGen/avx512bw-builtins.c b/clang/test/CodeGen/avx512bw-builtins.c
index bb644c44239..ee2ae6ad294 100644
--- a/clang/test/CodeGen/avx512bw-builtins.c
+++ b/clang/test/CodeGen/avx512bw-builtins.c
@@ -1107,19 +1107,21 @@ __m256i test_mm512_maskz_cvtusepi16_epi8(__mmask32 __M, __m512i __A) {
__m256i test_mm512_cvtepi16_epi8(__m512i __A) {
// CHECK-LABEL: @test_mm512_cvtepi16_epi8
- // CHECK: @llvm.x86.avx512.mask.pmov.wb.512
+ // CHECK: trunc <32 x i16> %{{.*}} to <32 x i8>
return _mm512_cvtepi16_epi8(__A);
}
__m256i test_mm512_mask_cvtepi16_epi8(__m256i __O, __mmask32 __M, __m512i __A) {
// CHECK-LABEL: @test_mm512_mask_cvtepi16_epi8
- // CHECK: @llvm.x86.avx512.mask.pmov.wb.512
+ // CHECK: trunc <32 x i16> %{{.*}} to <32 x i8>
+ // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
return _mm512_mask_cvtepi16_epi8(__O, __M, __A);
}
__m256i test_mm512_maskz_cvtepi16_epi8(__mmask32 __M, __m512i __A) {
// CHECK-LABEL: @test_mm512_maskz_cvtepi16_epi8
- // CHECK: @llvm.x86.avx512.mask.pmov.wb.512
+ // CHECK: trunc <32 x i16> %{{.*}} to <32 x i8>
+ // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
return _mm512_maskz_cvtepi16_epi8(__M, __A);
}
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);
}
diff --git a/clang/test/CodeGen/avx512vl-builtins.c b/clang/test/CodeGen/avx512vl-builtins.c
index 56033fa010f..344631705be 100644
--- a/clang/test/CodeGen/avx512vl-builtins.c
+++ b/clang/test/CodeGen/avx512vl-builtins.c
@@ -6577,19 +6577,21 @@ void test_mm_mask_cvtepi32_storeu_epi16(void * __P, __mmask8 __M, __m128i __A) {
__m128i test_mm256_cvtepi32_epi16(__m256i __A) {
// CHECK-LABEL: @test_mm256_cvtepi32_epi16
- // CHECK: @llvm.x86.avx512.mask.pmov.dw.256
+ // CHECK: trunc <8 x i32> %{{.*}} to <8 x i16>
return _mm256_cvtepi32_epi16(__A);
}
__m128i test_mm256_mask_cvtepi32_epi16(__m128i __O, __mmask8 __M, __m256i __A) {
// CHECK-LABEL: @test_mm256_mask_cvtepi32_epi16
- // CHECK: @llvm.x86.avx512.mask.pmov.dw.256
+ // CHECK: trunc <8 x i32> %{{.*}} to <8 x i16>
+ // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}
return _mm256_mask_cvtepi32_epi16(__O, __M, __A);
}
__m128i test_mm256_maskz_cvtepi32_epi16(__mmask8 __M, __m256i __A) {
// CHECK-LABEL: @test_mm256_maskz_cvtepi32_epi16
- // CHECK: @llvm.x86.avx512.mask.pmov.dw.256
+ // CHECK: trunc <8 x i32> %{{.*}} to <8 x i16>
+ // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}
return _mm256_maskz_cvtepi32_epi16(__M, __A);
}
@@ -6673,19 +6675,21 @@ void test_mm_mask_cvtepi64_storeu_epi32(void * __P, __mmask8 __M, __m128i __A) {
__m128i test_mm256_cvtepi64_epi32(__m256i __A) {
// CHECK-LABEL: @test_mm256_cvtepi64_epi32
- // CHECK: @llvm.x86.avx512.mask.pmov.qd.256
+ // CHECK: trunc <4 x i64> %{{.*}} to <4 x i32>
return _mm256_cvtepi64_epi32(__A);
}
__m128i test_mm256_mask_cvtepi64_epi32(__m128i __O, __mmask8 __M, __m256i __A) {
// CHECK-LABEL: @test_mm256_mask_cvtepi64_epi32
- // CHECK: @llvm.x86.avx512.mask.pmov.qd.256
+ // CHECK: trunc <4 x i64> %{{.*}} to <4 x i32>
+ // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
return _mm256_mask_cvtepi64_epi32(__O, __M, __A);
}
__m128i test_mm256_maskz_cvtepi64_epi32(__mmask8 __M, __m256i __A) {
// CHECK-LABEL: @test_mm256_maskz_cvtepi64_epi32
- // CHECK: @llvm.x86.avx512.mask.pmov.qd.256
+ // CHECK: trunc <4 x i64> %{{.*}} to <4 x i32>
+ // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
return _mm256_maskz_cvtepi64_epi32(__M, __A);
}
diff --git a/clang/test/CodeGen/avx512vlbw-builtins.c b/clang/test/CodeGen/avx512vlbw-builtins.c
index 7adc50c2317..1118b958e2e 100644
--- a/clang/test/CodeGen/avx512vlbw-builtins.c
+++ b/clang/test/CodeGen/avx512vlbw-builtins.c
@@ -1804,19 +1804,21 @@ __m128i test_mm_maskz_cvtepi16_epi8(__mmask8 __M, __m128i __A) {
__m128i test_mm256_cvtepi16_epi8(__m256i __A) {
// CHECK-LABEL: @test_mm256_cvtepi16_epi8
- // CHECK: @llvm.x86.avx512.mask.pmov.wb.256
+ // CHECK: trunc <16 x i16> %{{.*}} to <16 x i8>
return _mm256_cvtepi16_epi8(__A);
}
__m128i test_mm256_mask_cvtepi16_epi8(__m128i __O, __mmask16 __M, __m256i __A) {
// CHECK-LABEL: @test_mm256_mask_cvtepi16_epi8
- // CHECK: @llvm.x86.avx512.mask.pmov.wb.256
+ // CHECK: trunc <16 x i16> %{{.*}} to <16 x i8>
+ // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
return _mm256_mask_cvtepi16_epi8(__O, __M, __A);
}
__m128i test_mm256_maskz_cvtepi16_epi8(__mmask16 __M, __m256i __A) {
// CHECK-LABEL: @test_mm256_maskz_cvtepi16_epi8
- // CHECK: @llvm.x86.avx512.mask.pmov.wb.256
+ // CHECK: trunc <16 x i16> %{{.*}} to <16 x i8>
+ // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
return _mm256_maskz_cvtepi16_epi8(__M, __A);
}
OpenPOWER on IntegriCloud