Skip to content

Commit 32a38fd

Browse files
author
git apple-llvm automerger
committed
Merge commit 'b314cae034a0' from apple/master into swift/master-next
2 parents 1281d90 + b314cae commit 32a38fd

File tree

3 files changed

+176
-159
lines changed

3 files changed

+176
-159
lines changed

llvm/lib/Target/X86/X86TargetTransformInfo.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3444,10 +3444,9 @@ X86TTIImpl::enableMemCmpExpansion(bool OptSize, bool IsZeroCmp) const {
34443444
// version is not as fast for three way compare (see #33329).
34453445
const unsigned PreferredWidth = ST->getPreferVectorWidth();
34463446
if (PreferredWidth >= 512 && ST->hasAVX512()) Options.LoadSizes.push_back(64);
3447-
if (PreferredWidth >= 256 && ST->hasAVX2()) Options.LoadSizes.push_back(32);
3447+
if (PreferredWidth >= 256 && ST->hasAVX()) Options.LoadSizes.push_back(32);
34483448
if (PreferredWidth >= 128 && ST->hasSSE2()) Options.LoadSizes.push_back(16);
3449-
// All GPR and vector loads can be unaligned. SIMD compare requires integer
3450-
// vectors (SSE2/AVX2).
3449+
// All GPR and vector loads can be unaligned.
34513450
Options.AllowOverlappingLoads = true;
34523451
}
34533452
if (ST->is64Bit()) {

llvm/test/CodeGen/X86/memcmp-more-load-pairs.ll

Lines changed: 123 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -2312,13 +2312,11 @@ define i1 @length32_eq(i8* %x, i8* %y) nounwind {
23122312
;
23132313
; X64-AVX1-LABEL: length32_eq:
23142314
; X64-AVX1: # %bb.0:
2315-
; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0
2316-
; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1
2317-
; X64-AVX1-NEXT: vpxor 16(%rsi), %xmm1, %xmm1
2318-
; X64-AVX1-NEXT: vpxor (%rsi), %xmm0, %xmm0
2319-
; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0
2320-
; X64-AVX1-NEXT: vptest %xmm0, %xmm0
2315+
; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
2316+
; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
2317+
; X64-AVX1-NEXT: vptest %ymm0, %ymm0
23212318
; X64-AVX1-NEXT: sete %al
2319+
; X64-AVX1-NEXT: vzeroupper
23222320
; X64-AVX1-NEXT: retq
23232321
;
23242322
; X64-AVX2-LABEL: length32_eq:
@@ -2653,13 +2651,11 @@ define i1 @length32_eq_const(i8* %X) nounwind {
26532651
;
26542652
; X64-AVX1-LABEL: length32_eq_const:
26552653
; X64-AVX1: # %bb.0:
2656-
; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0
2657-
; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1
2658-
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm1, %xmm1
2659-
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
2660-
; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0
2661-
; X64-AVX1-NEXT: vptest %xmm0, %xmm0
2654+
; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
2655+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0
2656+
; X64-AVX1-NEXT: vptest %ymm0, %ymm0
26622657
; X64-AVX1-NEXT: setne %al
2658+
; X64-AVX1-NEXT: vzeroupper
26632659
; X64-AVX1-NEXT: retq
26642660
;
26652661
; X64-AVX2-LABEL: length32_eq_const:
@@ -2814,16 +2810,15 @@ define i1 @length48_eq(i8* %x, i8* %y) nounwind {
28142810
;
28152811
; X64-AVX1-LABEL: length48_eq:
28162812
; X64-AVX1: # %bb.0:
2817-
; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0
2818-
; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1
2819-
; X64-AVX1-NEXT: vmovdqu 32(%rdi), %xmm2
2820-
; X64-AVX1-NEXT: vpxor 16(%rsi), %xmm1, %xmm1
2821-
; X64-AVX1-NEXT: vpxor (%rsi), %xmm0, %xmm0
2822-
; X64-AVX1-NEXT: vpxor 32(%rsi), %xmm2, %xmm2
2823-
; X64-AVX1-NEXT: vpor %xmm2, %xmm1, %xmm1
2824-
; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0
2825-
; X64-AVX1-NEXT: vptest %xmm0, %xmm0
2813+
; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
2814+
; X64-AVX1-NEXT: vmovups 32(%rdi), %xmm1
2815+
; X64-AVX1-NEXT: vmovups 32(%rsi), %xmm2
2816+
; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
2817+
; X64-AVX1-NEXT: vxorps %ymm2, %ymm1, %ymm1
2818+
; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
2819+
; X64-AVX1-NEXT: vptest %ymm0, %ymm0
28262820
; X64-AVX1-NEXT: sete %al
2821+
; X64-AVX1-NEXT: vzeroupper
28272822
; X64-AVX1-NEXT: retq
28282823
;
28292824
; X64-AVX2-LABEL: length48_eq:
@@ -3144,16 +3139,14 @@ define i1 @length48_eq_const(i8* %X) nounwind {
31443139
;
31453140
; X64-AVX1-LABEL: length48_eq_const:
31463141
; X64-AVX1: # %bb.0:
3147-
; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0
3148-
; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1
3149-
; X64-AVX1-NEXT: vmovdqu 32(%rdi), %xmm2
3150-
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm1, %xmm1
3151-
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
3152-
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm2, %xmm2
3153-
; X64-AVX1-NEXT: vpor %xmm2, %xmm1, %xmm1
3154-
; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0
3155-
; X64-AVX1-NEXT: vptest %xmm0, %xmm0
3142+
; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
3143+
; X64-AVX1-NEXT: vmovups 32(%rdi), %xmm1
3144+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0
3145+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1
3146+
; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
3147+
; X64-AVX1-NEXT: vptest %ymm0, %ymm0
31563148
; X64-AVX1-NEXT: setne %al
3149+
; X64-AVX1-NEXT: vzeroupper
31573150
; X64-AVX1-NEXT: retq
31583151
;
31593152
; X64-AVX2-LABEL: length48_eq_const:
@@ -3333,19 +3326,14 @@ define i1 @length63_eq(i8* %x, i8* %y) nounwind {
33333326
;
33343327
; X64-AVX1-LABEL: length63_eq:
33353328
; X64-AVX1: # %bb.0:
3336-
; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0
3337-
; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1
3338-
; X64-AVX1-NEXT: vmovdqu 32(%rdi), %xmm2
3339-
; X64-AVX1-NEXT: vmovdqu 47(%rdi), %xmm3
3340-
; X64-AVX1-NEXT: vpxor 47(%rsi), %xmm3, %xmm3
3341-
; X64-AVX1-NEXT: vpxor 32(%rsi), %xmm2, %xmm2
3342-
; X64-AVX1-NEXT: vpor %xmm3, %xmm2, %xmm2
3343-
; X64-AVX1-NEXT: vpxor 16(%rsi), %xmm1, %xmm1
3344-
; X64-AVX1-NEXT: vpor %xmm2, %xmm1, %xmm1
3345-
; X64-AVX1-NEXT: vpxor (%rsi), %xmm0, %xmm0
3346-
; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0
3347-
; X64-AVX1-NEXT: vptest %xmm0, %xmm0
3329+
; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
3330+
; X64-AVX1-NEXT: vmovups 31(%rdi), %ymm1
3331+
; X64-AVX1-NEXT: vxorps 31(%rsi), %ymm1, %ymm1
3332+
; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
3333+
; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
3334+
; X64-AVX1-NEXT: vptest %ymm0, %ymm0
33483335
; X64-AVX1-NEXT: setne %al
3336+
; X64-AVX1-NEXT: vzeroupper
33493337
; X64-AVX1-NEXT: retq
33503338
;
33513339
; X64-AVX2-LABEL: length63_eq:
@@ -3542,19 +3530,14 @@ define i1 @length63_eq_const(i8* %X) nounwind {
35423530
;
35433531
; X64-AVX1-LABEL: length63_eq_const:
35443532
; X64-AVX1: # %bb.0:
3545-
; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0
3546-
; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1
3547-
; X64-AVX1-NEXT: vmovdqu 32(%rdi), %xmm2
3548-
; X64-AVX1-NEXT: vmovdqu 47(%rdi), %xmm3
3549-
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm3, %xmm3
3550-
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm2, %xmm2
3551-
; X64-AVX1-NEXT: vpor %xmm3, %xmm2, %xmm2
3552-
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm1, %xmm1
3553-
; X64-AVX1-NEXT: vpor %xmm2, %xmm1, %xmm1
3554-
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
3555-
; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0
3556-
; X64-AVX1-NEXT: vptest %xmm0, %xmm0
3533+
; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
3534+
; X64-AVX1-NEXT: vmovups 31(%rdi), %ymm1
3535+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1
3536+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0
3537+
; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
3538+
; X64-AVX1-NEXT: vptest %ymm0, %ymm0
35573539
; X64-AVX1-NEXT: sete %al
3540+
; X64-AVX1-NEXT: vzeroupper
35583541
; X64-AVX1-NEXT: retq
35593542
;
35603543
; X64-AVX2-LABEL: length63_eq_const:
@@ -3734,19 +3717,14 @@ define i1 @length64_eq(i8* %x, i8* %y) nounwind {
37343717
;
37353718
; X64-AVX1-LABEL: length64_eq:
37363719
; X64-AVX1: # %bb.0:
3737-
; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0
3738-
; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1
3739-
; X64-AVX1-NEXT: vmovdqu 32(%rdi), %xmm2
3740-
; X64-AVX1-NEXT: vmovdqu 48(%rdi), %xmm3
3741-
; X64-AVX1-NEXT: vpxor 48(%rsi), %xmm3, %xmm3
3742-
; X64-AVX1-NEXT: vpxor 32(%rsi), %xmm2, %xmm2
3743-
; X64-AVX1-NEXT: vpor %xmm3, %xmm2, %xmm2
3744-
; X64-AVX1-NEXT: vpxor 16(%rsi), %xmm1, %xmm1
3745-
; X64-AVX1-NEXT: vpor %xmm2, %xmm1, %xmm1
3746-
; X64-AVX1-NEXT: vpxor (%rsi), %xmm0, %xmm0
3747-
; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0
3748-
; X64-AVX1-NEXT: vptest %xmm0, %xmm0
3720+
; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
3721+
; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1
3722+
; X64-AVX1-NEXT: vxorps 32(%rsi), %ymm1, %ymm1
3723+
; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
3724+
; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
3725+
; X64-AVX1-NEXT: vptest %ymm0, %ymm0
37493726
; X64-AVX1-NEXT: setne %al
3727+
; X64-AVX1-NEXT: vzeroupper
37503728
; X64-AVX1-NEXT: retq
37513729
;
37523730
; X64-AVX2-LABEL: length64_eq:
@@ -3958,19 +3936,14 @@ define i1 @length64_eq_const(i8* %X) nounwind {
39583936
;
39593937
; X64-AVX1-LABEL: length64_eq_const:
39603938
; X64-AVX1: # %bb.0:
3961-
; X64-AVX1-NEXT: vmovdqu (%rdi), %xmm0
3962-
; X64-AVX1-NEXT: vmovdqu 16(%rdi), %xmm1
3963-
; X64-AVX1-NEXT: vmovdqu 32(%rdi), %xmm2
3964-
; X64-AVX1-NEXT: vmovdqu 48(%rdi), %xmm3
3965-
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm3, %xmm3
3966-
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm2, %xmm2
3967-
; X64-AVX1-NEXT: vpor %xmm3, %xmm2, %xmm2
3968-
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm1, %xmm1
3969-
; X64-AVX1-NEXT: vpor %xmm2, %xmm1, %xmm1
3970-
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
3971-
; X64-AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0
3972-
; X64-AVX1-NEXT: vptest %xmm0, %xmm0
3939+
; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
3940+
; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1
3941+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1
3942+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0
3943+
; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
3944+
; X64-AVX1-NEXT: vptest %ymm0, %ymm0
39733945
; X64-AVX1-NEXT: sete %al
3946+
; X64-AVX1-NEXT: vzeroupper
39743947
; X64-AVX1-NEXT: retq
39753948
;
39763949
; X64-AVX2-LABEL: length64_eq_const:
@@ -4073,12 +4046,17 @@ define i1 @length96_eq(i8* %x, i8* %y) nounwind {
40734046
;
40744047
; X64-AVX1-LABEL: length96_eq:
40754048
; X64-AVX1: # %bb.0:
4076-
; X64-AVX1-NEXT: pushq %rax
4077-
; X64-AVX1-NEXT: movl $96, %edx
4078-
; X64-AVX1-NEXT: callq memcmp
4079-
; X64-AVX1-NEXT: testl %eax, %eax
4049+
; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
4050+
; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1
4051+
; X64-AVX1-NEXT: vmovups 64(%rdi), %ymm2
4052+
; X64-AVX1-NEXT: vxorps 32(%rsi), %ymm1, %ymm1
4053+
; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
4054+
; X64-AVX1-NEXT: vxorps 64(%rsi), %ymm2, %ymm2
4055+
; X64-AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1
4056+
; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
4057+
; X64-AVX1-NEXT: vptest %ymm0, %ymm0
40804058
; X64-AVX1-NEXT: setne %al
4081-
; X64-AVX1-NEXT: popq %rcx
4059+
; X64-AVX1-NEXT: vzeroupper
40824060
; X64-AVX1-NEXT: retq
40834061
;
40844062
; X64-AVX2-LABEL: length96_eq:
@@ -4233,13 +4211,17 @@ define i1 @length96_eq_const(i8* %X) nounwind {
42334211
;
42344212
; X64-AVX1-LABEL: length96_eq_const:
42354213
; X64-AVX1: # %bb.0:
4236-
; X64-AVX1-NEXT: pushq %rax
4237-
; X64-AVX1-NEXT: movl $.L.str, %esi
4238-
; X64-AVX1-NEXT: movl $96, %edx
4239-
; X64-AVX1-NEXT: callq memcmp
4240-
; X64-AVX1-NEXT: testl %eax, %eax
4214+
; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
4215+
; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1
4216+
; X64-AVX1-NEXT: vmovups 64(%rdi), %ymm2
4217+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1
4218+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0
4219+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm2, %ymm2
4220+
; X64-AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1
4221+
; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
4222+
; X64-AVX1-NEXT: vptest %ymm0, %ymm0
42414223
; X64-AVX1-NEXT: sete %al
4242-
; X64-AVX1-NEXT: popq %rcx
4224+
; X64-AVX1-NEXT: vzeroupper
42434225
; X64-AVX1-NEXT: retq
42444226
;
42454227
; X64-AVX2-LABEL: length96_eq_const:
@@ -4355,12 +4337,20 @@ define i1 @length127_eq(i8* %x, i8* %y) nounwind {
43554337
;
43564338
; X64-AVX1-LABEL: length127_eq:
43574339
; X64-AVX1: # %bb.0:
4358-
; X64-AVX1-NEXT: pushq %rax
4359-
; X64-AVX1-NEXT: movl $127, %edx
4360-
; X64-AVX1-NEXT: callq memcmp
4361-
; X64-AVX1-NEXT: testl %eax, %eax
4340+
; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
4341+
; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1
4342+
; X64-AVX1-NEXT: vmovups 64(%rdi), %ymm2
4343+
; X64-AVX1-NEXT: vmovups 95(%rdi), %ymm3
4344+
; X64-AVX1-NEXT: vxorps 95(%rsi), %ymm3, %ymm3
4345+
; X64-AVX1-NEXT: vxorps 64(%rsi), %ymm2, %ymm2
4346+
; X64-AVX1-NEXT: vorps %ymm3, %ymm2, %ymm2
4347+
; X64-AVX1-NEXT: vxorps 32(%rsi), %ymm1, %ymm1
4348+
; X64-AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1
4349+
; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
4350+
; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
4351+
; X64-AVX1-NEXT: vptest %ymm0, %ymm0
43624352
; X64-AVX1-NEXT: setne %al
4363-
; X64-AVX1-NEXT: popq %rcx
4353+
; X64-AVX1-NEXT: vzeroupper
43644354
; X64-AVX1-NEXT: retq
43654355
;
43664356
; X64-AVX2-LABEL: length127_eq:
@@ -4519,13 +4509,20 @@ define i1 @length127_eq_const(i8* %X) nounwind {
45194509
;
45204510
; X64-AVX1-LABEL: length127_eq_const:
45214511
; X64-AVX1: # %bb.0:
4522-
; X64-AVX1-NEXT: pushq %rax
4523-
; X64-AVX1-NEXT: movl $.L.str, %esi
4524-
; X64-AVX1-NEXT: movl $127, %edx
4525-
; X64-AVX1-NEXT: callq memcmp
4526-
; X64-AVX1-NEXT: testl %eax, %eax
4512+
; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
4513+
; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1
4514+
; X64-AVX1-NEXT: vmovups 64(%rdi), %ymm2
4515+
; X64-AVX1-NEXT: vmovups 95(%rdi), %ymm3
4516+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm3, %ymm3
4517+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm2, %ymm2
4518+
; X64-AVX1-NEXT: vorps %ymm3, %ymm2, %ymm2
4519+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1
4520+
; X64-AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1
4521+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0
4522+
; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
4523+
; X64-AVX1-NEXT: vptest %ymm0, %ymm0
45274524
; X64-AVX1-NEXT: sete %al
4528-
; X64-AVX1-NEXT: popq %rcx
4525+
; X64-AVX1-NEXT: vzeroupper
45294526
; X64-AVX1-NEXT: retq
45304527
;
45314528
; X64-AVX2-LABEL: length127_eq_const:
@@ -4648,12 +4645,20 @@ define i1 @length128_eq(i8* %x, i8* %y) nounwind {
46484645
;
46494646
; X64-AVX1-LABEL: length128_eq:
46504647
; X64-AVX1: # %bb.0:
4651-
; X64-AVX1-NEXT: pushq %rax
4652-
; X64-AVX1-NEXT: movl $128, %edx
4653-
; X64-AVX1-NEXT: callq memcmp
4654-
; X64-AVX1-NEXT: testl %eax, %eax
4648+
; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
4649+
; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1
4650+
; X64-AVX1-NEXT: vmovups 64(%rdi), %ymm2
4651+
; X64-AVX1-NEXT: vmovups 96(%rdi), %ymm3
4652+
; X64-AVX1-NEXT: vxorps 96(%rsi), %ymm3, %ymm3
4653+
; X64-AVX1-NEXT: vxorps 64(%rsi), %ymm2, %ymm2
4654+
; X64-AVX1-NEXT: vorps %ymm3, %ymm2, %ymm2
4655+
; X64-AVX1-NEXT: vxorps 32(%rsi), %ymm1, %ymm1
4656+
; X64-AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1
4657+
; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
4658+
; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
4659+
; X64-AVX1-NEXT: vptest %ymm0, %ymm0
46554660
; X64-AVX1-NEXT: setne %al
4656-
; X64-AVX1-NEXT: popq %rcx
4661+
; X64-AVX1-NEXT: vzeroupper
46574662
; X64-AVX1-NEXT: retq
46584663
;
46594664
; X64-AVX2-LABEL: length128_eq:
@@ -4812,13 +4817,20 @@ define i1 @length128_eq_const(i8* %X) nounwind {
48124817
;
48134818
; X64-AVX1-LABEL: length128_eq_const:
48144819
; X64-AVX1: # %bb.0:
4815-
; X64-AVX1-NEXT: pushq %rax
4816-
; X64-AVX1-NEXT: movl $.L.str, %esi
4817-
; X64-AVX1-NEXT: movl $128, %edx
4818-
; X64-AVX1-NEXT: callq memcmp
4819-
; X64-AVX1-NEXT: testl %eax, %eax
4820+
; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
4821+
; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1
4822+
; X64-AVX1-NEXT: vmovups 64(%rdi), %ymm2
4823+
; X64-AVX1-NEXT: vmovups 96(%rdi), %ymm3
4824+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm3, %ymm3
4825+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm2, %ymm2
4826+
; X64-AVX1-NEXT: vorps %ymm3, %ymm2, %ymm2
4827+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1
4828+
; X64-AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1
4829+
; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0
4830+
; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
4831+
; X64-AVX1-NEXT: vptest %ymm0, %ymm0
48204832
; X64-AVX1-NEXT: sete %al
4821-
; X64-AVX1-NEXT: popq %rcx
4833+
; X64-AVX1-NEXT: vzeroupper
48224834
; X64-AVX1-NEXT: retq
48234835
;
48244836
; X64-AVX2-LABEL: length128_eq_const:

0 commit comments

Comments
 (0)