summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2017-12-23 18:53:05 +0000
committerCraig Topper <craig.topper@intel.com>2017-12-23 18:53:05 +0000
commit06dad14797107f3ecb322d11df05307dbfd6b49a (patch)
tree4d0dd34897961f57aad11a731bcf6e6ec7769aa2 /llvm/test/CodeGen
parente79a7a4b2e1ed8c7d6645ba1ba135c5480929409 (diff)
downloadbcm5719-llvm-06dad14797107f3ecb322d11df05307dbfd6b49a.tar.gz
bcm5719-llvm-06dad14797107f3ecb322d11df05307dbfd6b49a.zip
[X86] Remove type restrictions from WidenMaskArithmetic.
This can help AVX-512 code where mask types are legal allowing us to remove extends and truncates to/from mask types. llvm-svn: 321408
Diffstat (limited to 'llvm/test/CodeGen')
-rw-r--r--llvm/test/CodeGen/X86/avx512-calling-conv.ll88
-rw-r--r--llvm/test/CodeGen/X86/avx512-ext.ll21
-rwxr-xr-xllvm/test/CodeGen/X86/avx512-schedule.ll12
3 files changed, 34 insertions, 87 deletions
diff --git a/llvm/test/CodeGen/X86/avx512-calling-conv.ll b/llvm/test/CodeGen/X86/avx512-calling-conv.ll
index 6e6d61f37d2..248462d0de5 100644
--- a/llvm/test/CodeGen/X86/avx512-calling-conv.ll
+++ b/llvm/test/CodeGen/X86/avx512-calling-conv.ll
@@ -17,78 +17,40 @@ define <16 x i1> @test1() {
}
define <16 x i1> @test2(<16 x i1>%a, <16 x i1>%b) {
-; KNL-LABEL: test2:
-; KNL: ## %bb.0:
-; KNL-NEXT: vpmovsxbd %xmm1, %zmm1
-; KNL-NEXT: vpslld $31, %zmm1, %zmm1
-; KNL-NEXT: vpmovsxbd %xmm0, %zmm0
-; KNL-NEXT: vpslld $31, %zmm0, %zmm0
-; KNL-NEXT: vptestmd %zmm0, %zmm0, %k1
-; KNL-NEXT: vptestmd %zmm1, %zmm1, %k1 {%k1}
-; KNL-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
-; KNL-NEXT: vpmovdb %zmm0, %xmm0
-; KNL-NEXT: retq
-;
-; SKX-LABEL: test2:
-; SKX: ## %bb.0:
-; SKX-NEXT: vpsllw $7, %xmm1, %xmm1
-; SKX-NEXT: vpmovb2m %xmm1, %k0
-; SKX-NEXT: vpsllw $7, %xmm0, %xmm0
-; SKX-NEXT: vpmovb2m %xmm0, %k1
-; SKX-NEXT: kandw %k0, %k1, %k0
-; SKX-NEXT: vpmovm2b %k0, %xmm0
-; SKX-NEXT: retq
+; ALL_X64-LABEL: test2:
+; ALL_X64: ## %bb.0:
+; ALL_X64-NEXT: vpand %xmm1, %xmm0, %xmm0
+; ALL_X64-NEXT: vpsllw $7, %xmm0, %xmm0
+; ALL_X64-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0
+; ALL_X64-NEXT: vpxor %xmm1, %xmm1, %xmm1
+; ALL_X64-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0
+; ALL_X64-NEXT: retq
;
; KNL_X32-LABEL: test2:
; KNL_X32: ## %bb.0:
-; KNL_X32-NEXT: vpmovsxbd %xmm1, %zmm1
-; KNL_X32-NEXT: vpslld $31, %zmm1, %zmm1
-; KNL_X32-NEXT: vpmovsxbd %xmm0, %zmm0
-; KNL_X32-NEXT: vpslld $31, %zmm0, %zmm0
-; KNL_X32-NEXT: vptestmd %zmm0, %zmm0, %k1
-; KNL_X32-NEXT: vptestmd %zmm1, %zmm1, %k1 {%k1}
-; KNL_X32-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
-; KNL_X32-NEXT: vpmovdb %zmm0, %xmm0
+; KNL_X32-NEXT: vpand %xmm1, %xmm0, %xmm0
+; KNL_X32-NEXT: vpsllw $7, %xmm0, %xmm0
+; KNL_X32-NEXT: vpand LCPI1_0, %xmm0, %xmm0
+; KNL_X32-NEXT: vpxor %xmm1, %xmm1, %xmm1
+; KNL_X32-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0
; KNL_X32-NEXT: retl
%c = and <16 x i1>%a, %b
ret <16 x i1> %c
}
define <8 x i1> @test3(<8 x i1>%a, <8 x i1>%b) {
-; KNL-LABEL: test3:
-; KNL: ## %bb.0:
-; KNL-NEXT: vpmovsxwq %xmm1, %zmm1
-; KNL-NEXT: vpsllq $63, %zmm1, %zmm1
-; KNL-NEXT: vpmovsxwq %xmm0, %zmm0
-; KNL-NEXT: vpsllq $63, %zmm0, %zmm0
-; KNL-NEXT: vptestmq %zmm0, %zmm0, %k1
-; KNL-NEXT: vptestmq %zmm1, %zmm1, %k1 {%k1}
-; KNL-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
-; KNL-NEXT: vpmovdw %zmm0, %ymm0
-; KNL-NEXT: ## kill: def %xmm0 killed %xmm0 killed %ymm0
-; KNL-NEXT: retq
-;
-; SKX-LABEL: test3:
-; SKX: ## %bb.0:
-; SKX-NEXT: vpsllw $15, %xmm1, %xmm1
-; SKX-NEXT: vpmovw2m %xmm1, %k0
-; SKX-NEXT: vpsllw $15, %xmm0, %xmm0
-; SKX-NEXT: vpmovw2m %xmm0, %k1
-; SKX-NEXT: kandb %k0, %k1, %k0
-; SKX-NEXT: vpmovm2w %k0, %xmm0
-; SKX-NEXT: retq
+; ALL_X64-LABEL: test3:
+; ALL_X64: ## %bb.0:
+; ALL_X64-NEXT: vpand %xmm1, %xmm0, %xmm0
+; ALL_X64-NEXT: vpsllw $15, %xmm0, %xmm0
+; ALL_X64-NEXT: vpsraw $15, %xmm0, %xmm0
+; ALL_X64-NEXT: retq
;
; KNL_X32-LABEL: test3:
; KNL_X32: ## %bb.0:
-; KNL_X32-NEXT: vpmovsxwq %xmm1, %zmm1
-; KNL_X32-NEXT: vpsllq $63, %zmm1, %zmm1
-; KNL_X32-NEXT: vpmovsxwq %xmm0, %zmm0
-; KNL_X32-NEXT: vpsllq $63, %zmm0, %zmm0
-; KNL_X32-NEXT: vptestmq %zmm0, %zmm0, %k1
-; KNL_X32-NEXT: vptestmq %zmm1, %zmm1, %k1 {%k1}
-; KNL_X32-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
-; KNL_X32-NEXT: vpmovdw %zmm0, %ymm0
-; KNL_X32-NEXT: ## kill: def %xmm0 killed %xmm0 killed %ymm0
+; KNL_X32-NEXT: vpand %xmm1, %xmm0, %xmm0
+; KNL_X32-NEXT: vpsllw $15, %xmm0, %xmm0
+; KNL_X32-NEXT: vpsraw $15, %xmm0, %xmm0
; KNL_X32-NEXT: retl
%c = and <8 x i1>%a, %b
ret <8 x i1> %c
@@ -102,11 +64,9 @@ define <4 x i1> @test4(<4 x i1>%a, <4 x i1>%b) {
;
; SKX-LABEL: test4:
; SKX: ## %bb.0:
-; SKX-NEXT: vpslld $31, %xmm1, %xmm1
+; SKX-NEXT: vpand %xmm1, %xmm0, %xmm0
; SKX-NEXT: vpslld $31, %xmm0, %xmm0
-; SKX-NEXT: vptestmd %xmm0, %xmm0, %k1
-; SKX-NEXT: vptestmd %xmm1, %xmm1, %k0 {%k1}
-; SKX-NEXT: vpmovm2d %k0, %xmm0
+; SKX-NEXT: vpsrad $31, %xmm0, %xmm0
; SKX-NEXT: retq
;
; KNL_X32-LABEL: test4:
diff --git a/llvm/test/CodeGen/X86/avx512-ext.ll b/llvm/test/CodeGen/X86/avx512-ext.ll
index 97beff63811..8c794159121 100644
--- a/llvm/test/CodeGen/X86/avx512-ext.ll
+++ b/llvm/test/CodeGen/X86/avx512-ext.ll
@@ -1366,21 +1366,12 @@ define i16 @trunc_16i32_to_16i1(<16 x i32> %a) {
}
define <4 x i32> @trunc_4i32_to_4i1(<4 x i32> %a, <4 x i32> %b) {
-; KNL-LABEL: trunc_4i32_to_4i1:
-; KNL: # %bb.0:
-; KNL-NEXT: vpand %xmm1, %xmm0, %xmm0
-; KNL-NEXT: vpslld $31, %xmm0, %xmm0
-; KNL-NEXT: vpsrad $31, %xmm0, %xmm0
-; KNL-NEXT: retq
-;
-; SKX-LABEL: trunc_4i32_to_4i1:
-; SKX: # %bb.0:
-; SKX-NEXT: vpslld $31, %xmm0, %xmm0
-; SKX-NEXT: vptestmd %xmm0, %xmm0, %k1
-; SKX-NEXT: vpslld $31, %xmm1, %xmm0
-; SKX-NEXT: vptestmd %xmm0, %xmm0, %k0 {%k1}
-; SKX-NEXT: vpmovm2d %k0, %xmm0
-; SKX-NEXT: retq
+; ALL-LABEL: trunc_4i32_to_4i1:
+; ALL: # %bb.0:
+; ALL-NEXT: vpand %xmm1, %xmm0, %xmm0
+; ALL-NEXT: vpslld $31, %xmm0, %xmm0
+; ALL-NEXT: vpsrad $31, %xmm0, %xmm0
+; ALL-NEXT: retq
%mask_a = trunc <4 x i32>%a to <4 x i1>
%mask_b = trunc <4 x i32>%b to <4 x i1>
%a_and_b = and <4 x i1>%mask_a, %mask_b
diff --git a/llvm/test/CodeGen/X86/avx512-schedule.ll b/llvm/test/CodeGen/X86/avx512-schedule.ll
index 1b450b98a6d..78111874b58 100755
--- a/llvm/test/CodeGen/X86/avx512-schedule.ll
+++ b/llvm/test/CodeGen/X86/avx512-schedule.ll
@@ -4376,20 +4376,16 @@ define i16 @trunc_16i32_to_16i1(<16 x i32> %a) {
define <4 x i32> @trunc_4i32_to_4i1(<4 x i32> %a, <4 x i32> %b) {
; GENERIC-LABEL: trunc_4i32_to_4i1:
; GENERIC: # %bb.0:
+; GENERIC-NEXT: vpand %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
; GENERIC-NEXT: vpslld $31, %xmm0, %xmm0 # sched: [1:1.00]
-; GENERIC-NEXT: vptestmd %xmm0, %xmm0, %k1 # sched: [1:1.00]
-; GENERIC-NEXT: vpslld $31, %xmm1, %xmm0 # sched: [1:1.00]
-; GENERIC-NEXT: vptestmd %xmm0, %xmm0, %k0 {%k1} # sched: [1:1.00]
-; GENERIC-NEXT: vpmovm2d %k0, %xmm0 # sched: [1:0.33]
+; GENERIC-NEXT: vpsrad $31, %xmm0, %xmm0 # sched: [1:1.00]
; GENERIC-NEXT: retq # sched: [1:1.00]
;
; SKX-LABEL: trunc_4i32_to_4i1:
; SKX: # %bb.0:
+; SKX-NEXT: vpand %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
; SKX-NEXT: vpslld $31, %xmm0, %xmm0 # sched: [1:0.50]
-; SKX-NEXT: vptestmd %xmm0, %xmm0, %k1 # sched: [3:1.00]
-; SKX-NEXT: vpslld $31, %xmm1, %xmm0 # sched: [1:0.50]
-; SKX-NEXT: vptestmd %xmm0, %xmm0, %k0 {%k1} # sched: [3:1.00]
-; SKX-NEXT: vpmovm2d %k0, %xmm0 # sched: [1:0.25]
+; SKX-NEXT: vpsrad $31, %xmm0, %xmm0 # sched: [1:0.50]
; SKX-NEXT: retq # sched: [7:1.00]
%mask_a = trunc <4 x i32>%a to <4 x i1>
%mask_b = trunc <4 x i32>%b to <4 x i1>
OpenPOWER on IntegriCloud