Lines Matching +full:0 +full:x64

4 … llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=X64 --check-prefix=X64-SSE2
5 …nown-unknown -mattr=avx | FileCheck %s --check-prefix=X64 --check-prefix=X64-AVX --check-prefix=X6…
6 …own-unknown -mattr=avx2 | FileCheck %s --check-prefix=X64 --check-prefix=X64-AVX --check-prefix=X6…
18 ; X86: # %bb.0:
19 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
20 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
30 ; X64-LABEL: length2:
31 ; X64: # %bb.0:
32 ; X64-NEXT: movzwl (%rdi), %eax
33 ; X64-NEXT: movzwl (%rsi), %ecx
34 ; X64-NEXT: rolw $8, %ax
35 ; X64-NEXT: rolw $8, %cx
36 ; X64-NEXT: movzwl %ax, %eax
37 ; X64-NEXT: movzwl %cx, %ecx
38 ; X64-NEXT: subl %ecx, %eax
39 ; X64-NEXT: retq
46 ; X86: # %bb.0:
47 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
48 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
54 ; X64-LABEL: length2_eq:
55 ; X64: # %bb.0:
56 ; X64-NEXT: movzwl (%rdi), %eax
57 ; X64-NEXT: cmpw (%rsi), %ax
58 ; X64-NEXT: sete %al
59 ; X64-NEXT: retq
61 %c = icmp eq i32 %m, 0
67 ; X86: # %bb.0:
68 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
70 ; X86-NEXT: cmpl $12849, %eax # imm = 0x3231
74 ; X64-LABEL: length2_eq_const:
75 ; X64: # %bb.0:
76 ; X64-NEXT: movzwl (%rdi), %eax
77 ; X64-NEXT: cmpl $12849, %eax # imm = 0x3231
78 ; X64-NEXT: setne %al
79 ; X64-NEXT: retq
80 …%m = tail call i32 @memcmp(i8* %X, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i32 0,…
81 %c = icmp ne i32 %m, 0
87 ; X86: # %bb.0:
88 ; X86-NEXT: pushl $0
90 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
91 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
98 ; X64-LABEL: length2_eq_nobuiltin_attr:
99 ; X64: # %bb.0:
100 ; X64-NEXT: pushq %rax
101 ; X64-NEXT: movl $2, %edx
102 ; X64-NEXT: callq memcmp
103 ; X64-NEXT: testl %eax, %eax
104 ; X64-NEXT: sete %al
105 ; X64-NEXT: popq %rcx
106 ; X64-NEXT: retq
108 %c = icmp eq i32 %m, 0
114 ; X86: # %bb.0:
116 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
117 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
137 ; X64-LABEL: length3:
138 ; X64: # %bb.0:
139 ; X64-NEXT: movzwl (%rdi), %eax
140 ; X64-NEXT: movzwl (%rsi), %ecx
141 ; X64-NEXT: rolw $8, %ax
142 ; X64-NEXT: rolw $8, %cx
143 ; X64-NEXT: cmpw %cx, %ax
144 ; X64-NEXT: jne .LBB4_3
145 ; X64-NEXT: # %bb.1: # %loadbb1
146 ; X64-NEXT: movzbl 2(%rdi), %eax
147 ; X64-NEXT: movzbl 2(%rsi), %ecx
148 ; X64-NEXT: subl %ecx, %eax
149 ; X64-NEXT: retq
150 ; X64-NEXT: .LBB4_3: # %res_block
151 ; X64-NEXT: setae %al
152 ; X64-NEXT: movzbl %al, %eax
153 ; X64-NEXT: leal -1(%rax,%rax), %eax
154 ; X64-NEXT: retq
161 ; X86: # %bb.0:
162 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
163 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
173 ; X64-LABEL: length3_eq:
174 ; X64: # %bb.0:
175 ; X64-NEXT: movzwl (%rdi), %eax
176 ; X64-NEXT: xorw (%rsi), %ax
177 ; X64-NEXT: movb 2(%rdi), %cl
178 ; X64-NEXT: xorb 2(%rsi), %cl
179 ; X64-NEXT: movzbl %cl, %ecx
180 ; X64-NEXT: orw %ax, %cx
181 ; X64-NEXT: setne %al
182 ; X64-NEXT: retq
184 %c = icmp ne i32 %m, 0
190 ; X86: # %bb.0:
191 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
192 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
200 ; X86-NEXT: sbbl $0, %eax
203 ; X64-LABEL: length4:
204 ; X64: # %bb.0:
205 ; X64-NEXT: movl (%rdi), %ecx
206 ; X64-NEXT: movl (%rsi), %edx
207 ; X64-NEXT: bswapl %ecx
208 ; X64-NEXT: bswapl %edx
209 ; X64-NEXT: xorl %eax, %eax
210 ; X64-NEXT: cmpl %edx, %ecx
211 ; X64-NEXT: seta %al
212 ; X64-NEXT: sbbl $0, %eax
213 ; X64-NEXT: retq
220 ; X86: # %bb.0:
221 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
222 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
228 ; X64-LABEL: length4_eq:
229 ; X64: # %bb.0:
230 ; X64-NEXT: movl (%rdi), %eax
231 ; X64-NEXT: cmpl (%rsi), %eax
232 ; X64-NEXT: setne %al
233 ; X64-NEXT: retq
235 %c = icmp ne i32 %m, 0
241 ; X86: # %bb.0:
242 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
243 ; X86-NEXT: cmpl $875770417, (%eax) # imm = 0x34333231
247 ; X64-LABEL: length4_eq_const:
248 ; X64: # %bb.0:
249 ; X64-NEXT: cmpl $875770417, (%rdi) # imm = 0x34333231
250 ; X64-NEXT: sete %al
251 ; X64-NEXT: retq
252 …%m = tail call i32 @memcmp(i8* %X, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i32 0,…
253 %c = icmp eq i32 %m, 0
259 ; X86: # %bb.0:
261 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
262 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
282 ; X64-LABEL: length5:
283 ; X64: # %bb.0:
284 ; X64-NEXT: movl (%rdi), %eax
285 ; X64-NEXT: movl (%rsi), %ecx
286 ; X64-NEXT: bswapl %eax
287 ; X64-NEXT: bswapl %ecx
288 ; X64-NEXT: cmpl %ecx, %eax
289 ; X64-NEXT: jne .LBB9_3
290 ; X64-NEXT: # %bb.1: # %loadbb1
291 ; X64-NEXT: movzbl 4(%rdi), %eax
292 ; X64-NEXT: movzbl 4(%rsi), %ecx
293 ; X64-NEXT: subl %ecx, %eax
294 ; X64-NEXT: retq
295 ; X64-NEXT: .LBB9_3: # %res_block
296 ; X64-NEXT: setae %al
297 ; X64-NEXT: movzbl %al, %eax
298 ; X64-NEXT: leal -1(%rax,%rax), %eax
299 ; X64-NEXT: retq
306 ; X86: # %bb.0:
307 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
308 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
318 ; X64-LABEL: length5_eq:
319 ; X64: # %bb.0:
320 ; X64-NEXT: movl (%rdi), %eax
321 ; X64-NEXT: xorl (%rsi), %eax
322 ; X64-NEXT: movb 4(%rdi), %cl
323 ; X64-NEXT: xorb 4(%rsi), %cl
324 ; X64-NEXT: movzbl %cl, %ecx
325 ; X64-NEXT: orl %eax, %ecx
326 ; X64-NEXT: setne %al
327 ; X64-NEXT: retq
329 %c = icmp ne i32 %m, 0
335 ; X86: # %bb.0:
337 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
338 ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
362 ; X64-LABEL: length8:
363 ; X64: # %bb.0:
364 ; X64-NEXT: movq (%rdi), %rcx
365 ; X64-NEXT: movq (%rsi), %rdx
366 ; X64-NEXT: bswapq %rcx
367 ; X64-NEXT: bswapq %rdx
368 ; X64-NEXT: xorl %eax, %eax
369 ; X64-NEXT: cmpq %rdx, %rcx
370 ; X64-NEXT: seta %al
371 ; X64-NEXT: sbbl $0, %eax
372 ; X64-NEXT: retq
379 ; X86: # %bb.0:
380 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
381 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
390 ; X64-LABEL: length8_eq:
391 ; X64: # %bb.0:
392 ; X64-NEXT: movq (%rdi), %rax
393 ; X64-NEXT: cmpq (%rsi), %rax
394 ; X64-NEXT: sete %al
395 ; X64-NEXT: retq
397 %c = icmp eq i32 %m, 0
403 ; X86: # %bb.0:
404 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
405 ; X86-NEXT: movl $858927408, %ecx # imm = 0x33323130
407 ; X86-NEXT: movl $926299444, %edx # imm = 0x37363534
413 ; X64-LABEL: length8_eq_const:
414 ; X64: # %bb.0:
415 ; X64-NEXT: movabsq $3978425819141910832, %rax # imm = 0x3736353433323130
416 ; X64-NEXT: cmpq %rax, (%rdi)
417 ; X64-NEXT: setne %al
418 ; X64-NEXT: retq
419 …cmp(i8* %X, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i32 0, i32 0), i64 8) nounwind
420 %c = icmp ne i32 %m, 0
426 ; X86: # %bb.0:
427 ; X86-NEXT: pushl $0
429 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
430 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
437 ; X64-LABEL: length12_eq:
438 ; X64: # %bb.0:
439 ; X64-NEXT: movq (%rdi), %rax
440 ; X64-NEXT: xorq (%rsi), %rax
441 ; X64-NEXT: movl 8(%rdi), %ecx
442 ; X64-NEXT: xorl 8(%rsi), %ecx
443 ; X64-NEXT: orq %rax, %rcx
444 ; X64-NEXT: setne %al
445 ; X64-NEXT: retq
447 %c = icmp ne i32 %m, 0
453 ; X86: # %bb.0:
454 ; X86-NEXT: pushl $0
456 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
457 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
462 ; X64-LABEL: length12:
463 ; X64: # %bb.0:
464 ; X64-NEXT: movq (%rdi), %rcx
465 ; X64-NEXT: movq (%rsi), %rdx
466 ; X64-NEXT: bswapq %rcx
467 ; X64-NEXT: bswapq %rdx
468 ; X64-NEXT: cmpq %rdx, %rcx
469 ; X64-NEXT: jne .LBB15_2
470 ; X64-NEXT: # %bb.1: # %loadbb1
471 ; X64-NEXT: movl 8(%rdi), %ecx
472 ; X64-NEXT: movl 8(%rsi), %edx
473 ; X64-NEXT: bswapl %ecx
474 ; X64-NEXT: bswapl %edx
475 ; X64-NEXT: xorl %eax, %eax
476 ; X64-NEXT: cmpq %rdx, %rcx
477 ; X64-NEXT: je .LBB15_3
478 ; X64-NEXT: .LBB15_2: # %res_block
479 ; X64-NEXT: xorl %eax, %eax
480 ; X64-NEXT: cmpq %rdx, %rcx
481 ; X64-NEXT: setae %al
482 ; X64-NEXT: leal -1(%rax,%rax), %eax
483 ; X64-NEXT: .LBB15_3: # %endblock
484 ; X64-NEXT: retq
493 ; X86: # %bb.0:
494 ; X86-NEXT: pushl $0
496 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
497 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
502 ; X64-LABEL: length16:
503 ; X64: # %bb.0:
504 ; X64-NEXT: movq (%rdi), %rcx
505 ; X64-NEXT: movq (%rsi), %rdx
506 ; X64-NEXT: bswapq %rcx
507 ; X64-NEXT: bswapq %rdx
508 ; X64-NEXT: cmpq %rdx, %rcx
509 ; X64-NEXT: jne .LBB16_2
510 ; X64-NEXT: # %bb.1: # %loadbb1
511 ; X64-NEXT: movq 8(%rdi), %rcx
512 ; X64-NEXT: movq 8(%rsi), %rdx
513 ; X64-NEXT: bswapq %rcx
514 ; X64-NEXT: bswapq %rdx
515 ; X64-NEXT: xorl %eax, %eax
516 ; X64-NEXT: cmpq %rdx, %rcx
517 ; X64-NEXT: je .LBB16_3
518 ; X64-NEXT: .LBB16_2: # %res_block
519 ; X64-NEXT: xorl %eax, %eax
520 ; X64-NEXT: cmpq %rdx, %rcx
521 ; X64-NEXT: setae %al
522 ; X64-NEXT: leal -1(%rax,%rax), %eax
523 ; X64-NEXT: .LBB16_3: # %endblock
524 ; X64-NEXT: retq
531 ; X86-NOSSE: # %bb.0:
532 ; X86-NOSSE-NEXT: pushl $0
534 ; X86-NOSSE-NEXT: pushl {{[0-9]+}}(%esp)
535 ; X86-NOSSE-NEXT: pushl {{[0-9]+}}(%esp)
543 ; X86-SSE2: # %bb.0:
544 ; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax
545 ; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %ecx
550 ; X86-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
554 ; X64-SSE2-LABEL: length16_eq:
555 ; X64-SSE2: # %bb.0:
556 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
557 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm1
558 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm1
559 ; X64-SSE2-NEXT: pmovmskb %xmm1, %eax
560 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
561 ; X64-SSE2-NEXT: setne %al
562 ; X64-SSE2-NEXT: retq
564 ; X64-AVX-LABEL: length16_eq:
565 ; X64-AVX: # %bb.0:
566 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
567 ; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
568 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
569 ; X64-AVX-NEXT: setne %al
570 ; X64-AVX-NEXT: retq
572 %cmp = icmp ne i32 %call, 0
578 ; X86-NOSSE: # %bb.0:
579 ; X86-NOSSE-NEXT: pushl $0
582 ; X86-NOSSE-NEXT: pushl {{[0-9]+}}(%esp)
590 ; X86-SSE2: # %bb.0:
591 ; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax
595 ; X86-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
599 ; X64-SSE2-LABEL: length16_eq_const:
600 ; X64-SSE2: # %bb.0:
601 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
602 ; X64-SSE2-NEXT: pcmpeqb {{.*}}(%rip), %xmm0
603 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
604 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
605 ; X64-SSE2-NEXT: sete %al
606 ; X64-SSE2-NEXT: retq
608 ; X64-AVX-LABEL: length16_eq_const:
609 ; X64-AVX: # %bb.0:
610 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
611 ; X64-AVX-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
612 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
613 ; X64-AVX-NEXT: sete %al
614 ; X64-AVX-NEXT: retq
615 …mp(i8* %X, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i32 0, i32 0), i64 16) nounwind
616 %c = icmp eq i32 %m, 0
624 ; X86: # %bb.0:
625 ; X86-NEXT: pushl $0
627 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
628 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
633 ; X64-LABEL: length24:
634 ; X64: # %bb.0:
635 ; X64-NEXT: movl $24, %edx
636 ; X64-NEXT: jmp memcmp # TAILCALL
643 ; X86-NOSSE: # %bb.0:
644 ; X86-NOSSE-NEXT: pushl $0
646 ; X86-NOSSE-NEXT: pushl {{[0-9]+}}(%esp)
647 ; X86-NOSSE-NEXT: pushl {{[0-9]+}}(%esp)
655 ; X86-SSE2: # %bb.0:
656 ; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax
657 ; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %ecx
666 ; X86-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
670 ; X64-SSE2-LABEL: length24_eq:
671 ; X64-SSE2: # %bb.0:
672 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
673 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm1
674 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm1
675 ; X64-SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
676 ; X64-SSE2-NEXT: movq {{.*#+}} xmm2 = mem[0],zero
677 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm2
678 ; X64-SSE2-NEXT: pand %xmm1, %xmm2
679 ; X64-SSE2-NEXT: pmovmskb %xmm2, %eax
680 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
681 ; X64-SSE2-NEXT: sete %al
682 ; X64-SSE2-NEXT: retq
684 ; X64-AVX-LABEL: length24_eq:
685 ; X64-AVX: # %bb.0:
686 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
687 ; X64-AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
688 ; X64-AVX-NEXT: vmovq {{.*#+}} xmm2 = mem[0],zero
689 ; X64-AVX-NEXT: vpxor %xmm2, %xmm1, %xmm1
690 ; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
691 ; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
692 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
693 ; X64-AVX-NEXT: sete %al
694 ; X64-AVX-NEXT: retq
696 %cmp = icmp eq i32 %call, 0
702 ; X86-NOSSE: # %bb.0:
703 ; X86-NOSSE-NEXT: pushl $0
706 ; X86-NOSSE-NEXT: pushl {{[0-9]+}}(%esp)
714 ; X86-SSE2: # %bb.0:
715 ; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax
722 ; X86-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
726 ; X64-SSE2-LABEL: length24_eq_const:
727 ; X64-SSE2: # %bb.0:
728 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
729 ; X64-SSE2-NEXT: movq {{.*#+}} xmm1 = mem[0],zero
730 ; X64-SSE2-NEXT: pcmpeqb {{.*}}(%rip), %xmm1
731 ; X64-SSE2-NEXT: pcmpeqb {{.*}}(%rip), %xmm0
732 ; X64-SSE2-NEXT: pand %xmm1, %xmm0
733 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
734 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
735 ; X64-SSE2-NEXT: setne %al
736 ; X64-SSE2-NEXT: retq
738 ; X64-AVX-LABEL: length24_eq_const:
739 ; X64-AVX: # %bb.0:
740 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
741 ; X64-AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
742 ; X64-AVX-NEXT: vpxor {{.*}}(%rip), %xmm1, %xmm1
743 ; X64-AVX-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
744 ; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
745 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
746 ; X64-AVX-NEXT: setne %al
747 ; X64-AVX-NEXT: retq
748 …mp(i8* %X, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i32 0, i32 0), i64 24) nounwind
749 %c = icmp ne i32 %m, 0
755 ; X86: # %bb.0:
756 ; X86-NEXT: pushl $0
758 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
759 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
764 ; X64-LABEL: length32:
765 ; X64: # %bb.0:
766 ; X64-NEXT: movl $32, %edx
767 ; X64-NEXT: jmp memcmp # TAILCALL
776 ; X86-NOSSE: # %bb.0:
777 ; X86-NOSSE-NEXT: pushl $0
779 ; X86-NOSSE-NEXT: pushl {{[0-9]+}}(%esp)
780 ; X86-NOSSE-NEXT: pushl {{[0-9]+}}(%esp)
788 ; X86-SSE2: # %bb.0:
789 ; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax
790 ; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %ecx
799 ; X86-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
803 ; X64-SSE2-LABEL: length32_eq:
804 ; X64-SSE2: # %bb.0:
805 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
806 ; X64-SSE2-NEXT: movdqu 16(%rdi), %xmm1
807 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm2
808 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm2
809 ; X64-SSE2-NEXT: movdqu 16(%rsi), %xmm0
810 ; X64-SSE2-NEXT: pcmpeqb %xmm1, %xmm0
811 ; X64-SSE2-NEXT: pand %xmm2, %xmm0
812 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
813 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
814 ; X64-SSE2-NEXT: sete %al
815 ; X64-SSE2-NEXT: retq
817 ; X64-AVX1-LABEL: length32_eq:
818 ; X64-AVX1: # %bb.0:
819 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
820 ; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
821 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
822 ; X64-AVX1-NEXT: sete %al
823 ; X64-AVX1-NEXT: vzeroupper
824 ; X64-AVX1-NEXT: retq
826 ; X64-AVX2-LABEL: length32_eq:
827 ; X64-AVX2: # %bb.0:
828 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
829 ; X64-AVX2-NEXT: vpxor (%rsi), %ymm0, %ymm0
830 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
831 ; X64-AVX2-NEXT: sete %al
832 ; X64-AVX2-NEXT: vzeroupper
833 ; X64-AVX2-NEXT: retq
835 %cmp = icmp eq i32 %call, 0
841 ; X86-NOSSE: # %bb.0:
842 ; X86-NOSSE-NEXT: pushl $0
845 ; X86-NOSSE-NEXT: pushl {{[0-9]+}}(%esp)
853 ; X86-SSE2: # %bb.0:
854 ; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax
861 ; X86-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
865 ; X64-SSE2-LABEL: length32_eq_const:
866 ; X64-SSE2: # %bb.0:
867 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
868 ; X64-SSE2-NEXT: movdqu 16(%rdi), %xmm1
869 ; X64-SSE2-NEXT: pcmpeqb {{.*}}(%rip), %xmm1
870 ; X64-SSE2-NEXT: pcmpeqb {{.*}}(%rip), %xmm0
871 ; X64-SSE2-NEXT: pand %xmm1, %xmm0
872 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
873 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
874 ; X64-SSE2-NEXT: setne %al
875 ; X64-SSE2-NEXT: retq
877 ; X64-AVX1-LABEL: length32_eq_const:
878 ; X64-AVX1: # %bb.0:
879 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
880 ; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0
881 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
882 ; X64-AVX1-NEXT: setne %al
883 ; X64-AVX1-NEXT: vzeroupper
884 ; X64-AVX1-NEXT: retq
886 ; X64-AVX2-LABEL: length32_eq_const:
887 ; X64-AVX2: # %bb.0:
888 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
889 ; X64-AVX2-NEXT: vpxor {{.*}}(%rip), %ymm0, %ymm0
890 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
891 ; X64-AVX2-NEXT: setne %al
892 ; X64-AVX2-NEXT: vzeroupper
893 ; X64-AVX2-NEXT: retq
894 …mp(i8* %X, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i32 0, i32 0), i64 32) nounwind
895 %c = icmp ne i32 %m, 0
901 ; X86: # %bb.0:
902 ; X86-NEXT: pushl $0
904 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
905 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
910 ; X64-LABEL: length64:
911 ; X64: # %bb.0:
912 ; X64-NEXT: movl $64, %edx
913 ; X64-NEXT: jmp memcmp # TAILCALL
920 ; X86: # %bb.0:
921 ; X86-NEXT: pushl $0
923 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
924 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
931 ; X64-SSE2-LABEL: length64_eq:
932 ; X64-SSE2: # %bb.0:
933 ; X64-SSE2-NEXT: pushq %rax
934 ; X64-SSE2-NEXT: movl $64, %edx
935 ; X64-SSE2-NEXT: callq memcmp
936 ; X64-SSE2-NEXT: testl %eax, %eax
937 ; X64-SSE2-NEXT: setne %al
938 ; X64-SSE2-NEXT: popq %rcx
939 ; X64-SSE2-NEXT: retq
941 ; X64-AVX1-LABEL: length64_eq:
942 ; X64-AVX1: # %bb.0:
943 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
944 ; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1
945 ; X64-AVX1-NEXT: vxorps 32(%rsi), %ymm1, %ymm1
946 ; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
947 ; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
948 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
949 ; X64-AVX1-NEXT: setne %al
950 ; X64-AVX1-NEXT: vzeroupper
951 ; X64-AVX1-NEXT: retq
953 ; X64-AVX2-LABEL: length64_eq:
954 ; X64-AVX2: # %bb.0:
955 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
956 ; X64-AVX2-NEXT: vmovdqu 32(%rdi), %ymm1
957 ; X64-AVX2-NEXT: vpxor 32(%rsi), %ymm1, %ymm1
958 ; X64-AVX2-NEXT: vpxor (%rsi), %ymm0, %ymm0
959 ; X64-AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
960 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
961 ; X64-AVX2-NEXT: setne %al
962 ; X64-AVX2-NEXT: vzeroupper
963 ; X64-AVX2-NEXT: retq
965 %cmp = icmp ne i32 %call, 0
971 ; X86: # %bb.0:
972 ; X86-NEXT: pushl $0
975 ; X86-NEXT: pushl {{[0-9]+}}(%esp)
982 ; X64-SSE2-LABEL: length64_eq_const:
983 ; X64-SSE2: # %bb.0:
984 ; X64-SSE2-NEXT: pushq %rax
985 ; X64-SSE2-NEXT: movl $.L.str, %esi
986 ; X64-SSE2-NEXT: movl $64, %edx
987 ; X64-SSE2-NEXT: callq memcmp
988 ; X64-SSE2-NEXT: testl %eax, %eax
989 ; X64-SSE2-NEXT: sete %al
990 ; X64-SSE2-NEXT: popq %rcx
991 ; X64-SSE2-NEXT: retq
993 ; X64-AVX1-LABEL: length64_eq_const:
994 ; X64-AVX1: # %bb.0:
995 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
996 ; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1
997 ; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1
998 ; X64-AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0
999 ; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1000 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1001 ; X64-AVX1-NEXT: sete %al
1002 ; X64-AVX1-NEXT: vzeroupper
1003 ; X64-AVX1-NEXT: retq
1005 ; X64-AVX2-LABEL: length64_eq_const:
1006 ; X64-AVX2: # %bb.0:
1007 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1008 ; X64-AVX2-NEXT: vmovdqu 32(%rdi), %ymm1
1009 ; X64-AVX2-NEXT: vpxor {{.*}}(%rip), %ymm1, %ymm1
1010 ; X64-AVX2-NEXT: vpxor {{.*}}(%rip), %ymm0, %ymm0
1011 ; X64-AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1012 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1013 ; X64-AVX2-NEXT: sete %al
1014 ; X64-AVX2-NEXT: vzeroupper
1015 ; X64-AVX2-NEXT: retq
1016 …mp(i8* %X, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i32 0, i32 0), i64 64) nounwind
1017 %c = icmp eq i32 %m, 0
1023 ; X86: # %bb.0:
1024 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1025 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
1035 ; X64-LABEL: bcmp_length2:
1036 ; X64: # %bb.0:
1037 ; X64-NEXT: movzwl (%rdi), %eax
1038 ; X64-NEXT: movzwl (%rsi), %ecx
1039 ; X64-NEXT: rolw $8, %ax
1040 ; X64-NEXT: rolw $8, %cx
1041 ; X64-NEXT: movzwl %ax, %eax
1042 ; X64-NEXT: movzwl %cx, %ecx
1043 ; X64-NEXT: subl %ecx, %eax
1044 ; X64-NEXT: retq
1049 !llvm.module.flags = !{!0}
1050 !0 = !{i32 1, !"ProfileSummary", !1}
1064 !14 = !{!"function_entry_count", i64 0}