summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2018-03-04 19:33:15 +0000
committerCraig Topper <craig.topper@intel.com>2018-03-04 19:33:15 +0000
commitf2aae622287deacfdd0cfeba85ede24418cd472c (patch)
treed1132e9b366db7d563b112b098e64d37656b7261 /llvm/test/CodeGen
parent1209eb7d6684096c9a043373b4b027488be9e268 (diff)
downloadbcm5719-llvm-f2aae622287deacfdd0cfeba85ede24418cd472c.tar.gz
bcm5719-llvm-f2aae622287deacfdd0cfeba85ede24418cd472c.zip
[X86] Add a DAG combine to turn stores of vXi1 constants into scalar stores.
llvm-svn: 326679
Diffstat (limited to 'llvm/test/CodeGen')
-rw-r--r--llvm/test/CodeGen/X86/avx512-mask-op.ll140
-rwxr-xr-xllvm/test/CodeGen/X86/avx512-schedule.ll6
2 files changed, 26 insertions, 120 deletions
diff --git a/llvm/test/CodeGen/X86/avx512-mask-op.ll b/llvm/test/CodeGen/X86/avx512-mask-op.ll
index f1a2701a588..649fd7debbf 100644
--- a/llvm/test/CodeGen/X86/avx512-mask-op.ll
+++ b/llvm/test/CodeGen/X86/avx512-mask-op.ll
@@ -447,43 +447,19 @@ define i8 @zext_test3(<16 x i32> %a, <16 x i32> %b) {
}
define i8 @conv1(<8 x i1>* %R) {
-; KNL-LABEL: conv1:
-; KNL: ## %bb.0: ## %entry
-; KNL-NEXT: movb $-1, (%rdi)
-; KNL-NEXT: movb $-2, -{{[0-9]+}}(%rsp)
-; KNL-NEXT: movb $-2, %al
-; KNL-NEXT: retq
-;
-; SKX-LABEL: conv1:
-; SKX: ## %bb.0: ## %entry
-; SKX-NEXT: kxnorw %k0, %k0, %k0
-; SKX-NEXT: kmovb %k0, (%rdi)
-; SKX-NEXT: movb $-2, -{{[0-9]+}}(%rsp)
-; SKX-NEXT: movb $-2, %al
-; SKX-NEXT: retq
-;
-; AVX512BW-LABEL: conv1:
-; AVX512BW: ## %bb.0: ## %entry
-; AVX512BW-NEXT: movb $-1, (%rdi)
-; AVX512BW-NEXT: movb $-2, -{{[0-9]+}}(%rsp)
-; AVX512BW-NEXT: movb $-2, %al
-; AVX512BW-NEXT: retq
-;
-; AVX512DQ-LABEL: conv1:
-; AVX512DQ: ## %bb.0: ## %entry
-; AVX512DQ-NEXT: kxnorw %k0, %k0, %k0
-; AVX512DQ-NEXT: kmovb %k0, (%rdi)
-; AVX512DQ-NEXT: movb $-2, -{{[0-9]+}}(%rsp)
-; AVX512DQ-NEXT: movb $-2, %al
-; AVX512DQ-NEXT: retq
+; CHECK-LABEL: conv1:
+; CHECK: ## %bb.0: ## %entry
+; CHECK-NEXT: movb $-1, (%rdi)
+; CHECK-NEXT: movb $-2, -{{[0-9]+}}(%rsp)
+; CHECK-NEXT: movb $-2, %al
+; CHECK-NEXT: retq
;
; X86-LABEL: conv1:
; X86: ## %bb.0: ## %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: .cfi_def_cfa_offset 16
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT: kxnorw %k0, %k0, %k0
-; X86-NEXT: kmovb %k0, (%eax)
+; X86-NEXT: movb $-1, (%eax)
; X86-NEXT: movb $-2, (%esp)
; X86-NEXT: movb $-2, %al
; X86-NEXT: addl $12, %esp
@@ -3422,43 +3398,17 @@ entry:
}
define void @store_v64i1_constant(<64 x i1>* %R) {
-; KNL-LABEL: store_v64i1_constant:
-; KNL: ## %bb.0: ## %entry
-; KNL-NEXT: kxnorw %k0, %k0, %k0
-; KNL-NEXT: kmovw %k0, 2(%rdi)
-; KNL-NEXT: movl $-536871045, 4(%rdi) ## imm = 0xDFFFFF7B
-; KNL-NEXT: movw $-4099, (%rdi) ## imm = 0xEFFD
-; KNL-NEXT: retq
-;
-; SKX-LABEL: store_v64i1_constant:
-; SKX: ## %bb.0: ## %entry
-; SKX-NEXT: movabsq $-2305843576149381123, %rax ## imm = 0xDFFFFF7BFFFFEFFD
-; SKX-NEXT: movq %rax, (%rdi)
-; SKX-NEXT: retq
-;
-; AVX512BW-LABEL: store_v64i1_constant:
-; AVX512BW: ## %bb.0: ## %entry
-; AVX512BW-NEXT: movabsq $-2305843576149381123, %rax ## imm = 0xDFFFFF7BFFFFEFFD
-; AVX512BW-NEXT: movq %rax, (%rdi)
-; AVX512BW-NEXT: retq
-;
-; AVX512DQ-LABEL: store_v64i1_constant:
-; AVX512DQ: ## %bb.0: ## %entry
-; AVX512DQ-NEXT: kxnorw %k0, %k0, %k0
-; AVX512DQ-NEXT: kmovw %k0, 2(%rdi)
-; AVX512DQ-NEXT: movl $-536871045, 4(%rdi) ## imm = 0xDFFFFF7B
-; AVX512DQ-NEXT: movw $-4099, (%rdi) ## imm = 0xEFFD
-; AVX512DQ-NEXT: retq
+; CHECK-LABEL: store_v64i1_constant:
+; CHECK: ## %bb.0: ## %entry
+; CHECK-NEXT: movabsq $-2305843576149381123, %rax ## imm = 0xDFFFFF7BFFFFEFFD
+; CHECK-NEXT: movq %rax, (%rdi)
+; CHECK-NEXT: retq
;
; X86-LABEL: store_v64i1_constant:
; X86: ## %bb.0: ## %entry
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT: movl $-4099, %ecx ## imm = 0xEFFD
-; X86-NEXT: kmovd %ecx, %k0
-; X86-NEXT: movl $-536871045, %ecx ## imm = 0xDFFFFF7B
-; X86-NEXT: kmovd %ecx, %k1
-; X86-NEXT: kunpckdq %k0, %k1, %k0
-; X86-NEXT: kmovq %k0, (%eax)
+; X86-NEXT: movl $-536871045, 4(%eax) ## imm = 0xDFFFFF7B
+; X86-NEXT: movl $-4099, (%eax) ## imm = 0xEFFD
; X86-NEXT: retl
entry:
store <64 x i1> <i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1>, <64 x i1>* %R
@@ -3466,36 +3416,15 @@ entry:
}
define void @store_v2i1_constant(<2 x i1>* %R) {
-; KNL-LABEL: store_v2i1_constant:
-; KNL: ## %bb.0: ## %entry
-; KNL-NEXT: movb $1, (%rdi)
-; KNL-NEXT: retq
-;
-; SKX-LABEL: store_v2i1_constant:
-; SKX: ## %bb.0: ## %entry
-; SKX-NEXT: movb $1, %al
-; SKX-NEXT: kmovd %eax, %k0
-; SKX-NEXT: kmovb %k0, (%rdi)
-; SKX-NEXT: retq
-;
-; AVX512BW-LABEL: store_v2i1_constant:
-; AVX512BW: ## %bb.0: ## %entry
-; AVX512BW-NEXT: movb $1, (%rdi)
-; AVX512BW-NEXT: retq
-;
-; AVX512DQ-LABEL: store_v2i1_constant:
-; AVX512DQ: ## %bb.0: ## %entry
-; AVX512DQ-NEXT: movb $1, %al
-; AVX512DQ-NEXT: kmovw %eax, %k0
-; AVX512DQ-NEXT: kmovb %k0, (%rdi)
-; AVX512DQ-NEXT: retq
+; CHECK-LABEL: store_v2i1_constant:
+; CHECK: ## %bb.0: ## %entry
+; CHECK-NEXT: movb $1, (%rdi)
+; CHECK-NEXT: retq
;
; X86-LABEL: store_v2i1_constant:
; X86: ## %bb.0: ## %entry
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT: movb $1, %cl
-; X86-NEXT: kmovd %ecx, %k0
-; X86-NEXT: kmovb %k0, (%eax)
+; X86-NEXT: movb $1, (%eax)
; X86-NEXT: retl
entry:
store <2 x i1> <i1 1, i1 0>, <2 x i1>* %R
@@ -3503,36 +3432,15 @@ entry:
}
define void @store_v4i1_constant(<4 x i1>* %R) {
-; KNL-LABEL: store_v4i1_constant:
-; KNL: ## %bb.0: ## %entry
-; KNL-NEXT: movb $5, (%rdi)
-; KNL-NEXT: retq
-;
-; SKX-LABEL: store_v4i1_constant:
-; SKX: ## %bb.0: ## %entry
-; SKX-NEXT: movb $5, %al
-; SKX-NEXT: kmovd %eax, %k0
-; SKX-NEXT: kmovb %k0, (%rdi)
-; SKX-NEXT: retq
-;
-; AVX512BW-LABEL: store_v4i1_constant:
-; AVX512BW: ## %bb.0: ## %entry
-; AVX512BW-NEXT: movb $5, (%rdi)
-; AVX512BW-NEXT: retq
-;
-; AVX512DQ-LABEL: store_v4i1_constant:
-; AVX512DQ: ## %bb.0: ## %entry
-; AVX512DQ-NEXT: movb $5, %al
-; AVX512DQ-NEXT: kmovw %eax, %k0
-; AVX512DQ-NEXT: kmovb %k0, (%rdi)
-; AVX512DQ-NEXT: retq
+; CHECK-LABEL: store_v4i1_constant:
+; CHECK: ## %bb.0: ## %entry
+; CHECK-NEXT: movb $5, (%rdi)
+; CHECK-NEXT: retq
;
; X86-LABEL: store_v4i1_constant:
; X86: ## %bb.0: ## %entry
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT: movb $5, %cl
-; X86-NEXT: kmovd %ecx, %k0
-; X86-NEXT: kmovb %k0, (%eax)
+; X86-NEXT: movb $5, (%eax)
; X86-NEXT: retl
entry:
store <4 x i1> <i1 1, i1 0, i1 1, i1 0>, <4 x i1>* %R
diff --git a/llvm/test/CodeGen/X86/avx512-schedule.ll b/llvm/test/CodeGen/X86/avx512-schedule.ll
index a1c3ed48e0e..5a7ee40d77d 100755
--- a/llvm/test/CodeGen/X86/avx512-schedule.ll
+++ b/llvm/test/CodeGen/X86/avx512-schedule.ll
@@ -6943,16 +6943,14 @@ define i8 @zext_test3(<16 x i32> %a, <16 x i32> %b) {
define i8 @conv1(<8 x i1>* %R) {
; GENERIC-LABEL: conv1:
; GENERIC: # %bb.0: # %entry
-; GENERIC-NEXT: kxnorw %k0, %k0, %k0 # sched: [1:1.00]
-; GENERIC-NEXT: kmovb %k0, (%rdi) # sched: [1:1.00]
+; GENERIC-NEXT: movb $-1, (%rdi) # sched: [5:1.00]
; GENERIC-NEXT: movb $-2, -{{[0-9]+}}(%rsp) # sched: [5:1.00]
; GENERIC-NEXT: movb $-2, %al # sched: [1:0.33]
; GENERIC-NEXT: retq # sched: [1:1.00]
;
; SKX-LABEL: conv1:
; SKX: # %bb.0: # %entry
-; SKX-NEXT: kxnorw %k0, %k0, %k0 # sched: [1:1.00]
-; SKX-NEXT: kmovb %k0, (%rdi) # sched: [1:1.00]
+; SKX-NEXT: movb $-1, (%rdi) # sched: [1:1.00]
; SKX-NEXT: movb $-2, -{{[0-9]+}}(%rsp) # sched: [1:1.00]
; SKX-NEXT: movb $-2, %al # sched: [1:0.25]
; SKX-NEXT: retq # sched: [7:1.00]
OpenPOWER on IntegriCloud