diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2019-10-31 19:04:52 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2019-10-31 19:05:04 +0000 |
| commit | 04813ded982bd74dc4c7116344cb9d28b8f565a3 (patch) | |
| tree | c6857a73f5be3de9f0574d6b8a6805dfe58c0eed /llvm/test | |
| parent | db542455dc0f5873851e220bf72a8394767c61fb (diff) | |
| download | bcm5719-llvm-04813ded982bd74dc4c7116344cb9d28b8f565a3.tar.gz bcm5719-llvm-04813ded982bd74dc4c7116344cb9d28b8f565a3.zip | |
Revert rG0e252ae19ff8d99a59d64442c38eeafa5825d441 : [X86] Enable YMM memcmp with AVX1
Breaks build bots
Differential Revision: https://reviews.llvm.org/D69658
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/X86/memcmp-more-load-pairs.ll | 234 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/memcmp.ll | 96 |
2 files changed, 156 insertions, 174 deletions
diff --git a/llvm/test/CodeGen/X86/memcmp-more-load-pairs.ll b/llvm/test/CodeGen/X86/memcmp-more-load-pairs.ll index ea08e5316ba..139ed023966 100644 --- a/llvm/test/CodeGen/X86/memcmp-more-load-pairs.ll +++ b/llvm/test/CodeGen/X86/memcmp-more-load-pairs.ll @@ -2312,11 +2312,13 @@ define i1 @length32_eq(i8* %x, i8* %y) nounwind { ; ; X64-AVX1-LABEL: length32_eq: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0 +; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1 +; X64-AVX1-NEXT: vpxor 16(%rsi), %xmm1, %xmm1 +; X64-AVX1-NEXT: vpxor (%rsi), %xmm0, %xmm0 +; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0 +; X64-AVX1-NEXT: vptest %xmm0, %xmm0 ; X64-AVX1-NEXT: sete %al -; X64-AVX1-NEXT: vzeroupper ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length32_eq: @@ -2651,11 +2653,13 @@ define i1 @length32_eq_const(i8* %X) nounwind { ; ; X64-AVX1-LABEL: length32_eq_const: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0 +; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm1, %xmm1 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0 +; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0 +; X64-AVX1-NEXT: vptest %xmm0, %xmm0 ; X64-AVX1-NEXT: setne %al -; X64-AVX1-NEXT: vzeroupper ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length32_eq_const: @@ -2810,15 +2814,16 @@ define i1 @length48_eq(i8* %x, i8* %y) nounwind { ; ; X64-AVX1-LABEL: length48_eq: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 32(%rdi), %xmm1 -; X64-AVX1-NEXT: vmovups 32(%rsi), %xmm2 -; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0 -; X64-AVX1-NEXT: vxorps %ymm2, %ymm1, %ymm1 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0 +; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1 +; X64-AVX1-NEXT: vmovdqu 32(%rdi), %xmm2 +; X64-AVX1-NEXT: vpxor 16(%rsi), %xmm1, %xmm1 +; X64-AVX1-NEXT: vpxor (%rsi), %xmm0, %xmm0 +; X64-AVX1-NEXT: vpxor 32(%rsi), %xmm2, %xmm2 +; X64-AVX1-NEXT: vpor %xmm2, %xmm1, %xmm1 +; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0 +; X64-AVX1-NEXT: vptest %xmm0, %xmm0 ; X64-AVX1-NEXT: sete %al -; X64-AVX1-NEXT: vzeroupper ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length48_eq: @@ -3139,14 +3144,16 @@ define i1 @length48_eq_const(i8* %X) nounwind { ; ; X64-AVX1-LABEL: length48_eq_const: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 32(%rdi), %xmm1 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0 +; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1 +; X64-AVX1-NEXT: vmovdqu 32(%rdi), %xmm2 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm1, %xmm1 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm2, %xmm2 +; X64-AVX1-NEXT: vpor %xmm2, %xmm1, %xmm1 +; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0 +; X64-AVX1-NEXT: vptest %xmm0, %xmm0 ; X64-AVX1-NEXT: setne %al -; X64-AVX1-NEXT: vzeroupper ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length48_eq_const: @@ -3326,14 +3333,19 @@ define i1 @length63_eq(i8* %x, i8* %y) nounwind { ; ; X64-AVX1-LABEL: length63_eq: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 31(%rdi), %ymm1 -; X64-AVX1-NEXT: vxorps 31(%rsi), %ymm1, %ymm1 -; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0 +; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1 +; X64-AVX1-NEXT: vmovdqu 32(%rdi), %xmm2 +; X64-AVX1-NEXT: vmovdqu 47(%rdi), %xmm3 +; X64-AVX1-NEXT: vpxor 47(%rsi), %xmm3, %xmm3 +; X64-AVX1-NEXT: vpxor 32(%rsi), %xmm2, %xmm2 +; X64-AVX1-NEXT: vpor %xmm3, %xmm2, %xmm2 +; X64-AVX1-NEXT: vpxor 16(%rsi), %xmm1, %xmm1 +; X64-AVX1-NEXT: vpor %xmm2, %xmm1, %xmm1 +; X64-AVX1-NEXT: vpxor (%rsi), %xmm0, %xmm0 +; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0 +; X64-AVX1-NEXT: vptest %xmm0, %xmm0 ; X64-AVX1-NEXT: setne %al -; X64-AVX1-NEXT: vzeroupper ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length63_eq: @@ -3530,14 +3542,19 @@ define i1 @length63_eq_const(i8* %X) nounwind { ; ; X64-AVX1-LABEL: length63_eq_const: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 31(%rdi), %ymm1 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0 +; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1 +; X64-AVX1-NEXT: vmovdqu 32(%rdi), %xmm2 +; X64-AVX1-NEXT: vmovdqu 47(%rdi), %xmm3 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm3, %xmm3 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm2, %xmm2 +; X64-AVX1-NEXT: vpor %xmm3, %xmm2, %xmm2 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm1, %xmm1 +; X64-AVX1-NEXT: vpor %xmm2, %xmm1, %xmm1 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0 +; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0 +; X64-AVX1-NEXT: vptest %xmm0, %xmm0 ; X64-AVX1-NEXT: sete %al -; X64-AVX1-NEXT: vzeroupper ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length63_eq_const: @@ -3717,14 +3734,19 @@ define i1 @length64_eq(i8* %x, i8* %y) nounwind { ; ; X64-AVX1-LABEL: length64_eq: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1 -; X64-AVX1-NEXT: vxorps 32(%rsi), %ymm1, %ymm1 -; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0 +; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1 +; X64-AVX1-NEXT: vmovdqu 32(%rdi), %xmm2 +; X64-AVX1-NEXT: vmovdqu 48(%rdi), %xmm3 +; X64-AVX1-NEXT: vpxor 48(%rsi), %xmm3, %xmm3 +; X64-AVX1-NEXT: vpxor 32(%rsi), %xmm2, %xmm2 +; X64-AVX1-NEXT: vpor %xmm3, %xmm2, %xmm2 +; X64-AVX1-NEXT: vpxor 16(%rsi), %xmm1, %xmm1 +; X64-AVX1-NEXT: vpor %xmm2, %xmm1, %xmm1 +; X64-AVX1-NEXT: vpxor (%rsi), %xmm0, %xmm0 +; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0 +; X64-AVX1-NEXT: vptest %xmm0, %xmm0 ; X64-AVX1-NEXT: setne %al -; X64-AVX1-NEXT: vzeroupper ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length64_eq: @@ -3936,14 +3958,19 @@ define i1 @length64_eq_const(i8* %X) nounwind { ; ; X64-AVX1-LABEL: length64_eq_const: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0 +; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1 +; X64-AVX1-NEXT: vmovdqu 32(%rdi), %xmm2 +; X64-AVX1-NEXT: vmovdqu 48(%rdi), %xmm3 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm3, %xmm3 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm2, %xmm2 +; X64-AVX1-NEXT: vpor %xmm3, %xmm2, %xmm2 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm1, %xmm1 +; X64-AVX1-NEXT: vpor %xmm2, %xmm1, %xmm1 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0 +; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0 +; X64-AVX1-NEXT: vptest %xmm0, %xmm0 ; X64-AVX1-NEXT: sete %al -; X64-AVX1-NEXT: vzeroupper ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length64_eq_const: @@ -4046,17 +4073,12 @@ define i1 @length96_eq(i8* %x, i8* %y) nounwind { ; ; X64-AVX1-LABEL: length96_eq: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1 -; X64-AVX1-NEXT: vmovups 64(%rdi), %ymm2 -; X64-AVX1-NEXT: vxorps 32(%rsi), %ymm1, %ymm1 -; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0 -; X64-AVX1-NEXT: vxorps 64(%rsi), %ymm2, %ymm2 -; X64-AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: pushq %rax +; X64-AVX1-NEXT: movl $96, %edx +; X64-AVX1-NEXT: callq memcmp +; X64-AVX1-NEXT: testl %eax, %eax ; X64-AVX1-NEXT: setne %al -; X64-AVX1-NEXT: vzeroupper +; X64-AVX1-NEXT: popq %rcx ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length96_eq: @@ -4211,17 +4233,13 @@ define i1 @length96_eq_const(i8* %X) nounwind { ; ; X64-AVX1-LABEL: length96_eq_const: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1 -; X64-AVX1-NEXT: vmovups 64(%rdi), %ymm2 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm2, %ymm2 -; X64-AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: pushq %rax +; X64-AVX1-NEXT: movl $.L.str, %esi +; X64-AVX1-NEXT: movl $96, %edx +; X64-AVX1-NEXT: callq memcmp +; X64-AVX1-NEXT: testl %eax, %eax ; X64-AVX1-NEXT: sete %al -; X64-AVX1-NEXT: vzeroupper +; X64-AVX1-NEXT: popq %rcx ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length96_eq_const: @@ -4337,20 +4355,12 @@ define i1 @length127_eq(i8* %x, i8* %y) nounwind { ; ; X64-AVX1-LABEL: length127_eq: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1 -; X64-AVX1-NEXT: vmovups 64(%rdi), %ymm2 -; X64-AVX1-NEXT: vmovups 95(%rdi), %ymm3 -; X64-AVX1-NEXT: vxorps 95(%rsi), %ymm3, %ymm3 -; X64-AVX1-NEXT: vxorps 64(%rsi), %ymm2, %ymm2 -; X64-AVX1-NEXT: vorps %ymm3, %ymm2, %ymm2 -; X64-AVX1-NEXT: vxorps 32(%rsi), %ymm1, %ymm1 -; X64-AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1 -; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: pushq %rax +; X64-AVX1-NEXT: movl $127, %edx +; X64-AVX1-NEXT: callq memcmp +; X64-AVX1-NEXT: testl %eax, %eax ; X64-AVX1-NEXT: setne %al -; X64-AVX1-NEXT: vzeroupper +; X64-AVX1-NEXT: popq %rcx ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length127_eq: @@ -4509,20 +4519,13 @@ define i1 @length127_eq_const(i8* %X) nounwind { ; ; X64-AVX1-LABEL: length127_eq_const: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1 -; X64-AVX1-NEXT: vmovups 64(%rdi), %ymm2 -; X64-AVX1-NEXT: vmovups 95(%rdi), %ymm3 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm3, %ymm3 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm2, %ymm2 -; X64-AVX1-NEXT: vorps %ymm3, %ymm2, %ymm2 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1 -; X64-AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: pushq %rax +; X64-AVX1-NEXT: movl $.L.str, %esi +; X64-AVX1-NEXT: movl $127, %edx +; X64-AVX1-NEXT: callq memcmp +; X64-AVX1-NEXT: testl %eax, %eax ; X64-AVX1-NEXT: sete %al -; X64-AVX1-NEXT: vzeroupper +; X64-AVX1-NEXT: popq %rcx ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length127_eq_const: @@ -4645,20 +4648,12 @@ define i1 @length128_eq(i8* %x, i8* %y) nounwind { ; ; X64-AVX1-LABEL: length128_eq: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1 -; X64-AVX1-NEXT: vmovups 64(%rdi), %ymm2 -; X64-AVX1-NEXT: vmovups 96(%rdi), %ymm3 -; X64-AVX1-NEXT: vxorps 96(%rsi), %ymm3, %ymm3 -; X64-AVX1-NEXT: vxorps 64(%rsi), %ymm2, %ymm2 -; X64-AVX1-NEXT: vorps %ymm3, %ymm2, %ymm2 -; X64-AVX1-NEXT: vxorps 32(%rsi), %ymm1, %ymm1 -; X64-AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1 -; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: pushq %rax +; X64-AVX1-NEXT: movl $128, %edx +; X64-AVX1-NEXT: callq memcmp +; X64-AVX1-NEXT: testl %eax, %eax ; X64-AVX1-NEXT: setne %al -; X64-AVX1-NEXT: vzeroupper +; X64-AVX1-NEXT: popq %rcx ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length128_eq: @@ -4817,20 +4812,13 @@ define i1 @length128_eq_const(i8* %X) nounwind { ; ; X64-AVX1-LABEL: length128_eq_const: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1 -; X64-AVX1-NEXT: vmovups 64(%rdi), %ymm2 -; X64-AVX1-NEXT: vmovups 96(%rdi), %ymm3 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm3, %ymm3 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm2, %ymm2 -; X64-AVX1-NEXT: vorps %ymm3, %ymm2, %ymm2 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1 -; X64-AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: pushq %rax +; X64-AVX1-NEXT: movl $.L.str, %esi +; X64-AVX1-NEXT: movl $128, %edx +; X64-AVX1-NEXT: callq memcmp +; X64-AVX1-NEXT: testl %eax, %eax ; X64-AVX1-NEXT: sete %al -; X64-AVX1-NEXT: vzeroupper +; X64-AVX1-NEXT: popq %rcx ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length128_eq_const: diff --git a/llvm/test/CodeGen/X86/memcmp.ll b/llvm/test/CodeGen/X86/memcmp.ll index 793b4e39284..04f3ade7536 100644 --- a/llvm/test/CodeGen/X86/memcmp.ll +++ b/llvm/test/CodeGen/X86/memcmp.ll @@ -2007,11 +2007,13 @@ define i1 @length32_eq(i8* %x, i8* %y) nounwind { ; ; X64-AVX1-LABEL: length32_eq: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0 +; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1 +; X64-AVX1-NEXT: vpxor 16(%rsi), %xmm1, %xmm1 +; X64-AVX1-NEXT: vpxor (%rsi), %xmm0, %xmm0 +; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0 +; X64-AVX1-NEXT: vptest %xmm0, %xmm0 ; X64-AVX1-NEXT: sete %al -; X64-AVX1-NEXT: vzeroupper ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length32_eq: @@ -2286,11 +2288,13 @@ define i1 @length32_eq_const(i8* %X) nounwind { ; ; X64-AVX1-LABEL: length32_eq_const: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0 +; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm1, %xmm1 +; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0 +; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0 +; X64-AVX1-NEXT: vptest %xmm0, %xmm0 ; X64-AVX1-NEXT: setne %al -; X64-AVX1-NEXT: vzeroupper ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length32_eq_const: @@ -2369,15 +2373,12 @@ define i1 @length48_eq(i8* %x, i8* %y) nounwind { ; ; X64-AVX1-LABEL: length48_eq: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 32(%rdi), %xmm1 -; X64-AVX1-NEXT: vmovups 32(%rsi), %xmm2 -; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0 -; X64-AVX1-NEXT: vxorps %ymm2, %ymm1, %ymm1 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: pushq %rax +; X64-AVX1-NEXT: movl $48, %edx +; X64-AVX1-NEXT: callq memcmp +; X64-AVX1-NEXT: testl %eax, %eax ; X64-AVX1-NEXT: sete %al -; X64-AVX1-NEXT: vzeroupper +; X64-AVX1-NEXT: popq %rcx ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length48_eq: @@ -2530,14 +2531,13 @@ define i1 @length48_eq_const(i8* %X) nounwind { ; ; X64-AVX1-LABEL: length48_eq_const: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 32(%rdi), %xmm1 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: pushq %rax +; X64-AVX1-NEXT: movl $.L.str, %esi +; X64-AVX1-NEXT: movl $48, %edx +; X64-AVX1-NEXT: callq memcmp +; X64-AVX1-NEXT: testl %eax, %eax ; X64-AVX1-NEXT: setne %al -; X64-AVX1-NEXT: vzeroupper +; X64-AVX1-NEXT: popq %rcx ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length48_eq_const: @@ -2625,14 +2625,12 @@ define i1 @length63_eq(i8* %x, i8* %y) nounwind { ; ; X64-AVX1-LABEL: length63_eq: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 31(%rdi), %ymm1 -; X64-AVX1-NEXT: vxorps 31(%rsi), %ymm1, %ymm1 -; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: pushq %rax +; X64-AVX1-NEXT: movl $63, %edx +; X64-AVX1-NEXT: callq memcmp +; X64-AVX1-NEXT: testl %eax, %eax ; X64-AVX1-NEXT: setne %al -; X64-AVX1-NEXT: vzeroupper +; X64-AVX1-NEXT: popq %rcx ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length63_eq: @@ -2756,14 +2754,13 @@ define i1 @length63_eq_const(i8* %X) nounwind { ; ; X64-AVX1-LABEL: length63_eq_const: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 31(%rdi), %ymm1 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: pushq %rax +; X64-AVX1-NEXT: movl $.L.str, %esi +; X64-AVX1-NEXT: movl $63, %edx +; X64-AVX1-NEXT: callq memcmp +; X64-AVX1-NEXT: testl %eax, %eax ; X64-AVX1-NEXT: sete %al -; X64-AVX1-NEXT: vzeroupper +; X64-AVX1-NEXT: popq %rcx ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length63_eq_const: @@ -2851,14 +2848,12 @@ define i1 @length64_eq(i8* %x, i8* %y) nounwind { ; ; X64-AVX1-LABEL: length64_eq: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1 -; X64-AVX1-NEXT: vxorps 32(%rsi), %ymm1, %ymm1 -; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: pushq %rax +; X64-AVX1-NEXT: movl $64, %edx +; X64-AVX1-NEXT: callq memcmp +; X64-AVX1-NEXT: testl %eax, %eax ; X64-AVX1-NEXT: setne %al -; X64-AVX1-NEXT: vzeroupper +; X64-AVX1-NEXT: popq %rcx ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length64_eq: @@ -2997,14 +2992,13 @@ define i1 @length64_eq_const(i8* %X) nounwind { ; ; X64-AVX1-LABEL: length64_eq_const: ; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vmovups (%rdi), %ymm0 -; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1 -; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 -; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 -; X64-AVX1-NEXT: vptest %ymm0, %ymm0 +; X64-AVX1-NEXT: pushq %rax +; X64-AVX1-NEXT: movl $.L.str, %esi +; X64-AVX1-NEXT: movl $64, %edx +; X64-AVX1-NEXT: callq memcmp +; X64-AVX1-NEXT: testl %eax, %eax ; X64-AVX1-NEXT: sete %al -; X64-AVX1-NEXT: vzeroupper +; X64-AVX1-NEXT: popq %rcx ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: length64_eq_const: |

