summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2019-08-18 18:52:46 +0000
committerCraig Topper <craig.topper@intel.com>2019-08-18 18:52:46 +0000
commit9e074c06fe08c6b2da3d119c7aa7e6724a8d13ab (patch)
tree2f7019dc6f06876236cc88c0cca2c4f86c5552ab /llvm/test
parent37860d524e86488e683bb04064ec34cebb4c74c3 (diff)
downloadbcm5719-llvm-9e074c06fe08c6b2da3d119c7aa7e6724a8d13ab.tar.gz
bcm5719-llvm-9e074c06fe08c6b2da3d119c7aa7e6724a8d13ab.zip
[X86] Improve lower1BitShuffle handling for KSHIFTL on narrow vectors.
We can insert the value into a larger legal type and shift that by the desired amount. llvm-svn: 369215
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/X86/kshift.ll50
1 files changed, 15 insertions, 35 deletions
diff --git a/llvm/test/CodeGen/X86/kshift.ll b/llvm/test/CodeGen/X86/kshift.ll
index 245ba5c299f..919299f1347 100644
--- a/llvm/test/CodeGen/X86/kshift.ll
+++ b/llvm/test/CodeGen/X86/kshift.ll
@@ -5,13 +5,9 @@
define i8 @kshiftl_v8i1_1(<8 x i64> %x, <8 x i64> %y) {
; KNL-LABEL: kshiftl_v8i1_1:
; KNL: # %bb.0:
-; KNL-NEXT: vptestnmq %zmm0, %zmm0, %k1
-; KNL-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
-; KNL-NEXT: movb $-2, %al
-; KNL-NEXT: kmovw %eax, %k1
-; KNL-NEXT: vpexpandq %zmm0, %zmm0 {%k1} {z}
-; KNL-NEXT: vptestnmq %zmm1, %zmm1, %k1
-; KNL-NEXT: vptestmq %zmm0, %zmm0, %k0 {%k1}
+; KNL-NEXT: vptestnmq %zmm0, %zmm0, %k0
+; KNL-NEXT: kshiftlw $1, %k0, %k1
+; KNL-NEXT: vptestnmq %zmm1, %zmm1, %k0 {%k1}
; KNL-NEXT: kmovw %k0, %eax
; KNL-NEXT: # kill: def $al killed $al killed $eax
; KNL-NEXT: vzeroupper
@@ -177,13 +173,9 @@ define i64 @kshiftl_v64i1_1(<64 x i8> %x, <64 x i8> %y) {
define i8 @kshiftl_v8i1_7(<8 x i64> %x, <8 x i64> %y) {
; KNL-LABEL: kshiftl_v8i1_7:
; KNL: # %bb.0:
-; KNL-NEXT: vptestnmq %zmm0, %zmm0, %k1
-; KNL-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
-; KNL-NEXT: movb $-128, %al
-; KNL-NEXT: kmovw %eax, %k1
-; KNL-NEXT: vpexpandq %zmm0, %zmm0 {%k1} {z}
-; KNL-NEXT: vptestnmq %zmm1, %zmm1, %k1
-; KNL-NEXT: vptestmq %zmm0, %zmm0, %k0 {%k1}
+; KNL-NEXT: vptestnmq %zmm0, %zmm0, %k0
+; KNL-NEXT: kshiftlw $7, %k0, %k1
+; KNL-NEXT: vptestnmq %zmm1, %zmm1, %k0 {%k1}
; KNL-NEXT: kmovw %k0, %eax
; KNL-NEXT: # kill: def $al killed $al killed $eax
; KNL-NEXT: vzeroupper
@@ -475,13 +467,9 @@ define i64 @kshiftr_v64i1_1(<64 x i8> %x, <64 x i8> %y) {
define i8 @kshiftr_v8i1_7(<8 x i64> %x, <8 x i64> %y) {
; KNL-LABEL: kshiftr_v8i1_7:
; KNL: # %bb.0:
-; KNL-NEXT: vptestnmq %zmm0, %zmm0, %k1
-; KNL-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
-; KNL-NEXT: movb $-2, %al
-; KNL-NEXT: kmovw %eax, %k1
-; KNL-NEXT: vpexpandq %zmm0, %zmm0 {%k1} {z}
-; KNL-NEXT: vptestnmq %zmm1, %zmm1, %k1
-; KNL-NEXT: vptestmq %zmm0, %zmm0, %k0 {%k1}
+; KNL-NEXT: vptestnmq %zmm0, %zmm0, %k0
+; KNL-NEXT: kshiftlw $1, %k0, %k1
+; KNL-NEXT: vptestnmq %zmm1, %zmm1, %k0 {%k1}
; KNL-NEXT: kmovw %k0, %eax
; KNL-NEXT: # kill: def $al killed $al killed $eax
; KNL-NEXT: vzeroupper
@@ -599,14 +587,9 @@ define i64 @kshiftr_v64i1_63(<64 x i8> %x, <64 x i8> %y) {
define i8 @kshiftl_v8i1_zu123u56(<8 x i64> %x, <8 x i64> %y) {
; KNL-LABEL: kshiftl_v8i1_zu123u56:
; KNL: # %bb.0:
-; KNL-NEXT: vptestnmq %zmm0, %zmm0, %k1
-; KNL-NEXT: vpxor %xmm0, %xmm0, %xmm0
-; KNL-NEXT: vpternlogq $255, %zmm2, %zmm2, %zmm2 {%k1} {z}
-; KNL-NEXT: vmovdqa64 {{.*#+}} zmm3 = <8,u,1,2,3,u,5,6>
-; KNL-NEXT: vpermi2q %zmm0, %zmm2, %zmm3
-; KNL-NEXT: vpsllq $63, %zmm3, %zmm0
-; KNL-NEXT: vptestnmq %zmm1, %zmm1, %k1
-; KNL-NEXT: vptestmq %zmm0, %zmm0, %k0 {%k1}
+; KNL-NEXT: vptestnmq %zmm0, %zmm0, %k0
+; KNL-NEXT: kshiftlw $1, %k0, %k1
+; KNL-NEXT: vptestnmq %zmm1, %zmm1, %k0 {%k1}
; KNL-NEXT: kmovw %k0, %eax
; KNL-NEXT: # kill: def $al killed $al killed $eax
; KNL-NEXT: vzeroupper
@@ -632,12 +615,9 @@ define i8 @kshiftl_v8i1_zu123u56(<8 x i64> %x, <8 x i64> %y) {
define i8 @kshiftl_v8i1_u0123456(<8 x i64> %x, <8 x i64> %y) {
; KNL-LABEL: kshiftl_v8i1_u0123456:
; KNL: # %bb.0:
-; KNL-NEXT: vptestnmq %zmm0, %zmm0, %k1
-; KNL-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
-; KNL-NEXT: valignq {{.*#+}} zmm0 = zmm0[7,0,1,2,3,4,5,6]
-; KNL-NEXT: vpsllq $63, %zmm0, %zmm0
-; KNL-NEXT: vptestnmq %zmm1, %zmm1, %k1
-; KNL-NEXT: vptestmq %zmm0, %zmm0, %k0 {%k1}
+; KNL-NEXT: vptestnmq %zmm0, %zmm0, %k0
+; KNL-NEXT: kshiftlw $1, %k0, %k1
+; KNL-NEXT: vptestnmq %zmm1, %zmm1, %k0 {%k1}
; KNL-NEXT: kmovw %k0, %eax
; KNL-NEXT: # kill: def $al killed $al killed $eax
; KNL-NEXT: vzeroupper
OpenPOWER on IntegriCloud