Lines Matching +full:0 +full:x64
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=X64,X64-SSE,X64-SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=sse4.1 | FileCheck %s --check-prefixes=X64,X64-SSE,X64-SSE41
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX1
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx2 | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX2
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512bw,+prefer-256-bit | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX2
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512bw,-prefer-256-bit | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX512,X64-AVX512BW
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f,+prefer-256-bit,-prefer-mask-registers | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX2
9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f,-prefer-256-bit,-prefer-mask-registers | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX512,X64-AVX512F
10 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f,+prefer-256-bit,+prefer-mask-registers | FileCheck %s --check-prefixes=X64,X64-MIC-AVX,X64-MIC-AVX2
11 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f,-prefer-256-bit,+prefer-mask-registers | FileCheck %s --check-prefixes=X64,X64-MIC-AVX,X64-MIC-AVX512F
21 ; X64-LABEL: length0:
22 ; X64: # %bb.0:
23 ; X64-NEXT: xorl %eax, %eax
24 ; X64-NEXT: retq
25 %m = tail call i32 @memcmp(ptr %X, ptr %Y, i64 0) nounwind
30 ; X64-LABEL: length0_eq:
31 ; X64: # %bb.0:
32 ; X64-NEXT: movb $1, %al
33 ; X64-NEXT: retq
34 %m = tail call i32 @memcmp(ptr %X, ptr %Y, i64 0) nounwind
35 %c = icmp eq i32 %m, 0
40 ; X64-LABEL: length0_lt:
41 ; X64: # %bb.0:
42 ; X64-NEXT: xorl %eax, %eax
43 ; X64-NEXT: retq
44 %m = tail call i32 @memcmp(ptr %X, ptr %Y, i64 0) nounwind
45 %c = icmp slt i32 %m, 0
50 ; X64-LABEL: length2:
51 ; X64: # %bb.0:
52 ; X64-NEXT: movzwl (%rdi), %eax
53 ; X64-NEXT: movzwl (%rsi), %ecx
54 ; X64-NEXT: rolw $8, %ax
55 ; X64-NEXT: rolw $8, %cx
56 ; X64-NEXT: movzwl %ax, %eax
57 ; X64-NEXT: movzwl %cx, %ecx
58 ; X64-NEXT: subl %ecx, %eax
59 ; X64-NEXT: retq
65 ; X64-LABEL: length2_const:
66 ; X64: # %bb.0:
67 ; X64-NEXT: movzwl (%rdi), %eax
68 ; X64-NEXT: rolw $8, %ax
69 ; X64-NEXT: movzwl %ax, %eax
70 ; X64-NEXT: addl $-12594, %eax # imm = 0xCECE
71 ; X64-NEXT: retq
72 %m = tail call i32 @memcmp(ptr %X, ptr getelementptr inbounds ([513 x i8], ptr @.str, i32 0, i32 1), i64 2) nounwind
77 ; X64-LABEL: length2_gt_const:
78 ; X64: # %bb.0:
79 ; X64-NEXT: movzwl (%rdi), %eax
80 ; X64-NEXT: rolw $8, %ax
81 ; X64-NEXT: movzwl %ax, %eax
82 ; X64-NEXT: addl $-12594, %eax # imm = 0xCECE
83 ; X64-NEXT: testl %eax, %eax
84 ; X64-NEXT: setg %al
85 ; X64-NEXT: retq
86 %m = tail call i32 @memcmp(ptr %X, ptr getelementptr inbounds ([513 x i8], ptr @.str, i32 0, i32 1), i64 2) nounwind
87 %c = icmp sgt i32 %m, 0
92 ; X64-LABEL: length2_eq:
93 ; X64: # %bb.0:
94 ; X64-NEXT: movzwl (%rdi), %eax
95 ; X64-NEXT: cmpw (%rsi), %ax
96 ; X64-NEXT: sete %al
97 ; X64-NEXT: retq
99 %c = icmp eq i32 %m, 0
104 ; X64-LABEL: length2_lt:
105 ; X64: # %bb.0:
106 ; X64-NEXT: movzwl (%rdi), %eax
107 ; X64-NEXT: movzwl (%rsi), %ecx
108 ; X64-NEXT: rolw $8, %ax
109 ; X64-NEXT: rolw $8, %cx
110 ; X64-NEXT: movzwl %ax, %eax
111 ; X64-NEXT: movzwl %cx, %ecx
112 ; X64-NEXT: subl %ecx, %eax
113 ; X64-NEXT: shrl $31, %eax
114 ; X64-NEXT: # kill: def $al killed $al killed $eax
115 ; X64-NEXT: retq
117 %c = icmp slt i32 %m, 0
122 ; X64-LABEL: length2_gt:
123 ; X64: # %bb.0:
124 ; X64-NEXT: movzwl (%rdi), %eax
125 ; X64-NEXT: movzwl (%rsi), %ecx
126 ; X64-NEXT: rolw $8, %ax
127 ; X64-NEXT: rolw $8, %cx
128 ; X64-NEXT: movzwl %ax, %eax
129 ; X64-NEXT: movzwl %cx, %ecx
130 ; X64-NEXT: subl %ecx, %eax
131 ; X64-NEXT: testl %eax, %eax
132 ; X64-NEXT: setg %al
133 ; X64-NEXT: retq
135 %c = icmp sgt i32 %m, 0
140 ; X64-LABEL: length2_eq_const:
141 ; X64: # %bb.0:
142 ; X64-NEXT: cmpw $12849, (%rdi) # imm = 0x3231
143 ; X64-NEXT: setne %al
144 ; X64-NEXT: retq
145 %m = tail call i32 @memcmp(ptr %X, ptr getelementptr inbounds ([513 x i8], ptr @.str, i32 0, i32 1), i64 2) nounwind
146 %c = icmp ne i32 %m, 0
151 ; X64-LABEL: length2_eq_nobuiltin_attr:
152 ; X64: # %bb.0:
153 ; X64-NEXT: pushq %rax
154 ; X64-NEXT: movl $2, %edx
155 ; X64-NEXT: callq memcmp
156 ; X64-NEXT: testl %eax, %eax
157 ; X64-NEXT: sete %al
158 ; X64-NEXT: popq %rcx
159 ; X64-NEXT: retq
161 %c = icmp eq i32 %m, 0
166 ; X64-LABEL: length3:
167 ; X64: # %bb.0:
168 ; X64-NEXT: movzwl (%rdi), %ecx
169 ; X64-NEXT: movzwl (%rsi), %edx
170 ; X64-NEXT: rolw $8, %cx
171 ; X64-NEXT: rolw $8, %dx
172 ; X64-NEXT: cmpw %dx, %cx
173 ; X64-NEXT: jne .LBB11_3
174 ; X64-NEXT: # %bb.1: # %loadbb1
175 ; X64-NEXT: movzbl 2(%rdi), %eax
176 ; X64-NEXT: movzbl 2(%rsi), %ecx
177 ; X64-NEXT: subl %ecx, %eax
178 ; X64-NEXT: retq
179 ; X64-NEXT: .LBB11_3: # %res_block
180 ; X64-NEXT: xorl %eax, %eax
181 ; X64-NEXT: cmpw %dx, %cx
182 ; X64-NEXT: sbbl %eax, %eax
183 ; X64-NEXT: orl $1, %eax
184 ; X64-NEXT: retq
190 ; X64-LABEL: length3_eq:
191 ; X64: # %bb.0:
192 ; X64-NEXT: movzwl (%rdi), %eax
193 ; X64-NEXT: xorw (%rsi), %ax
194 ; X64-NEXT: movzbl 2(%rdi), %ecx
195 ; X64-NEXT: xorb 2(%rsi), %cl
196 ; X64-NEXT: movzbl %cl, %ecx
197 ; X64-NEXT: orw %ax, %cx
198 ; X64-NEXT: setne %al
199 ; X64-NEXT: retq
201 %c = icmp ne i32 %m, 0
206 ; X64-LABEL: length4:
207 ; X64: # %bb.0:
208 ; X64-NEXT: movl (%rdi), %eax
209 ; X64-NEXT: movl (%rsi), %ecx
210 ; X64-NEXT: bswapl %eax
211 ; X64-NEXT: bswapl %ecx
212 ; X64-NEXT: cmpl %ecx, %eax
213 ; X64-NEXT: seta %al
214 ; X64-NEXT: sbbb $0, %al
215 ; X64-NEXT: movsbl %al, %eax
216 ; X64-NEXT: retq
222 ; X64-LABEL: length4_eq:
223 ; X64: # %bb.0:
224 ; X64-NEXT: movl (%rdi), %eax
225 ; X64-NEXT: cmpl (%rsi), %eax
226 ; X64-NEXT: setne %al
227 ; X64-NEXT: retq
229 %c = icmp ne i32 %m, 0
234 ; X64-LABEL: length4_lt:
235 ; X64: # %bb.0:
236 ; X64-NEXT: movl (%rdi), %eax
237 ; X64-NEXT: movl (%rsi), %ecx
238 ; X64-NEXT: bswapl %eax
239 ; X64-NEXT: bswapl %ecx
240 ; X64-NEXT: cmpl %ecx, %eax
241 ; X64-NEXT: setb %al
242 ; X64-NEXT: retq
244 %c = icmp slt i32 %m, 0
249 ; X64-LABEL: length4_gt:
250 ; X64: # %bb.0:
251 ; X64-NEXT: movl (%rdi), %eax
252 ; X64-NEXT: movl (%rsi), %ecx
253 ; X64-NEXT: bswapl %eax
254 ; X64-NEXT: bswapl %ecx
255 ; X64-NEXT: cmpl %ecx, %eax
256 ; X64-NEXT: seta %al
257 ; X64-NEXT: retq
259 %c = icmp sgt i32 %m, 0
264 ; X64-LABEL: length4_le:
265 ; X64: # %bb.0:
266 ; X64-NEXT: movl (%rdi), %eax
267 ; X64-NEXT: movl (%rsi), %ecx
268 ; X64-NEXT: bswapl %eax
269 ; X64-NEXT: bswapl %ecx
270 ; X64-NEXT: cmpl %ecx, %eax
271 ; X64-NEXT: setbe %al
272 ; X64-NEXT: retq
279 ; X64-LABEL: length4_ge:
280 ; X64: # %bb.0:
281 ; X64-NEXT: movl (%rdi), %eax
282 ; X64-NEXT: movl (%rsi), %ecx
283 ; X64-NEXT: bswapl %eax
284 ; X64-NEXT: bswapl %ecx
285 ; X64-NEXT: cmpl %ecx, %eax
286 ; X64-NEXT: setae %al
287 ; X64-NEXT: retq
294 ; X64-LABEL: length4_eq_const:
295 ; X64: # %bb.0:
296 ; X64-NEXT: cmpl $875770417, (%rdi) # imm = 0x34333231
297 ; X64-NEXT: sete %al
298 ; X64-NEXT: retq
299 %m = tail call i32 @memcmp(ptr %X, ptr getelementptr inbounds ([513 x i8], ptr @.str, i32 0, i32 1), i64 4) nounwind
300 %c = icmp eq i32 %m, 0
305 ; X64-LABEL: length5:
306 ; X64: # %bb.0:
307 ; X64-NEXT: movl (%rdi), %ecx
308 ; X64-NEXT: movl (%rsi), %edx
309 ; X64-NEXT: bswapl %ecx
310 ; X64-NEXT: bswapl %edx
311 ; X64-NEXT: cmpl %edx, %ecx
312 ; X64-NEXT: jne .LBB20_3
313 ; X64-NEXT: # %bb.1: # %loadbb1
314 ; X64-NEXT: movzbl 4(%rdi), %eax
315 ; X64-NEXT: movzbl 4(%rsi), %ecx
316 ; X64-NEXT: subl %ecx, %eax
317 ; X64-NEXT: retq
318 ; X64-NEXT: .LBB20_3: # %res_block
319 ; X64-NEXT: xorl %eax, %eax
320 ; X64-NEXT: cmpl %edx, %ecx
321 ; X64-NEXT: sbbl %eax, %eax
322 ; X64-NEXT: orl $1, %eax
323 ; X64-NEXT: retq
329 ; X64-LABEL: length5_eq:
330 ; X64: # %bb.0:
331 ; X64-NEXT: movl (%rdi), %eax
332 ; X64-NEXT: xorl (%rsi), %eax
333 ; X64-NEXT: movzbl 4(%rdi), %ecx
334 ; X64-NEXT: xorb 4(%rsi), %cl
335 ; X64-NEXT: movzbl %cl, %ecx
336 ; X64-NEXT: orl %eax, %ecx
337 ; X64-NEXT: setne %al
338 ; X64-NEXT: retq
340 %c = icmp ne i32 %m, 0
345 ; X64-LABEL: length5_lt:
346 ; X64: # %bb.0:
347 ; X64-NEXT: movl (%rdi), %ecx
348 ; X64-NEXT: movl (%rsi), %edx
349 ; X64-NEXT: bswapl %ecx
350 ; X64-NEXT: bswapl %edx
351 ; X64-NEXT: cmpl %edx, %ecx
352 ; X64-NEXT: jne .LBB22_3
353 ; X64-NEXT: # %bb.1: # %loadbb1
354 ; X64-NEXT: movzbl 4(%rdi), %eax
355 ; X64-NEXT: movzbl 4(%rsi), %ecx
356 ; X64-NEXT: subl %ecx, %eax
357 ; X64-NEXT: shrl $31, %eax
358 ; X64-NEXT: # kill: def $al killed $al killed $eax
359 ; X64-NEXT: retq
360 ; X64-NEXT: .LBB22_3: # %res_block
361 ; X64-NEXT: xorl %eax, %eax
362 ; X64-NEXT: cmpl %edx, %ecx
363 ; X64-NEXT: sbbl %eax, %eax
364 ; X64-NEXT: orl $1, %eax
365 ; X64-NEXT: shrl $31, %eax
366 ; X64-NEXT: # kill: def $al killed $al killed $eax
367 ; X64-NEXT: retq
369 %c = icmp slt i32 %m, 0
374 ; X64-LABEL: length7:
375 ; X64: # %bb.0:
376 ; X64-NEXT: movl (%rdi), %ecx
377 ; X64-NEXT: movl (%rsi), %edx
378 ; X64-NEXT: bswapl %ecx
379 ; X64-NEXT: bswapl %edx
380 ; X64-NEXT: cmpl %edx, %ecx
381 ; X64-NEXT: jne .LBB23_2
382 ; X64-NEXT: # %bb.1: # %loadbb1
383 ; X64-NEXT: movl 3(%rdi), %ecx
384 ; X64-NEXT: movl 3(%rsi), %edx
385 ; X64-NEXT: bswapl %ecx
386 ; X64-NEXT: bswapl %edx
387 ; X64-NEXT: xorl %eax, %eax
388 ; X64-NEXT: cmpl %edx, %ecx
389 ; X64-NEXT: je .LBB23_3
390 ; X64-NEXT: .LBB23_2: # %res_block
391 ; X64-NEXT: xorl %eax, %eax
392 ; X64-NEXT: cmpl %edx, %ecx
393 ; X64-NEXT: sbbl %eax, %eax
394 ; X64-NEXT: orl $1, %eax
395 ; X64-NEXT: .LBB23_3: # %endblock
396 ; X64-NEXT: retq
402 ; X64-LABEL: length7_lt:
403 ; X64: # %bb.0:
404 ; X64-NEXT: movl (%rdi), %ecx
405 ; X64-NEXT: movl (%rsi), %edx
406 ; X64-NEXT: bswapl %ecx
407 ; X64-NEXT: bswapl %edx
408 ; X64-NEXT: cmpl %edx, %ecx
409 ; X64-NEXT: jne .LBB24_2
410 ; X64-NEXT: # %bb.1: # %loadbb1
411 ; X64-NEXT: movl 3(%rdi), %ecx
412 ; X64-NEXT: movl 3(%rsi), %edx
413 ; X64-NEXT: bswapl %ecx
414 ; X64-NEXT: bswapl %edx
415 ; X64-NEXT: xorl %eax, %eax
416 ; X64-NEXT: cmpl %edx, %ecx
417 ; X64-NEXT: je .LBB24_3
418 ; X64-NEXT: .LBB24_2: # %res_block
419 ; X64-NEXT: xorl %eax, %eax
420 ; X64-NEXT: cmpl %edx, %ecx
421 ; X64-NEXT: sbbl %eax, %eax
422 ; X64-NEXT: orl $1, %eax
423 ; X64-NEXT: .LBB24_3: # %endblock
424 ; X64-NEXT: shrl $31, %eax
425 ; X64-NEXT: # kill: def $al killed $al killed $eax
426 ; X64-NEXT: retq
428 %c = icmp slt i32 %m, 0
433 ; X64-LABEL: length7_eq:
434 ; X64: # %bb.0:
435 ; X64-NEXT: movl (%rdi), %eax
436 ; X64-NEXT: movl 3(%rdi), %ecx
437 ; X64-NEXT: xorl (%rsi), %eax
438 ; X64-NEXT: xorl 3(%rsi), %ecx
439 ; X64-NEXT: orl %eax, %ecx
440 ; X64-NEXT: setne %al
441 ; X64-NEXT: retq
443 %c = icmp ne i32 %m, 0
448 ; X64-LABEL: length8:
449 ; X64: # %bb.0:
450 ; X64-NEXT: movq (%rdi), %rax
451 ; X64-NEXT: movq (%rsi), %rcx
452 ; X64-NEXT: bswapq %rax
453 ; X64-NEXT: bswapq %rcx
454 ; X64-NEXT: cmpq %rcx, %rax
455 ; X64-NEXT: seta %al
456 ; X64-NEXT: sbbb $0, %al
457 ; X64-NEXT: movsbl %al, %eax
458 ; X64-NEXT: retq
464 ; X64-LABEL: length8_eq:
465 ; X64: # %bb.0:
466 ; X64-NEXT: movq (%rdi), %rax
467 ; X64-NEXT: cmpq (%rsi), %rax
468 ; X64-NEXT: sete %al
469 ; X64-NEXT: retq
471 %c = icmp eq i32 %m, 0
476 ; X64-LABEL: length8_eq_const:
477 ; X64: # %bb.0:
478 ; X64-NEXT: movabsq $3978425819141910832, %rax # imm = 0x3736353433323130
479 ; X64-NEXT: cmpq %rax, (%rdi)
480 ; X64-NEXT: setne %al
481 ; X64-NEXT: retq
483 %c = icmp ne i32 %m, 0
488 ; X64-LABEL: length9_eq:
489 ; X64: # %bb.0:
490 ; X64-NEXT: movq (%rdi), %rax
491 ; X64-NEXT: xorq (%rsi), %rax
492 ; X64-NEXT: movzbl 8(%rdi), %ecx
493 ; X64-NEXT: xorb 8(%rsi), %cl
494 ; X64-NEXT: movzbl %cl, %ecx
495 ; X64-NEXT: orq %rax, %rcx
496 ; X64-NEXT: sete %al
497 ; X64-NEXT: retq
499 %c = icmp eq i32 %m, 0
504 ; X64-LABEL: length10_eq:
505 ; X64: # %bb.0:
506 ; X64-NEXT: movq (%rdi), %rax
507 ; X64-NEXT: xorq (%rsi), %rax
508 ; X64-NEXT: movzwl 8(%rdi), %ecx
509 ; X64-NEXT: xorw 8(%rsi), %cx
510 ; X64-NEXT: movzwl %cx, %ecx
511 ; X64-NEXT: orq %rax, %rcx
512 ; X64-NEXT: sete %al
513 ; X64-NEXT: retq
515 %c = icmp eq i32 %m, 0
520 ; X64-LABEL: length11_eq:
521 ; X64: # %bb.0:
522 ; X64-NEXT: movq (%rdi), %rax
523 ; X64-NEXT: movq 3(%rdi), %rcx
524 ; X64-NEXT: xorq (%rsi), %rax
525 ; X64-NEXT: xorq 3(%rsi), %rcx
526 ; X64-NEXT: orq %rax, %rcx
527 ; X64-NEXT: sete %al
528 ; X64-NEXT: retq
530 %c = icmp eq i32 %m, 0
535 ; X64-LABEL: length12_eq:
536 ; X64: # %bb.0:
537 ; X64-NEXT: movq (%rdi), %rax
538 ; X64-NEXT: xorq (%rsi), %rax
539 ; X64-NEXT: movl 8(%rdi), %ecx
540 ; X64-NEXT: xorl 8(%rsi), %ecx
541 ; X64-NEXT: orq %rax, %rcx
542 ; X64-NEXT: setne %al
543 ; X64-NEXT: retq
545 %c = icmp ne i32 %m, 0
550 ; X64-LABEL: length12:
551 ; X64: # %bb.0:
552 ; X64-NEXT: movq (%rdi), %rcx
553 ; X64-NEXT: movq (%rsi), %rdx
554 ; X64-NEXT: bswapq %rcx
555 ; X64-NEXT: bswapq %rdx
556 ; X64-NEXT: cmpq %rdx, %rcx
557 ; X64-NEXT: jne .LBB33_2
558 ; X64-NEXT: # %bb.1: # %loadbb1
559 ; X64-NEXT: movl 8(%rdi), %ecx
560 ; X64-NEXT: movl 8(%rsi), %edx
561 ; X64-NEXT: bswapl %ecx
562 ; X64-NEXT: bswapl %edx
563 ; X64-NEXT: xorl %eax, %eax
564 ; X64-NEXT: cmpq %rdx, %rcx
565 ; X64-NEXT: je .LBB33_3
566 ; X64-NEXT: .LBB33_2: # %res_block
567 ; X64-NEXT: xorl %eax, %eax
568 ; X64-NEXT: cmpq %rdx, %rcx
569 ; X64-NEXT: sbbl %eax, %eax
570 ; X64-NEXT: orl $1, %eax
571 ; X64-NEXT: .LBB33_3: # %endblock
572 ; X64-NEXT: retq
578 ; X64-LABEL: length13_eq:
579 ; X64: # %bb.0:
580 ; X64-NEXT: movq (%rdi), %rax
581 ; X64-NEXT: movq 5(%rdi), %rcx
582 ; X64-NEXT: xorq (%rsi), %rax
583 ; X64-NEXT: xorq 5(%rsi), %rcx
584 ; X64-NEXT: orq %rax, %rcx
585 ; X64-NEXT: sete %al
586 ; X64-NEXT: retq
588 %c = icmp eq i32 %m, 0
593 ; X64-LABEL: length14_eq:
594 ; X64: # %bb.0:
595 ; X64-NEXT: movq (%rdi), %rax
596 ; X64-NEXT: movq 6(%rdi), %rcx
597 ; X64-NEXT: xorq (%rsi), %rax
598 ; X64-NEXT: xorq 6(%rsi), %rcx
599 ; X64-NEXT: orq %rax, %rcx
600 ; X64-NEXT: sete %al
601 ; X64-NEXT: retq
603 %c = icmp eq i32 %m, 0
608 ; X64-LABEL: length15:
609 ; X64: # %bb.0:
610 ; X64-NEXT: movq (%rdi), %rcx
611 ; X64-NEXT: movq (%rsi), %rdx
612 ; X64-NEXT: bswapq %rcx
613 ; X64-NEXT: bswapq %rdx
614 ; X64-NEXT: cmpq %rdx, %rcx
615 ; X64-NEXT: jne .LBB36_2
616 ; X64-NEXT: # %bb.1: # %loadbb1
617 ; X64-NEXT: movq 7(%rdi), %rcx
618 ; X64-NEXT: movq 7(%rsi), %rdx
619 ; X64-NEXT: bswapq %rcx
620 ; X64-NEXT: bswapq %rdx
621 ; X64-NEXT: xorl %eax, %eax
622 ; X64-NEXT: cmpq %rdx, %rcx
623 ; X64-NEXT: je .LBB36_3
624 ; X64-NEXT: .LBB36_2: # %res_block
625 ; X64-NEXT: xorl %eax, %eax
626 ; X64-NEXT: cmpq %rdx, %rcx
627 ; X64-NEXT: sbbl %eax, %eax
628 ; X64-NEXT: orl $1, %eax
629 ; X64-NEXT: .LBB36_3: # %endblock
630 ; X64-NEXT: retq
636 ; X64-LABEL: length15_lt:
637 ; X64: # %bb.0:
638 ; X64-NEXT: movq (%rdi), %rcx
639 ; X64-NEXT: movq (%rsi), %rdx
640 ; X64-NEXT: bswapq %rcx
641 ; X64-NEXT: bswapq %rdx
642 ; X64-NEXT: cmpq %rdx, %rcx
643 ; X64-NEXT: jne .LBB37_2
644 ; X64-NEXT: # %bb.1: # %loadbb1
645 ; X64-NEXT: movq 7(%rdi), %rcx
646 ; X64-NEXT: movq 7(%rsi), %rdx
647 ; X64-NEXT: bswapq %rcx
648 ; X64-NEXT: bswapq %rdx
649 ; X64-NEXT: xorl %eax, %eax
650 ; X64-NEXT: cmpq %rdx, %rcx
651 ; X64-NEXT: je .LBB37_3
652 ; X64-NEXT: .LBB37_2: # %res_block
653 ; X64-NEXT: xorl %eax, %eax
654 ; X64-NEXT: cmpq %rdx, %rcx
655 ; X64-NEXT: sbbl %eax, %eax
656 ; X64-NEXT: orl $1, %eax
657 ; X64-NEXT: .LBB37_3: # %endblock
658 ; X64-NEXT: shrl $31, %eax
659 ; X64-NEXT: # kill: def $al killed $al killed $eax
660 ; X64-NEXT: retq
662 %c = icmp slt i32 %m, 0
667 ; X64-LABEL: length15_const:
668 ; X64: # %bb.0:
669 ; X64-NEXT: movabsq $3544952156018063160, %rcx # imm = 0x3132333435363738
670 ; X64-NEXT: movq (%rdi), %rdx
671 ; X64-NEXT: bswapq %rdx
672 ; X64-NEXT: cmpq %rcx, %rdx
673 ; X64-NEXT: jne .LBB38_2
674 ; X64-NEXT: # %bb.1: # %loadbb1
675 ; X64-NEXT: movabsq $4051322327650219061, %rcx # imm = 0x3839303132333435
676 ; X64-NEXT: movq 7(%rdi), %rdx
677 ; X64-NEXT: bswapq %rdx
678 ; X64-NEXT: xorl %eax, %eax
679 ; X64-NEXT: cmpq %rcx, %rdx
680 ; X64-NEXT: je .LBB38_3
681 ; X64-NEXT: .LBB38_2: # %res_block
682 ; X64-NEXT: xorl %eax, %eax
683 ; X64-NEXT: cmpq %rcx, %rdx
684 ; X64-NEXT: sbbl %eax, %eax
685 ; X64-NEXT: orl $1, %eax
686 ; X64-NEXT: .LBB38_3: # %endblock
687 ; X64-NEXT: retq
688 %m = tail call i32 @memcmp(ptr %X, ptr getelementptr inbounds ([513 x i8], ptr @.str, i32 0, i32 1), i64 15) nounwind
693 ; X64-LABEL: length15_eq:
694 ; X64: # %bb.0:
695 ; X64-NEXT: movq (%rdi), %rax
696 ; X64-NEXT: movq 7(%rdi), %rcx
697 ; X64-NEXT: xorq (%rsi), %rax
698 ; X64-NEXT: xorq 7(%rsi), %rcx
699 ; X64-NEXT: orq %rax, %rcx
700 ; X64-NEXT: sete %al
701 ; X64-NEXT: retq
703 %c = icmp eq i32 %m, 0
708 ; X64-LABEL: length15_gt_const:
709 ; X64: # %bb.0:
710 ; X64-NEXT: movabsq $3544952156018063160, %rax # imm = 0x3132333435363738
711 ; X64-NEXT: movq (%rdi), %rcx
712 ; X64-NEXT: bswapq %rcx
713 ; X64-NEXT: cmpq %rax, %rcx
714 ; X64-NEXT: jne .LBB40_2
715 ; X64-NEXT: # %bb.1: # %loadbb1
716 ; X64-NEXT: movabsq $4051322327650219061, %rax # imm = 0x3839303132333435
717 ; X64-NEXT: movq 7(%rdi), %rcx
718 ; X64-NEXT: bswapq %rcx
719 ; X64-NEXT: xorl %edx, %edx
720 ; X64-NEXT: cmpq %rax, %rcx
721 ; X64-NEXT: je .LBB40_3
722 ; X64-NEXT: .LBB40_2: # %res_block
723 ; X64-NEXT: xorl %edx, %edx
724 ; X64-NEXT: cmpq %rax, %rcx
725 ; X64-NEXT: sbbl %edx, %edx
726 ; X64-NEXT: orl $1, %edx
727 ; X64-NEXT: .LBB40_3: # %endblock
728 ; X64-NEXT: testl %edx, %edx
729 ; X64-NEXT: setg %al
730 ; X64-NEXT: retq
731 %m = tail call i32 @memcmp(ptr %X, ptr getelementptr inbounds ([513 x i8], ptr @.str, i32 0, i32 1), i64 15) nounwind
732 %c = icmp sgt i32 %m, 0
739 ; X64-LABEL: length16:
740 ; X64: # %bb.0:
741 ; X64-NEXT: movq (%rdi), %rcx
742 ; X64-NEXT: movq (%rsi), %rdx
743 ; X64-NEXT: bswapq %rcx
744 ; X64-NEXT: bswapq %rdx
745 ; X64-NEXT: cmpq %rdx, %rcx
746 ; X64-NEXT: jne .LBB41_2
747 ; X64-NEXT: # %bb.1: # %loadbb1
748 ; X64-NEXT: movq 8(%rdi), %rcx
749 ; X64-NEXT: movq 8(%rsi), %rdx
750 ; X64-NEXT: bswapq %rcx
751 ; X64-NEXT: bswapq %rdx
752 ; X64-NEXT: xorl %eax, %eax
753 ; X64-NEXT: cmpq %rdx, %rcx
754 ; X64-NEXT: je .LBB41_3
755 ; X64-NEXT: .LBB41_2: # %res_block
756 ; X64-NEXT: xorl %eax, %eax
757 ; X64-NEXT: cmpq %rdx, %rcx
758 ; X64-NEXT: sbbl %eax, %eax
759 ; X64-NEXT: orl $1, %eax
760 ; X64-NEXT: .LBB41_3: # %endblock
761 ; X64-NEXT: retq
767 ; X64-SSE2-LABEL: length16_eq:
768 ; X64-SSE2: # %bb.0:
769 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
770 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm1
771 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm1
772 ; X64-SSE2-NEXT: pmovmskb %xmm1, %eax
773 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
774 ; X64-SSE2-NEXT: setne %al
775 ; X64-SSE2-NEXT: retq
777 ; X64-SSE41-LABEL: length16_eq:
778 ; X64-SSE41: # %bb.0:
779 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
780 ; X64-SSE41-NEXT: movdqu (%rsi), %xmm1
781 ; X64-SSE41-NEXT: pxor %xmm0, %xmm1
782 ; X64-SSE41-NEXT: ptest %xmm1, %xmm1
783 ; X64-SSE41-NEXT: setne %al
784 ; X64-SSE41-NEXT: retq
786 ; X64-AVX-LABEL: length16_eq:
787 ; X64-AVX: # %bb.0:
788 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
789 ; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
790 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
791 ; X64-AVX-NEXT: setne %al
792 ; X64-AVX-NEXT: retq
794 ; X64-MIC-AVX-LABEL: length16_eq:
795 ; X64-MIC-AVX: # %bb.0:
796 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
797 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %xmm1
798 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k0
799 ; X64-MIC-AVX-NEXT: kortestw %k0, %k0
800 ; X64-MIC-AVX-NEXT: setne %al
801 ; X64-MIC-AVX-NEXT: vzeroupper
802 ; X64-MIC-AVX-NEXT: retq
804 %cmp = icmp ne i32 %call, 0
809 ; X64-LABEL: length16_lt:
810 ; X64: # %bb.0:
811 ; X64-NEXT: movq (%rdi), %rcx
812 ; X64-NEXT: movq (%rsi), %rdx
813 ; X64-NEXT: bswapq %rcx
814 ; X64-NEXT: bswapq %rdx
815 ; X64-NEXT: cmpq %rdx, %rcx
816 ; X64-NEXT: jne .LBB43_2
817 ; X64-NEXT: # %bb.1: # %loadbb1
818 ; X64-NEXT: movq 8(%rdi), %rcx
819 ; X64-NEXT: movq 8(%rsi), %rdx
820 ; X64-NEXT: bswapq %rcx
821 ; X64-NEXT: bswapq %rdx
822 ; X64-NEXT: xorl %eax, %eax
823 ; X64-NEXT: cmpq %rdx, %rcx
824 ; X64-NEXT: je .LBB43_3
825 ; X64-NEXT: .LBB43_2: # %res_block
826 ; X64-NEXT: xorl %eax, %eax
827 ; X64-NEXT: cmpq %rdx, %rcx
828 ; X64-NEXT: sbbl %eax, %eax
829 ; X64-NEXT: orl $1, %eax
830 ; X64-NEXT: .LBB43_3: # %endblock
831 ; X64-NEXT: shrl $31, %eax
832 ; X64-NEXT: # kill: def $al killed $al killed $eax
833 ; X64-NEXT: retq
835 %cmp = icmp slt i32 %call, 0
840 ; X64-LABEL: length16_gt:
841 ; X64: # %bb.0:
842 ; X64-NEXT: movq (%rdi), %rax
843 ; X64-NEXT: movq (%rsi), %rcx
844 ; X64-NEXT: bswapq %rax
845 ; X64-NEXT: bswapq %rcx
846 ; X64-NEXT: cmpq %rcx, %rax
847 ; X64-NEXT: jne .LBB44_2
848 ; X64-NEXT: # %bb.1: # %loadbb1
849 ; X64-NEXT: movq 8(%rdi), %rax
850 ; X64-NEXT: movq 8(%rsi), %rcx
851 ; X64-NEXT: bswapq %rax
852 ; X64-NEXT: bswapq %rcx
853 ; X64-NEXT: xorl %edx, %edx
854 ; X64-NEXT: cmpq %rcx, %rax
855 ; X64-NEXT: je .LBB44_3
856 ; X64-NEXT: .LBB44_2: # %res_block
857 ; X64-NEXT: xorl %edx, %edx
858 ; X64-NEXT: cmpq %rcx, %rax
859 ; X64-NEXT: sbbl %edx, %edx
860 ; X64-NEXT: orl $1, %edx
861 ; X64-NEXT: .LBB44_3: # %endblock
862 ; X64-NEXT: testl %edx, %edx
863 ; X64-NEXT: setg %al
864 ; X64-NEXT: retq
866 %cmp = icmp sgt i32 %call, 0
871 ; X64-SSE2-LABEL: length16_eq_const:
872 ; X64-SSE2: # %bb.0:
873 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
874 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
875 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
876 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
877 ; X64-SSE2-NEXT: sete %al
878 ; X64-SSE2-NEXT: retq
880 ; X64-SSE41-LABEL: length16_eq_const:
881 ; X64-SSE41: # %bb.0:
882 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
883 ; X64-SSE41-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
884 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
885 ; X64-SSE41-NEXT: sete %al
886 ; X64-SSE41-NEXT: retq
888 ; X64-AVX-LABEL: length16_eq_const:
889 ; X64-AVX: # %bb.0:
890 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
891 ; X64-AVX-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
892 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
893 ; X64-AVX-NEXT: sete %al
894 ; X64-AVX-NEXT: retq
896 ; X64-MIC-AVX-LABEL: length16_eq_const:
897 ; X64-MIC-AVX: # %bb.0:
898 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
899 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} xmm1 = [858927408,926299444,825243960,892613426]
900 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k0
901 ; X64-MIC-AVX-NEXT: kortestw %k0, %k0
902 ; X64-MIC-AVX-NEXT: sete %al
903 ; X64-MIC-AVX-NEXT: vzeroupper
904 ; X64-MIC-AVX-NEXT: retq
906 %c = icmp eq i32 %m, 0
913 ; X64-LABEL: length24:
914 ; X64: # %bb.0:
915 ; X64-NEXT: movl $24, %edx
916 ; X64-NEXT: jmp memcmp # TAILCALL
922 ; X64-SSE2-LABEL: length24_eq:
923 ; X64-SSE2: # %bb.0:
924 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
925 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm1
926 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm1
927 ; X64-SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
928 ; X64-SSE2-NEXT: movq {{.*#+}} xmm2 = mem[0],zero
929 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm2
930 ; X64-SSE2-NEXT: pand %xmm1, %xmm2
931 ; X64-SSE2-NEXT: pmovmskb %xmm2, %eax
932 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
933 ; X64-SSE2-NEXT: sete %al
934 ; X64-SSE2-NEXT: retq
936 ; X64-SSE41-LABEL: length24_eq:
937 ; X64-SSE41: # %bb.0:
938 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
939 ; X64-SSE41-NEXT: movdqu (%rsi), %xmm1
940 ; X64-SSE41-NEXT: pxor %xmm0, %xmm1
941 ; X64-SSE41-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
942 ; X64-SSE41-NEXT: movq {{.*#+}} xmm2 = mem[0],zero
943 ; X64-SSE41-NEXT: pxor %xmm0, %xmm2
944 ; X64-SSE41-NEXT: por %xmm1, %xmm2
945 ; X64-SSE41-NEXT: ptest %xmm2, %xmm2
946 ; X64-SSE41-NEXT: sete %al
947 ; X64-SSE41-NEXT: retq
949 ; X64-AVX-LABEL: length24_eq:
950 ; X64-AVX: # %bb.0:
951 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
952 ; X64-AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
953 ; X64-AVX-NEXT: vmovq {{.*#+}} xmm2 = mem[0],zero
954 ; X64-AVX-NEXT: vpxor %xmm2, %xmm1, %xmm1
955 ; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
956 ; X64-AVX-NEXT: vpor %xmm0, %xmm1, %xmm0
957 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
958 ; X64-AVX-NEXT: sete %al
959 ; X64-AVX-NEXT: retq
961 ; X64-MIC-AVX-LABEL: length24_eq:
962 ; X64-MIC-AVX: # %bb.0:
963 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
964 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %xmm1
965 ; X64-MIC-AVX-NEXT: vmovq {{.*#+}} xmm2 = mem[0],zero
966 ; X64-MIC-AVX-NEXT: vmovq {{.*#+}} xmm3 = mem[0],zero
967 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm3, %zmm2, %k0
968 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k1
969 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
970 ; X64-MIC-AVX-NEXT: sete %al
971 ; X64-MIC-AVX-NEXT: vzeroupper
972 ; X64-MIC-AVX-NEXT: retq
974 %cmp = icmp eq i32 %call, 0
979 ; X64-LABEL: length24_lt:
980 ; X64: # %bb.0:
981 ; X64-NEXT: pushq %rax
982 ; X64-NEXT: movl $24, %edx
983 ; X64-NEXT: callq memcmp
984 ; X64-NEXT: shrl $31, %eax
985 ; X64-NEXT: # kill: def $al killed $al killed $eax
986 ; X64-NEXT: popq %rcx
987 ; X64-NEXT: retq
989 %cmp = icmp slt i32 %call, 0
994 ; X64-LABEL: length24_gt:
995 ; X64: # %bb.0:
996 ; X64-NEXT: pushq %rax
997 ; X64-NEXT: movl $24, %edx
998 ; X64-NEXT: callq memcmp
999 ; X64-NEXT: testl %eax, %eax
1000 ; X64-NEXT: setg %al
1001 ; X64-NEXT: popq %rcx
1002 ; X64-NEXT: retq
1004 %cmp = icmp sgt i32 %call, 0
1009 ; X64-SSE2-LABEL: length24_eq_const:
1010 ; X64-SSE2: # %bb.0:
1011 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
1012 ; X64-SSE2-NEXT: movq {{.*#+}} xmm1 = mem[0],zero
1013 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1014 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1015 ; X64-SSE2-NEXT: pand %xmm1, %xmm0
1016 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
1017 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
1018 ; X64-SSE2-NEXT: setne %al
1019 ; X64-SSE2-NEXT: retq
1021 ; X64-SSE41-LABEL: length24_eq_const:
1022 ; X64-SSE41: # %bb.0:
1023 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
1024 ; X64-SSE41-NEXT: movq {{.*#+}} xmm1 = mem[0],zero
1025 ; X64-SSE41-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1026 ; X64-SSE41-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1027 ; X64-SSE41-NEXT: por %xmm1, %xmm0
1028 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
1029 ; X64-SSE41-NEXT: setne %al
1030 ; X64-SSE41-NEXT: retq
1032 ; X64-AVX-LABEL: length24_eq_const:
1033 ; X64-AVX: # %bb.0:
1034 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
1035 ; X64-AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1036 ; X64-AVX-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
1037 ; X64-AVX-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1038 ; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
1039 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
1040 ; X64-AVX-NEXT: setne %al
1041 ; X64-AVX-NEXT: retq
1043 ; X64-MIC-AVX-LABEL: length24_eq_const:
1044 ; X64-MIC-AVX: # %bb.0:
1045 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
1046 ; X64-MIC-AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1047 ; X64-MIC-AVX-NEXT: vmovq {{.*#+}} xmm2 = [959985462,858927408,0,0]
1048 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm1, %k0
1049 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} xmm1 = [858927408,926299444,825243960,892613426]
1050 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k1
1051 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1052 ; X64-MIC-AVX-NEXT: setne %al
1053 ; X64-MIC-AVX-NEXT: vzeroupper
1054 ; X64-MIC-AVX-NEXT: retq
1056 %c = icmp ne i32 %m, 0
1061 ; X64-LABEL: length31:
1062 ; X64: # %bb.0:
1063 ; X64-NEXT: movl $31, %edx
1064 ; X64-NEXT: jmp memcmp # TAILCALL
1070 ; X64-SSE2-LABEL: length31_eq:
1071 ; X64-SSE2: # %bb.0:
1072 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
1073 ; X64-SSE2-NEXT: movdqu 15(%rdi), %xmm1
1074 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm2
1075 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm2
1076 ; X64-SSE2-NEXT: movdqu 15(%rsi), %xmm0
1077 ; X64-SSE2-NEXT: pcmpeqb %xmm1, %xmm0
1078 ; X64-SSE2-NEXT: pand %xmm2, %xmm0
1079 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
1080 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
1081 ; X64-SSE2-NEXT: sete %al
1082 ; X64-SSE2-NEXT: retq
1084 ; X64-SSE41-LABEL: length31_eq:
1085 ; X64-SSE41: # %bb.0:
1086 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
1087 ; X64-SSE41-NEXT: movdqu 15(%rdi), %xmm1
1088 ; X64-SSE41-NEXT: movdqu (%rsi), %xmm2
1089 ; X64-SSE41-NEXT: pxor %xmm0, %xmm2
1090 ; X64-SSE41-NEXT: movdqu 15(%rsi), %xmm0
1091 ; X64-SSE41-NEXT: pxor %xmm1, %xmm0
1092 ; X64-SSE41-NEXT: por %xmm2, %xmm0
1093 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
1094 ; X64-SSE41-NEXT: sete %al
1095 ; X64-SSE41-NEXT: retq
1097 ; X64-AVX-LABEL: length31_eq:
1098 ; X64-AVX: # %bb.0:
1099 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
1100 ; X64-AVX-NEXT: vmovdqu 15(%rdi), %xmm1
1101 ; X64-AVX-NEXT: vpxor 15(%rsi), %xmm1, %xmm1
1102 ; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
1103 ; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
1104 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
1105 ; X64-AVX-NEXT: sete %al
1106 ; X64-AVX-NEXT: retq
1108 ; X64-MIC-AVX-LABEL: length31_eq:
1109 ; X64-MIC-AVX: # %bb.0:
1110 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
1111 ; X64-MIC-AVX-NEXT: vmovdqu 15(%rdi), %xmm1
1112 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %xmm2
1113 ; X64-MIC-AVX-NEXT: vmovdqu 15(%rsi), %xmm3
1114 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm3, %zmm1, %k0
1115 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm0, %k1
1116 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1117 ; X64-MIC-AVX-NEXT: sete %al
1118 ; X64-MIC-AVX-NEXT: vzeroupper
1119 ; X64-MIC-AVX-NEXT: retq
1121 %cmp = icmp eq i32 %call, 0
1126 ; X64-LABEL: length31_lt:
1127 ; X64: # %bb.0:
1128 ; X64-NEXT: pushq %rax
1129 ; X64-NEXT: movl $31, %edx
1130 ; X64-NEXT: callq memcmp
1131 ; X64-NEXT: shrl $31, %eax
1132 ; X64-NEXT: # kill: def $al killed $al killed $eax
1133 ; X64-NEXT: popq %rcx
1134 ; X64-NEXT: retq
1136 %cmp = icmp slt i32 %call, 0
1141 ; X64-LABEL: length31_gt:
1142 ; X64: # %bb.0:
1143 ; X64-NEXT: pushq %rax
1144 ; X64-NEXT: movl $31, %edx
1145 ; X64-NEXT: callq memcmp
1146 ; X64-NEXT: testl %eax, %eax
1147 ; X64-NEXT: setg %al
1148 ; X64-NEXT: popq %rcx
1149 ; X64-NEXT: retq
1151 %cmp = icmp sgt i32 %call, 0
1156 ; X64-SSE2-LABEL: length31_eq_prefer128:
1157 ; X64-SSE2: # %bb.0:
1158 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
1159 ; X64-SSE2-NEXT: movdqu 15(%rdi), %xmm1
1160 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm2
1161 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm2
1162 ; X64-SSE2-NEXT: movdqu 15(%rsi), %xmm0
1163 ; X64-SSE2-NEXT: pcmpeqb %xmm1, %xmm0
1164 ; X64-SSE2-NEXT: pand %xmm2, %xmm0
1165 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
1166 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
1167 ; X64-SSE2-NEXT: sete %al
1168 ; X64-SSE2-NEXT: retq
1170 ; X64-SSE41-LABEL: length31_eq_prefer128:
1171 ; X64-SSE41: # %bb.0:
1172 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
1173 ; X64-SSE41-NEXT: movdqu 15(%rdi), %xmm1
1174 ; X64-SSE41-NEXT: movdqu (%rsi), %xmm2
1175 ; X64-SSE41-NEXT: pxor %xmm0, %xmm2
1176 ; X64-SSE41-NEXT: movdqu 15(%rsi), %xmm0
1177 ; X64-SSE41-NEXT: pxor %xmm1, %xmm0
1178 ; X64-SSE41-NEXT: por %xmm2, %xmm0
1179 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
1180 ; X64-SSE41-NEXT: sete %al
1181 ; X64-SSE41-NEXT: retq
1183 ; X64-AVX-LABEL: length31_eq_prefer128:
1184 ; X64-AVX: # %bb.0:
1185 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
1186 ; X64-AVX-NEXT: vmovdqu 15(%rdi), %xmm1
1187 ; X64-AVX-NEXT: vpxor 15(%rsi), %xmm1, %xmm1
1188 ; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
1189 ; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
1190 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
1191 ; X64-AVX-NEXT: sete %al
1192 ; X64-AVX-NEXT: retq
1194 ; X64-MIC-AVX-LABEL: length31_eq_prefer128:
1195 ; X64-MIC-AVX: # %bb.0:
1196 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
1197 ; X64-MIC-AVX-NEXT: vmovdqu 15(%rdi), %xmm1
1198 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %xmm2
1199 ; X64-MIC-AVX-NEXT: vmovdqu 15(%rsi), %xmm3
1200 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm3, %zmm1, %k0
1201 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm0, %k1
1202 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1203 ; X64-MIC-AVX-NEXT: sete %al
1204 ; X64-MIC-AVX-NEXT: vzeroupper
1205 ; X64-MIC-AVX-NEXT: retq
1207 %cmp = icmp eq i32 %call, 0
1212 ; X64-SSE2-LABEL: length31_eq_const:
1213 ; X64-SSE2: # %bb.0:
1214 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
1215 ; X64-SSE2-NEXT: movdqu 15(%rdi), %xmm1
1216 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1217 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1218 ; X64-SSE2-NEXT: pand %xmm1, %xmm0
1219 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
1220 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
1221 ; X64-SSE2-NEXT: setne %al
1222 ; X64-SSE2-NEXT: retq
1224 ; X64-SSE41-LABEL: length31_eq_const:
1225 ; X64-SSE41: # %bb.0:
1226 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
1227 ; X64-SSE41-NEXT: movdqu 15(%rdi), %xmm1
1228 ; X64-SSE41-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1229 ; X64-SSE41-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1230 ; X64-SSE41-NEXT: por %xmm1, %xmm0
1231 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
1232 ; X64-SSE41-NEXT: setne %al
1233 ; X64-SSE41-NEXT: retq
1235 ; X64-AVX-LABEL: length31_eq_const:
1236 ; X64-AVX: # %bb.0:
1237 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
1238 ; X64-AVX-NEXT: vmovdqu 15(%rdi), %xmm1
1239 ; X64-AVX-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
1240 ; X64-AVX-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1241 ; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
1242 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
1243 ; X64-AVX-NEXT: setne %al
1244 ; X64-AVX-NEXT: retq
1246 ; X64-MIC-AVX-LABEL: length31_eq_const:
1247 ; X64-MIC-AVX: # %bb.0:
1248 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
1249 ; X64-MIC-AVX-NEXT: vmovdqu 15(%rdi), %xmm1
1250 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} xmm2 = [943142453,842084409,909456435,809056311]
1251 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm1, %k0
1252 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} xmm1 = [858927408,926299444,825243960,892613426]
1253 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k1
1254 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1255 ; X64-MIC-AVX-NEXT: setne %al
1256 ; X64-MIC-AVX-NEXT: vzeroupper
1257 ; X64-MIC-AVX-NEXT: retq
1259 %c = icmp ne i32 %m, 0
1264 ; X64-LABEL: length32:
1265 ; X64: # %bb.0:
1266 ; X64-NEXT: movl $32, %edx
1267 ; X64-NEXT: jmp memcmp # TAILCALL
1275 ; X64-SSE2-LABEL: length32_eq:
1276 ; X64-SSE2: # %bb.0:
1277 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
1278 ; X64-SSE2-NEXT: movdqu 16(%rdi), %xmm1
1279 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm2
1280 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm2
1281 ; X64-SSE2-NEXT: movdqu 16(%rsi), %xmm0
1282 ; X64-SSE2-NEXT: pcmpeqb %xmm1, %xmm0
1283 ; X64-SSE2-NEXT: pand %xmm2, %xmm0
1284 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
1285 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
1286 ; X64-SSE2-NEXT: sete %al
1287 ; X64-SSE2-NEXT: retq
1289 ; X64-SSE41-LABEL: length32_eq:
1290 ; X64-SSE41: # %bb.0:
1291 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
1292 ; X64-SSE41-NEXT: movdqu 16(%rdi), %xmm1
1293 ; X64-SSE41-NEXT: movdqu (%rsi), %xmm2
1294 ; X64-SSE41-NEXT: pxor %xmm0, %xmm2
1295 ; X64-SSE41-NEXT: movdqu 16(%rsi), %xmm0
1296 ; X64-SSE41-NEXT: pxor %xmm1, %xmm0
1297 ; X64-SSE41-NEXT: por %xmm2, %xmm0
1298 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
1299 ; X64-SSE41-NEXT: sete %al
1300 ; X64-SSE41-NEXT: retq
1302 ; X64-AVX1-LABEL: length32_eq:
1303 ; X64-AVX1: # %bb.0:
1304 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1305 ; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
1306 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1307 ; X64-AVX1-NEXT: sete %al
1308 ; X64-AVX1-NEXT: vzeroupper
1309 ; X64-AVX1-NEXT: retq
1311 ; X64-AVX2-LABEL: length32_eq:
1312 ; X64-AVX2: # %bb.0:
1313 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1314 ; X64-AVX2-NEXT: vpxor (%rsi), %ymm0, %ymm0
1315 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1316 ; X64-AVX2-NEXT: sete %al
1317 ; X64-AVX2-NEXT: vzeroupper
1318 ; X64-AVX2-NEXT: retq
1320 ; X64-AVX512-LABEL: length32_eq:
1321 ; X64-AVX512: # %bb.0:
1322 ; X64-AVX512-NEXT: vmovdqu (%rdi), %ymm0
1323 ; X64-AVX512-NEXT: vpxor (%rsi), %ymm0, %ymm0
1324 ; X64-AVX512-NEXT: vptest %ymm0, %ymm0
1325 ; X64-AVX512-NEXT: sete %al
1326 ; X64-AVX512-NEXT: vzeroupper
1327 ; X64-AVX512-NEXT: retq
1329 ; X64-MIC-AVX-LABEL: length32_eq:
1330 ; X64-MIC-AVX: # %bb.0:
1331 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %ymm0
1332 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %ymm1
1333 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k0
1334 ; X64-MIC-AVX-NEXT: kortestw %k0, %k0
1335 ; X64-MIC-AVX-NEXT: sete %al
1336 ; X64-MIC-AVX-NEXT: vzeroupper
1337 ; X64-MIC-AVX-NEXT: retq
1339 %cmp = icmp eq i32 %call, 0
1344 ; X64-LABEL: length32_lt:
1345 ; X64: # %bb.0:
1346 ; X64-NEXT: pushq %rax
1347 ; X64-NEXT: movl $32, %edx
1348 ; X64-NEXT: callq memcmp
1349 ; X64-NEXT: shrl $31, %eax
1350 ; X64-NEXT: # kill: def $al killed $al killed $eax
1351 ; X64-NEXT: popq %rcx
1352 ; X64-NEXT: retq
1354 %cmp = icmp slt i32 %call, 0
1359 ; X64-LABEL: length32_gt:
1360 ; X64: # %bb.0:
1361 ; X64-NEXT: pushq %rax
1362 ; X64-NEXT: movl $32, %edx
1363 ; X64-NEXT: callq memcmp
1364 ; X64-NEXT: testl %eax, %eax
1365 ; X64-NEXT: setg %al
1366 ; X64-NEXT: popq %rcx
1367 ; X64-NEXT: retq
1369 %cmp = icmp sgt i32 %call, 0
1374 ; X64-SSE2-LABEL: length32_eq_prefer128:
1375 ; X64-SSE2: # %bb.0:
1376 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
1377 ; X64-SSE2-NEXT: movdqu 16(%rdi), %xmm1
1378 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm2
1379 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm2
1380 ; X64-SSE2-NEXT: movdqu 16(%rsi), %xmm0
1381 ; X64-SSE2-NEXT: pcmpeqb %xmm1, %xmm0
1382 ; X64-SSE2-NEXT: pand %xmm2, %xmm0
1383 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
1384 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
1385 ; X64-SSE2-NEXT: sete %al
1386 ; X64-SSE2-NEXT: retq
1388 ; X64-SSE41-LABEL: length32_eq_prefer128:
1389 ; X64-SSE41: # %bb.0:
1390 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
1391 ; X64-SSE41-NEXT: movdqu 16(%rdi), %xmm1
1392 ; X64-SSE41-NEXT: movdqu (%rsi), %xmm2
1393 ; X64-SSE41-NEXT: pxor %xmm0, %xmm2
1394 ; X64-SSE41-NEXT: movdqu 16(%rsi), %xmm0
1395 ; X64-SSE41-NEXT: pxor %xmm1, %xmm0
1396 ; X64-SSE41-NEXT: por %xmm2, %xmm0
1397 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
1398 ; X64-SSE41-NEXT: sete %al
1399 ; X64-SSE41-NEXT: retq
1401 ; X64-AVX-LABEL: length32_eq_prefer128:
1402 ; X64-AVX: # %bb.0:
1403 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
1404 ; X64-AVX-NEXT: vmovdqu 16(%rdi), %xmm1
1405 ; X64-AVX-NEXT: vpxor 16(%rsi), %xmm1, %xmm1
1406 ; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
1407 ; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
1408 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
1409 ; X64-AVX-NEXT: sete %al
1410 ; X64-AVX-NEXT: retq
1412 ; X64-MIC-AVX-LABEL: length32_eq_prefer128:
1413 ; X64-MIC-AVX: # %bb.0:
1414 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
1415 ; X64-MIC-AVX-NEXT: vmovdqu 16(%rdi), %xmm1
1416 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %xmm2
1417 ; X64-MIC-AVX-NEXT: vmovdqu 16(%rsi), %xmm3
1418 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm3, %zmm1, %k0
1419 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm0, %k1
1420 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1421 ; X64-MIC-AVX-NEXT: sete %al
1422 ; X64-MIC-AVX-NEXT: vzeroupper
1423 ; X64-MIC-AVX-NEXT: retq
1425 %cmp = icmp eq i32 %call, 0
1430 ; X64-SSE2-LABEL: length32_eq_const:
1431 ; X64-SSE2: # %bb.0:
1432 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
1433 ; X64-SSE2-NEXT: movdqu 16(%rdi), %xmm1
1434 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1435 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1436 ; X64-SSE2-NEXT: pand %xmm1, %xmm0
1437 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
1438 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
1439 ; X64-SSE2-NEXT: setne %al
1440 ; X64-SSE2-NEXT: retq
1442 ; X64-SSE41-LABEL: length32_eq_const:
1443 ; X64-SSE41: # %bb.0:
1444 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
1445 ; X64-SSE41-NEXT: movdqu 16(%rdi), %xmm1
1446 ; X64-SSE41-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1447 ; X64-SSE41-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1448 ; X64-SSE41-NEXT: por %xmm1, %xmm0
1449 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
1450 ; X64-SSE41-NEXT: setne %al
1451 ; X64-SSE41-NEXT: retq
1453 ; X64-AVX1-LABEL: length32_eq_const:
1454 ; X64-AVX1: # %bb.0:
1455 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1456 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1457 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1458 ; X64-AVX1-NEXT: setne %al
1459 ; X64-AVX1-NEXT: vzeroupper
1460 ; X64-AVX1-NEXT: retq
1462 ; X64-AVX2-LABEL: length32_eq_const:
1463 ; X64-AVX2: # %bb.0:
1464 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1465 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1466 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1467 ; X64-AVX2-NEXT: setne %al
1468 ; X64-AVX2-NEXT: vzeroupper
1469 ; X64-AVX2-NEXT: retq
1471 ; X64-AVX512-LABEL: length32_eq_const:
1472 ; X64-AVX512: # %bb.0:
1473 ; X64-AVX512-NEXT: vmovdqu (%rdi), %ymm0
1474 ; X64-AVX512-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1475 ; X64-AVX512-NEXT: vptest %ymm0, %ymm0
1476 ; X64-AVX512-NEXT: setne %al
1477 ; X64-AVX512-NEXT: vzeroupper
1478 ; X64-AVX512-NEXT: retq
1480 ; X64-MIC-AVX-LABEL: length32_eq_const:
1481 ; X64-MIC-AVX: # %bb.0:
1482 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %ymm0
1483 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} ymm1 = [858927408,926299444,825243960,892613426,959985462,858927408,926299444,825243960]
1484 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k0
1485 ; X64-MIC-AVX-NEXT: kortestw %k0, %k0
1486 ; X64-MIC-AVX-NEXT: setne %al
1487 ; X64-MIC-AVX-NEXT: vzeroupper
1488 ; X64-MIC-AVX-NEXT: retq
1490 %c = icmp ne i32 %m, 0
1495 ; X64-LABEL: length48:
1496 ; X64: # %bb.0:
1497 ; X64-NEXT: movl $48, %edx
1498 ; X64-NEXT: jmp memcmp # TAILCALL
1504 ; X64-SSE-LABEL: length48_eq:
1505 ; X64-SSE: # %bb.0:
1506 ; X64-SSE-NEXT: pushq %rax
1507 ; X64-SSE-NEXT: movl $48, %edx
1508 ; X64-SSE-NEXT: callq memcmp
1509 ; X64-SSE-NEXT: testl %eax, %eax
1510 ; X64-SSE-NEXT: sete %al
1511 ; X64-SSE-NEXT: popq %rcx
1512 ; X64-SSE-NEXT: retq
1514 ; X64-AVX1-LABEL: length48_eq:
1515 ; X64-AVX1: # %bb.0:
1516 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1517 ; X64-AVX1-NEXT: vmovups 32(%rdi), %xmm1
1518 ; X64-AVX1-NEXT: vmovups 32(%rsi), %xmm2
1519 ; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
1520 ; X64-AVX1-NEXT: vxorps %ymm2, %ymm1, %ymm1
1521 ; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1522 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1523 ; X64-AVX1-NEXT: sete %al
1524 ; X64-AVX1-NEXT: vzeroupper
1525 ; X64-AVX1-NEXT: retq
1527 ; X64-AVX2-LABEL: length48_eq:
1528 ; X64-AVX2: # %bb.0:
1529 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1530 ; X64-AVX2-NEXT: vmovdqu 32(%rdi), %xmm1
1531 ; X64-AVX2-NEXT: vmovdqu 32(%rsi), %xmm2
1532 ; X64-AVX2-NEXT: vpxor (%rsi), %ymm0, %ymm0
1533 ; X64-AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm1
1534 ; X64-AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1535 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1536 ; X64-AVX2-NEXT: sete %al
1537 ; X64-AVX2-NEXT: vzeroupper
1538 ; X64-AVX2-NEXT: retq
1540 ; X64-AVX512-LABEL: length48_eq:
1541 ; X64-AVX512: # %bb.0:
1542 ; X64-AVX512-NEXT: vmovdqu (%rdi), %ymm0
1543 ; X64-AVX512-NEXT: vmovdqu 32(%rdi), %xmm1
1544 ; X64-AVX512-NEXT: vmovdqu 32(%rsi), %xmm2
1545 ; X64-AVX512-NEXT: vpxor (%rsi), %ymm0, %ymm0
1546 ; X64-AVX512-NEXT: vpxor %ymm2, %ymm1, %ymm1
1547 ; X64-AVX512-NEXT: vpor %ymm1, %ymm0, %ymm0
1548 ; X64-AVX512-NEXT: vptest %ymm0, %ymm0
1549 ; X64-AVX512-NEXT: sete %al
1550 ; X64-AVX512-NEXT: vzeroupper
1551 ; X64-AVX512-NEXT: retq
1553 ; X64-MIC-AVX-LABEL: length48_eq:
1554 ; X64-MIC-AVX: # %bb.0:
1555 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %ymm0
1556 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %ymm1
1557 ; X64-MIC-AVX-NEXT: vmovdqu 32(%rdi), %xmm2
1558 ; X64-MIC-AVX-NEXT: vmovdqu 32(%rsi), %xmm3
1559 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm3, %zmm2, %k0
1560 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k1
1561 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1562 ; X64-MIC-AVX-NEXT: sete %al
1563 ; X64-MIC-AVX-NEXT: vzeroupper
1564 ; X64-MIC-AVX-NEXT: retq
1566 %cmp = icmp eq i32 %call, 0
1571 ; X64-LABEL: length48_lt:
1572 ; X64: # %bb.0:
1573 ; X64-NEXT: pushq %rax
1574 ; X64-NEXT: movl $48, %edx
1575 ; X64-NEXT: callq memcmp
1576 ; X64-NEXT: shrl $31, %eax
1577 ; X64-NEXT: # kill: def $al killed $al killed $eax
1578 ; X64-NEXT: popq %rcx
1579 ; X64-NEXT: retq
1581 %cmp = icmp slt i32 %call, 0
1586 ; X64-LABEL: length48_gt:
1587 ; X64: # %bb.0:
1588 ; X64-NEXT: pushq %rax
1589 ; X64-NEXT: movl $48, %edx
1590 ; X64-NEXT: callq memcmp
1591 ; X64-NEXT: testl %eax, %eax
1592 ; X64-NEXT: setg %al
1593 ; X64-NEXT: popq %rcx
1594 ; X64-NEXT: retq
1596 %cmp = icmp sgt i32 %call, 0
1601 ; X64-LABEL: length48_eq_prefer128:
1602 ; X64: # %bb.0:
1603 ; X64-NEXT: pushq %rax
1604 ; X64-NEXT: movl $48, %edx
1605 ; X64-NEXT: callq memcmp
1606 ; X64-NEXT: testl %eax, %eax
1607 ; X64-NEXT: sete %al
1608 ; X64-NEXT: popq %rcx
1609 ; X64-NEXT: retq
1611 %cmp = icmp eq i32 %call, 0
1616 ; X64-SSE-LABEL: length48_eq_const:
1617 ; X64-SSE: # %bb.0:
1618 ; X64-SSE-NEXT: pushq %rax
1619 ; X64-SSE-NEXT: movl $.L.str, %esi
1620 ; X64-SSE-NEXT: movl $48, %edx
1621 ; X64-SSE-NEXT: callq memcmp
1622 ; X64-SSE-NEXT: testl %eax, %eax
1623 ; X64-SSE-NEXT: setne %al
1624 ; X64-SSE-NEXT: popq %rcx
1625 ; X64-SSE-NEXT: retq
1627 ; X64-AVX1-LABEL: length48_eq_const:
1628 ; X64-AVX1: # %bb.0:
1629 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1630 ; X64-AVX1-NEXT: vmovups 32(%rdi), %xmm1
1631 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1632 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1633 ; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1634 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1635 ; X64-AVX1-NEXT: setne %al
1636 ; X64-AVX1-NEXT: vzeroupper
1637 ; X64-AVX1-NEXT: retq
1639 ; X64-AVX2-LABEL: length48_eq_const:
1640 ; X64-AVX2: # %bb.0:
1641 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1642 ; X64-AVX2-NEXT: vmovdqu 32(%rdi), %xmm1
1643 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1644 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1645 ; X64-AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1646 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1647 ; X64-AVX2-NEXT: setne %al
1648 ; X64-AVX2-NEXT: vzeroupper
1649 ; X64-AVX2-NEXT: retq
1651 ; X64-AVX512-LABEL: length48_eq_const:
1652 ; X64-AVX512: # %bb.0:
1653 ; X64-AVX512-NEXT: vmovdqu (%rdi), %ymm0
1654 ; X64-AVX512-NEXT: vmovdqu 32(%rdi), %xmm1
1655 ; X64-AVX512-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1656 ; X64-AVX512-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1657 ; X64-AVX512-NEXT: vpor %ymm1, %ymm0, %ymm0
1658 ; X64-AVX512-NEXT: vptest %ymm0, %ymm0
1659 ; X64-AVX512-NEXT: setne %al
1660 ; X64-AVX512-NEXT: vzeroupper
1661 ; X64-AVX512-NEXT: retq
1663 ; X64-MIC-AVX-LABEL: length48_eq_const:
1664 ; X64-MIC-AVX: # %bb.0:
1665 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %ymm0
1666 ; X64-MIC-AVX-NEXT: vmovdqu 32(%rdi), %xmm1
1667 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} ymm2 = [892613426,959985462,858927408,926299444,0,0,0,0]
1668 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm1, %k0
1669 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} ymm1 = [858927408,926299444,825243960,892613426,959985462,858927408,926299444,825243960]
1670 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k1
1671 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1672 ; X64-MIC-AVX-NEXT: setne %al
1673 ; X64-MIC-AVX-NEXT: vzeroupper
1674 ; X64-MIC-AVX-NEXT: retq
1676 %c = icmp ne i32 %m, 0
1681 ; X64-LABEL: length63:
1682 ; X64: # %bb.0:
1683 ; X64-NEXT: movl $63, %edx
1684 ; X64-NEXT: jmp memcmp # TAILCALL
1690 ; X64-SSE-LABEL: length63_eq:
1691 ; X64-SSE: # %bb.0:
1692 ; X64-SSE-NEXT: pushq %rax
1693 ; X64-SSE-NEXT: movl $63, %edx
1694 ; X64-SSE-NEXT: callq memcmp
1695 ; X64-SSE-NEXT: testl %eax, %eax
1696 ; X64-SSE-NEXT: setne %al
1697 ; X64-SSE-NEXT: popq %rcx
1698 ; X64-SSE-NEXT: retq
1700 ; X64-AVX1-LABEL: length63_eq:
1701 ; X64-AVX1: # %bb.0:
1702 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1703 ; X64-AVX1-NEXT: vmovups 31(%rdi), %ymm1
1704 ; X64-AVX1-NEXT: vxorps 31(%rsi), %ymm1, %ymm1
1705 ; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
1706 ; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1707 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1708 ; X64-AVX1-NEXT: setne %al
1709 ; X64-AVX1-NEXT: vzeroupper
1710 ; X64-AVX1-NEXT: retq
1712 ; X64-AVX2-LABEL: length63_eq:
1713 ; X64-AVX2: # %bb.0:
1714 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1715 ; X64-AVX2-NEXT: vmovdqu 31(%rdi), %ymm1
1716 ; X64-AVX2-NEXT: vpxor 31(%rsi), %ymm1, %ymm1
1717 ; X64-AVX2-NEXT: vpxor (%rsi), %ymm0, %ymm0
1718 ; X64-AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1719 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1720 ; X64-AVX2-NEXT: setne %al
1721 ; X64-AVX2-NEXT: vzeroupper
1722 ; X64-AVX2-NEXT: retq
1724 ; X64-AVX512-LABEL: length63_eq:
1725 ; X64-AVX512: # %bb.0:
1726 ; X64-AVX512-NEXT: vmovdqu (%rdi), %ymm0
1727 ; X64-AVX512-NEXT: vmovdqu 31(%rdi), %ymm1
1728 ; X64-AVX512-NEXT: vpxor 31(%rsi), %ymm1, %ymm1
1729 ; X64-AVX512-NEXT: vpxor (%rsi), %ymm0, %ymm0
1730 ; X64-AVX512-NEXT: vpor %ymm1, %ymm0, %ymm0
1731 ; X64-AVX512-NEXT: vptest %ymm0, %ymm0
1732 ; X64-AVX512-NEXT: setne %al
1733 ; X64-AVX512-NEXT: vzeroupper
1734 ; X64-AVX512-NEXT: retq
1736 ; X64-MIC-AVX-LABEL: length63_eq:
1737 ; X64-MIC-AVX: # %bb.0:
1738 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %ymm0
1739 ; X64-MIC-AVX-NEXT: vmovdqu 31(%rdi), %ymm1
1740 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %ymm2
1741 ; X64-MIC-AVX-NEXT: vmovdqu 31(%rsi), %ymm3
1742 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm3, %zmm1, %k0
1743 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm0, %k1
1744 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1745 ; X64-MIC-AVX-NEXT: setne %al
1746 ; X64-MIC-AVX-NEXT: vzeroupper
1747 ; X64-MIC-AVX-NEXT: retq
1749 %cmp = icmp ne i32 %call, 0
1754 ; X64-LABEL: length63_lt:
1755 ; X64: # %bb.0:
1756 ; X64-NEXT: pushq %rax
1757 ; X64-NEXT: movl $63, %edx
1758 ; X64-NEXT: callq memcmp
1759 ; X64-NEXT: shrl $31, %eax
1760 ; X64-NEXT: # kill: def $al killed $al killed $eax
1761 ; X64-NEXT: popq %rcx
1762 ; X64-NEXT: retq
1764 %cmp = icmp slt i32 %call, 0
1769 ; X64-LABEL: length63_gt:
1770 ; X64: # %bb.0:
1771 ; X64-NEXT: pushq %rax
1772 ; X64-NEXT: movl $63, %edx
1773 ; X64-NEXT: callq memcmp
1774 ; X64-NEXT: testl %eax, %eax
1775 ; X64-NEXT: setg %al
1776 ; X64-NEXT: popq %rcx
1777 ; X64-NEXT: retq
1779 %cmp = icmp sgt i32 %call, 0
1784 ; X64-SSE-LABEL: length63_eq_const:
1785 ; X64-SSE: # %bb.0:
1786 ; X64-SSE-NEXT: pushq %rax
1787 ; X64-SSE-NEXT: movl $.L.str, %esi
1788 ; X64-SSE-NEXT: movl $63, %edx
1789 ; X64-SSE-NEXT: callq memcmp
1790 ; X64-SSE-NEXT: testl %eax, %eax
1791 ; X64-SSE-NEXT: sete %al
1792 ; X64-SSE-NEXT: popq %rcx
1793 ; X64-SSE-NEXT: retq
1795 ; X64-AVX1-LABEL: length63_eq_const:
1796 ; X64-AVX1: # %bb.0:
1797 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1798 ; X64-AVX1-NEXT: vmovups 31(%rdi), %ymm1
1799 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1800 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1801 ; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1802 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1803 ; X64-AVX1-NEXT: sete %al
1804 ; X64-AVX1-NEXT: vzeroupper
1805 ; X64-AVX1-NEXT: retq
1807 ; X64-AVX2-LABEL: length63_eq_const:
1808 ; X64-AVX2: # %bb.0:
1809 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1810 ; X64-AVX2-NEXT: vmovdqu 31(%rdi), %ymm1
1811 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1812 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1813 ; X64-AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1814 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1815 ; X64-AVX2-NEXT: sete %al
1816 ; X64-AVX2-NEXT: vzeroupper
1817 ; X64-AVX2-NEXT: retq
1819 ; X64-AVX512-LABEL: length63_eq_const:
1820 ; X64-AVX512: # %bb.0:
1821 ; X64-AVX512-NEXT: vmovdqu (%rdi), %ymm0
1822 ; X64-AVX512-NEXT: vmovdqu 31(%rdi), %ymm1
1823 ; X64-AVX512-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1824 ; X64-AVX512-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1825 ; X64-AVX512-NEXT: vpor %ymm1, %ymm0, %ymm0
1826 ; X64-AVX512-NEXT: vptest %ymm0, %ymm0
1827 ; X64-AVX512-NEXT: sete %al
1828 ; X64-AVX512-NEXT: vzeroupper
1829 ; X64-AVX512-NEXT: retq
1831 ; X64-MIC-AVX-LABEL: length63_eq_const:
1832 ; X64-MIC-AVX: # %bb.0:
1833 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %ymm0
1834 ; X64-MIC-AVX-NEXT: vmovdqu 31(%rdi), %ymm1
1835 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} ymm2 = [875770417,943142453,842084409,909456435,809056311,875770417,943142453,842084409]
1836 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm1, %k0
1837 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} ymm1 = [858927408,926299444,825243960,892613426,959985462,858927408,926299444,825243960]
1838 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k1
1839 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1840 ; X64-MIC-AVX-NEXT: sete %al
1841 ; X64-MIC-AVX-NEXT: vzeroupper
1842 ; X64-MIC-AVX-NEXT: retq
1844 %c = icmp eq i32 %m, 0
1849 ; X64-LABEL: length64:
1850 ; X64: # %bb.0:
1851 ; X64-NEXT: movl $64, %edx
1852 ; X64-NEXT: jmp memcmp # TAILCALL
1858 ; X64-SSE-LABEL: length64_eq:
1859 ; X64-SSE: # %bb.0:
1860 ; X64-SSE-NEXT: pushq %rax
1861 ; X64-SSE-NEXT: movl $64, %edx
1862 ; X64-SSE-NEXT: callq memcmp
1863 ; X64-SSE-NEXT: testl %eax, %eax
1864 ; X64-SSE-NEXT: setne %al
1865 ; X64-SSE-NEXT: popq %rcx
1866 ; X64-SSE-NEXT: retq
1868 ; X64-AVX1-LABEL: length64_eq:
1869 ; X64-AVX1: # %bb.0:
1870 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1871 ; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1
1872 ; X64-AVX1-NEXT: vxorps 32(%rsi), %ymm1, %ymm1
1873 ; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
1874 ; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1875 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1876 ; X64-AVX1-NEXT: setne %al
1877 ; X64-AVX1-NEXT: vzeroupper
1878 ; X64-AVX1-NEXT: retq
1880 ; X64-AVX2-LABEL: length64_eq:
1881 ; X64-AVX2: # %bb.0:
1882 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1883 ; X64-AVX2-NEXT: vmovdqu 32(%rdi), %ymm1
1884 ; X64-AVX2-NEXT: vpxor 32(%rsi), %ymm1, %ymm1
1885 ; X64-AVX2-NEXT: vpxor (%rsi), %ymm0, %ymm0
1886 ; X64-AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1887 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1888 ; X64-AVX2-NEXT: setne %al
1889 ; X64-AVX2-NEXT: vzeroupper
1890 ; X64-AVX2-NEXT: retq
1892 ; X64-AVX512-LABEL: length64_eq:
1893 ; X64-AVX512: # %bb.0:
1894 ; X64-AVX512-NEXT: vmovdqu64 (%rdi), %zmm0
1895 ; X64-AVX512-NEXT: vpcmpneqd (%rsi), %zmm0, %k0
1896 ; X64-AVX512-NEXT: kortestw %k0, %k0
1897 ; X64-AVX512-NEXT: setne %al
1898 ; X64-AVX512-NEXT: vzeroupper
1899 ; X64-AVX512-NEXT: retq
1901 ; X64-MIC-AVX2-LABEL: length64_eq:
1902 ; X64-MIC-AVX2: # %bb.0:
1903 ; X64-MIC-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1904 ; X64-MIC-AVX2-NEXT: vmovdqu 32(%rdi), %ymm1
1905 ; X64-MIC-AVX2-NEXT: vmovdqu (%rsi), %ymm2
1906 ; X64-MIC-AVX2-NEXT: vmovdqu 32(%rsi), %ymm3
1907 ; X64-MIC-AVX2-NEXT: vpcmpneqd %zmm3, %zmm1, %k0
1908 ; X64-MIC-AVX2-NEXT: vpcmpneqd %zmm2, %zmm0, %k1
1909 ; X64-MIC-AVX2-NEXT: kortestw %k0, %k1
1910 ; X64-MIC-AVX2-NEXT: setne %al
1911 ; X64-MIC-AVX2-NEXT: vzeroupper
1912 ; X64-MIC-AVX2-NEXT: retq
1914 ; X64-MIC-AVX512F-LABEL: length64_eq:
1915 ; X64-MIC-AVX512F: # %bb.0:
1916 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
1917 ; X64-MIC-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k0
1918 ; X64-MIC-AVX512F-NEXT: kortestw %k0, %k0
1919 ; X64-MIC-AVX512F-NEXT: setne %al
1920 ; X64-MIC-AVX512F-NEXT: vzeroupper
1921 ; X64-MIC-AVX512F-NEXT: retq
1923 %cmp = icmp ne i32 %call, 0
1928 ; X64-LABEL: length64_lt:
1929 ; X64: # %bb.0:
1930 ; X64-NEXT: pushq %rax
1931 ; X64-NEXT: movl $64, %edx
1932 ; X64-NEXT: callq memcmp
1933 ; X64-NEXT: shrl $31, %eax
1934 ; X64-NEXT: # kill: def $al killed $al killed $eax
1935 ; X64-NEXT: popq %rcx
1936 ; X64-NEXT: retq
1938 %cmp = icmp slt i32 %call, 0
1943 ; X64-LABEL: length64_gt:
1944 ; X64: # %bb.0:
1945 ; X64-NEXT: pushq %rax
1946 ; X64-NEXT: movl $64, %edx
1947 ; X64-NEXT: callq memcmp
1948 ; X64-NEXT: testl %eax, %eax
1949 ; X64-NEXT: setg %al
1950 ; X64-NEXT: popq %rcx
1951 ; X64-NEXT: retq
1953 %cmp = icmp sgt i32 %call, 0
1958 ; X64-SSE-LABEL: length64_eq_const:
1959 ; X64-SSE: # %bb.0:
1960 ; X64-SSE-NEXT: pushq %rax
1961 ; X64-SSE-NEXT: movl $.L.str, %esi
1962 ; X64-SSE-NEXT: movl $64, %edx
1963 ; X64-SSE-NEXT: callq memcmp
1964 ; X64-SSE-NEXT: testl %eax, %eax
1965 ; X64-SSE-NEXT: sete %al
1966 ; X64-SSE-NEXT: popq %rcx
1967 ; X64-SSE-NEXT: retq
1969 ; X64-AVX1-LABEL: length64_eq_const:
1970 ; X64-AVX1: # %bb.0:
1971 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1972 ; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1
1973 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1974 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1975 ; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1976 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1977 ; X64-AVX1-NEXT: sete %al
1978 ; X64-AVX1-NEXT: vzeroupper
1979 ; X64-AVX1-NEXT: retq
1981 ; X64-AVX2-LABEL: length64_eq_const:
1982 ; X64-AVX2: # %bb.0:
1983 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1984 ; X64-AVX2-NEXT: vmovdqu 32(%rdi), %ymm1
1985 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1986 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1987 ; X64-AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1988 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1989 ; X64-AVX2-NEXT: sete %al
1990 ; X64-AVX2-NEXT: vzeroupper
1991 ; X64-AVX2-NEXT: retq
1993 ; X64-AVX512-LABEL: length64_eq_const:
1994 ; X64-AVX512: # %bb.0:
1995 ; X64-AVX512-NEXT: vmovdqu64 (%rdi), %zmm0
1996 ; X64-AVX512-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k0
1997 ; X64-AVX512-NEXT: kortestw %k0, %k0
1998 ; X64-AVX512-NEXT: sete %al
1999 ; X64-AVX512-NEXT: vzeroupper
2000 ; X64-AVX512-NEXT: retq
2002 ; X64-MIC-AVX2-LABEL: length64_eq_const:
2003 ; X64-MIC-AVX2: # %bb.0:
2004 ; X64-MIC-AVX2-NEXT: vmovdqu (%rdi), %ymm0
2005 ; X64-MIC-AVX2-NEXT: vmovdqu 32(%rdi), %ymm1
2006 ; X64-MIC-AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [892613426,959985462,858927408,926299444,825243960,892613426,959985462,858927408]
2007 ; X64-MIC-AVX2-NEXT: vpcmpneqd %zmm2, %zmm1, %k0
2008 ; X64-MIC-AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [858927408,926299444,825243960,892613426,959985462,858927408,926299444,825243960]
2009 ; X64-MIC-AVX2-NEXT: vpcmpneqd %zmm1, %zmm0, %k1
2010 ; X64-MIC-AVX2-NEXT: kortestw %k0, %k1
2011 ; X64-MIC-AVX2-NEXT: sete %al
2012 ; X64-MIC-AVX2-NEXT: vzeroupper
2013 ; X64-MIC-AVX2-NEXT: retq
2015 ; X64-MIC-AVX512F-LABEL: length64_eq_const:
2016 ; X64-MIC-AVX512F: # %bb.0:
2017 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2018 ; X64-MIC-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k0
2019 ; X64-MIC-AVX512F-NEXT: kortestw %k0, %k0
2020 ; X64-MIC-AVX512F-NEXT: sete %al
2021 ; X64-MIC-AVX512F-NEXT: vzeroupper
2022 ; X64-MIC-AVX512F-NEXT: retq
2024 %c = icmp eq i32 %m, 0
2029 ; X64-LABEL: length96:
2030 ; X64: # %bb.0:
2031 ; X64-NEXT: movl $96, %edx
2032 ; X64-NEXT: jmp memcmp # TAILCALL
2038 ; X64-SSE-LABEL: length96_eq:
2039 ; X64-SSE: # %bb.0:
2040 ; X64-SSE-NEXT: pushq %rax
2041 ; X64-SSE-NEXT: movl $96, %edx
2042 ; X64-SSE-NEXT: callq memcmp
2043 ; X64-SSE-NEXT: testl %eax, %eax
2044 ; X64-SSE-NEXT: setne %al
2045 ; X64-SSE-NEXT: popq %rcx
2046 ; X64-SSE-NEXT: retq
2048 ; X64-AVX1-LABEL: length96_eq:
2049 ; X64-AVX1: # %bb.0:
2050 ; X64-AVX1-NEXT: pushq %rax
2051 ; X64-AVX1-NEXT: movl $96, %edx
2052 ; X64-AVX1-NEXT: callq memcmp
2053 ; X64-AVX1-NEXT: testl %eax, %eax
2054 ; X64-AVX1-NEXT: setne %al
2055 ; X64-AVX1-NEXT: popq %rcx
2056 ; X64-AVX1-NEXT: retq
2058 ; X64-AVX2-LABEL: length96_eq:
2059 ; X64-AVX2: # %bb.0:
2060 ; X64-AVX2-NEXT: pushq %rax
2061 ; X64-AVX2-NEXT: movl $96, %edx
2062 ; X64-AVX2-NEXT: callq memcmp
2063 ; X64-AVX2-NEXT: testl %eax, %eax
2064 ; X64-AVX2-NEXT: setne %al
2065 ; X64-AVX2-NEXT: popq %rcx
2066 ; X64-AVX2-NEXT: retq
2068 ; X64-AVX512BW-LABEL: length96_eq:
2069 ; X64-AVX512BW: # %bb.0:
2070 ; X64-AVX512BW-NEXT: vmovdqu64 (%rdi), %zmm0
2071 ; X64-AVX512BW-NEXT: vmovdqu 64(%rdi), %ymm1
2072 ; X64-AVX512BW-NEXT: vmovdqu 64(%rsi), %ymm2
2073 ; X64-AVX512BW-NEXT: vpcmpneqb (%rsi), %zmm0, %k0
2074 ; X64-AVX512BW-NEXT: vpcmpneqb %zmm2, %zmm1, %k1
2075 ; X64-AVX512BW-NEXT: kortestq %k1, %k0
2076 ; X64-AVX512BW-NEXT: setne %al
2077 ; X64-AVX512BW-NEXT: vzeroupper
2078 ; X64-AVX512BW-NEXT: retq
2080 ; X64-AVX512F-LABEL: length96_eq:
2081 ; X64-AVX512F: # %bb.0:
2082 ; X64-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2083 ; X64-AVX512F-NEXT: vmovdqu 64(%rdi), %ymm1
2084 ; X64-AVX512F-NEXT: vmovdqu 64(%rsi), %ymm2
2085 ; X64-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k0
2086 ; X64-AVX512F-NEXT: vpcmpneqd %zmm2, %zmm1, %k1
2087 ; X64-AVX512F-NEXT: kortestw %k1, %k0
2088 ; X64-AVX512F-NEXT: setne %al
2089 ; X64-AVX512F-NEXT: vzeroupper
2090 ; X64-AVX512F-NEXT: retq
2092 ; X64-MIC-AVX2-LABEL: length96_eq:
2093 ; X64-MIC-AVX2: # %bb.0:
2094 ; X64-MIC-AVX2-NEXT: pushq %rax
2095 ; X64-MIC-AVX2-NEXT: movl $96, %edx
2096 ; X64-MIC-AVX2-NEXT: callq memcmp
2097 ; X64-MIC-AVX2-NEXT: testl %eax, %eax
2098 ; X64-MIC-AVX2-NEXT: setne %al
2099 ; X64-MIC-AVX2-NEXT: popq %rcx
2100 ; X64-MIC-AVX2-NEXT: retq
2102 ; X64-MIC-AVX512F-LABEL: length96_eq:
2103 ; X64-MIC-AVX512F: # %bb.0:
2104 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2105 ; X64-MIC-AVX512F-NEXT: vmovdqu 64(%rdi), %ymm1
2106 ; X64-MIC-AVX512F-NEXT: vmovdqu 64(%rsi), %ymm2
2107 ; X64-MIC-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k0
2108 ; X64-MIC-AVX512F-NEXT: vpcmpneqd %zmm2, %zmm1, %k1
2109 ; X64-MIC-AVX512F-NEXT: kortestw %k1, %k0
2110 ; X64-MIC-AVX512F-NEXT: setne %al
2111 ; X64-MIC-AVX512F-NEXT: vzeroupper
2112 ; X64-MIC-AVX512F-NEXT: retq
2114 %cmp = icmp ne i32 %call, 0
2119 ; X64-LABEL: length96_lt:
2120 ; X64: # %bb.0:
2121 ; X64-NEXT: pushq %rax
2122 ; X64-NEXT: movl $96, %edx
2123 ; X64-NEXT: callq memcmp
2124 ; X64-NEXT: shrl $31, %eax
2125 ; X64-NEXT: # kill: def $al killed $al killed $eax
2126 ; X64-NEXT: popq %rcx
2127 ; X64-NEXT: retq
2129 %cmp = icmp slt i32 %call, 0
2134 ; X64-LABEL: length96_gt:
2135 ; X64: # %bb.0:
2136 ; X64-NEXT: pushq %rax
2137 ; X64-NEXT: movl $96, %edx
2138 ; X64-NEXT: callq memcmp
2139 ; X64-NEXT: testl %eax, %eax
2140 ; X64-NEXT: setg %al
2141 ; X64-NEXT: popq %rcx
2142 ; X64-NEXT: retq
2144 %cmp = icmp sgt i32 %call, 0
2149 ; X64-SSE-LABEL: length96_eq_const:
2150 ; X64-SSE: # %bb.0:
2151 ; X64-SSE-NEXT: pushq %rax
2152 ; X64-SSE-NEXT: movl $.L.str, %esi
2153 ; X64-SSE-NEXT: movl $96, %edx
2154 ; X64-SSE-NEXT: callq memcmp
2155 ; X64-SSE-NEXT: testl %eax, %eax
2156 ; X64-SSE-NEXT: sete %al
2157 ; X64-SSE-NEXT: popq %rcx
2158 ; X64-SSE-NEXT: retq
2160 ; X64-AVX1-LABEL: length96_eq_const:
2161 ; X64-AVX1: # %bb.0:
2162 ; X64-AVX1-NEXT: pushq %rax
2163 ; X64-AVX1-NEXT: movl $.L.str, %esi
2164 ; X64-AVX1-NEXT: movl $96, %edx
2165 ; X64-AVX1-NEXT: callq memcmp
2166 ; X64-AVX1-NEXT: testl %eax, %eax
2167 ; X64-AVX1-NEXT: sete %al
2168 ; X64-AVX1-NEXT: popq %rcx
2169 ; X64-AVX1-NEXT: retq
2171 ; X64-AVX2-LABEL: length96_eq_const:
2172 ; X64-AVX2: # %bb.0:
2173 ; X64-AVX2-NEXT: pushq %rax
2174 ; X64-AVX2-NEXT: movl $.L.str, %esi
2175 ; X64-AVX2-NEXT: movl $96, %edx
2176 ; X64-AVX2-NEXT: callq memcmp
2177 ; X64-AVX2-NEXT: testl %eax, %eax
2178 ; X64-AVX2-NEXT: sete %al
2179 ; X64-AVX2-NEXT: popq %rcx
2180 ; X64-AVX2-NEXT: retq
2182 ; X64-AVX512BW-LABEL: length96_eq_const:
2183 ; X64-AVX512BW: # %bb.0:
2184 ; X64-AVX512BW-NEXT: vmovdqu64 (%rdi), %zmm0
2185 ; X64-AVX512BW-NEXT: vmovdqu 64(%rdi), %ymm1
2186 ; X64-AVX512BW-NEXT: vpcmpneqb .L.str(%rip), %zmm0, %k0
2187 ; X64-AVX512BW-NEXT: vpcmpneqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %k1
2188 ; X64-AVX512BW-NEXT: kortestq %k1, %k0
2189 ; X64-AVX512BW-NEXT: sete %al
2190 ; X64-AVX512BW-NEXT: vzeroupper
2191 ; X64-AVX512BW-NEXT: retq
2193 ; X64-AVX512F-LABEL: length96_eq_const:
2194 ; X64-AVX512F: # %bb.0:
2195 ; X64-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2196 ; X64-AVX512F-NEXT: vmovdqu 64(%rdi), %ymm1
2197 ; X64-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k0
2198 ; X64-AVX512F-NEXT: vpcmpneqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %k1
2199 ; X64-AVX512F-NEXT: kortestw %k1, %k0
2200 ; X64-AVX512F-NEXT: sete %al
2201 ; X64-AVX512F-NEXT: vzeroupper
2202 ; X64-AVX512F-NEXT: retq
2204 ; X64-MIC-AVX2-LABEL: length96_eq_const:
2205 ; X64-MIC-AVX2: # %bb.0:
2206 ; X64-MIC-AVX2-NEXT: pushq %rax
2207 ; X64-MIC-AVX2-NEXT: movl $.L.str, %esi
2208 ; X64-MIC-AVX2-NEXT: movl $96, %edx
2209 ; X64-MIC-AVX2-NEXT: callq memcmp
2210 ; X64-MIC-AVX2-NEXT: testl %eax, %eax
2211 ; X64-MIC-AVX2-NEXT: sete %al
2212 ; X64-MIC-AVX2-NEXT: popq %rcx
2213 ; X64-MIC-AVX2-NEXT: retq
2215 ; X64-MIC-AVX512F-LABEL: length96_eq_const:
2216 ; X64-MIC-AVX512F: # %bb.0:
2217 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2218 ; X64-MIC-AVX512F-NEXT: vmovdqu 64(%rdi), %ymm1
2219 ; X64-MIC-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k0
2220 ; X64-MIC-AVX512F-NEXT: vpcmpneqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %k1
2221 ; X64-MIC-AVX512F-NEXT: kortestw %k1, %k0
2222 ; X64-MIC-AVX512F-NEXT: sete %al
2223 ; X64-MIC-AVX512F-NEXT: vzeroupper
2224 ; X64-MIC-AVX512F-NEXT: retq
2226 %c = icmp eq i32 %m, 0
2231 ; X64-LABEL: length127:
2232 ; X64: # %bb.0:
2233 ; X64-NEXT: movl $127, %edx
2234 ; X64-NEXT: jmp memcmp # TAILCALL
2240 ; X64-SSE-LABEL: length127_eq:
2241 ; X64-SSE: # %bb.0:
2242 ; X64-SSE-NEXT: pushq %rax
2243 ; X64-SSE-NEXT: movl $127, %edx
2244 ; X64-SSE-NEXT: callq memcmp
2245 ; X64-SSE-NEXT: testl %eax, %eax
2246 ; X64-SSE-NEXT: setne %al
2247 ; X64-SSE-NEXT: popq %rcx
2248 ; X64-SSE-NEXT: retq
2250 ; X64-AVX1-LABEL: length127_eq:
2251 ; X64-AVX1: # %bb.0:
2252 ; X64-AVX1-NEXT: pushq %rax
2253 ; X64-AVX1-NEXT: movl $127, %edx
2254 ; X64-AVX1-NEXT: callq memcmp
2255 ; X64-AVX1-NEXT: testl %eax, %eax
2256 ; X64-AVX1-NEXT: setne %al
2257 ; X64-AVX1-NEXT: popq %rcx
2258 ; X64-AVX1-NEXT: retq
2260 ; X64-AVX2-LABEL: length127_eq:
2261 ; X64-AVX2: # %bb.0:
2262 ; X64-AVX2-NEXT: pushq %rax
2263 ; X64-AVX2-NEXT: movl $127, %edx
2264 ; X64-AVX2-NEXT: callq memcmp
2265 ; X64-AVX2-NEXT: testl %eax, %eax
2266 ; X64-AVX2-NEXT: setne %al
2267 ; X64-AVX2-NEXT: popq %rcx
2268 ; X64-AVX2-NEXT: retq
2270 ; X64-AVX512BW-LABEL: length127_eq:
2271 ; X64-AVX512BW: # %bb.0:
2272 ; X64-AVX512BW-NEXT: vmovdqu64 (%rdi), %zmm0
2273 ; X64-AVX512BW-NEXT: vmovdqu64 63(%rdi), %zmm1
2274 ; X64-AVX512BW-NEXT: vpcmpneqb 63(%rsi), %zmm1, %k0
2275 ; X64-AVX512BW-NEXT: vpcmpneqb (%rsi), %zmm0, %k1
2276 ; X64-AVX512BW-NEXT: kortestq %k0, %k1
2277 ; X64-AVX512BW-NEXT: setne %al
2278 ; X64-AVX512BW-NEXT: vzeroupper
2279 ; X64-AVX512BW-NEXT: retq
2281 ; X64-AVX512F-LABEL: length127_eq:
2282 ; X64-AVX512F: # %bb.0:
2283 ; X64-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2284 ; X64-AVX512F-NEXT: vmovdqu64 63(%rdi), %zmm1
2285 ; X64-AVX512F-NEXT: vpcmpneqd 63(%rsi), %zmm1, %k0
2286 ; X64-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k1
2287 ; X64-AVX512F-NEXT: kortestw %k0, %k1
2288 ; X64-AVX512F-NEXT: setne %al
2289 ; X64-AVX512F-NEXT: vzeroupper
2290 ; X64-AVX512F-NEXT: retq
2292 ; X64-MIC-AVX2-LABEL: length127_eq:
2293 ; X64-MIC-AVX2: # %bb.0:
2294 ; X64-MIC-AVX2-NEXT: pushq %rax
2295 ; X64-MIC-AVX2-NEXT: movl $127, %edx
2296 ; X64-MIC-AVX2-NEXT: callq memcmp
2297 ; X64-MIC-AVX2-NEXT: testl %eax, %eax
2298 ; X64-MIC-AVX2-NEXT: setne %al
2299 ; X64-MIC-AVX2-NEXT: popq %rcx
2300 ; X64-MIC-AVX2-NEXT: retq
2302 ; X64-MIC-AVX512F-LABEL: length127_eq:
2303 ; X64-MIC-AVX512F: # %bb.0:
2304 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2305 ; X64-MIC-AVX512F-NEXT: vmovdqu64 63(%rdi), %zmm1
2306 ; X64-MIC-AVX512F-NEXT: vpcmpneqd 63(%rsi), %zmm1, %k0
2307 ; X64-MIC-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k1
2308 ; X64-MIC-AVX512F-NEXT: kortestw %k0, %k1
2309 ; X64-MIC-AVX512F-NEXT: setne %al
2310 ; X64-MIC-AVX512F-NEXT: vzeroupper
2311 ; X64-MIC-AVX512F-NEXT: retq
2313 %cmp = icmp ne i32 %call, 0
2318 ; X64-LABEL: length127_lt:
2319 ; X64: # %bb.0:
2320 ; X64-NEXT: pushq %rax
2321 ; X64-NEXT: movl $127, %edx
2322 ; X64-NEXT: callq memcmp
2323 ; X64-NEXT: shrl $31, %eax
2324 ; X64-NEXT: # kill: def $al killed $al killed $eax
2325 ; X64-NEXT: popq %rcx
2326 ; X64-NEXT: retq
2328 %cmp = icmp slt i32 %call, 0
2333 ; X64-LABEL: length127_gt:
2334 ; X64: # %bb.0:
2335 ; X64-NEXT: pushq %rax
2336 ; X64-NEXT: movl $127, %edx
2337 ; X64-NEXT: callq memcmp
2338 ; X64-NEXT: testl %eax, %eax
2339 ; X64-NEXT: setg %al
2340 ; X64-NEXT: popq %rcx
2341 ; X64-NEXT: retq
2343 %cmp = icmp sgt i32 %call, 0
2348 ; X64-SSE-LABEL: length127_eq_const:
2349 ; X64-SSE: # %bb.0:
2350 ; X64-SSE-NEXT: pushq %rax
2351 ; X64-SSE-NEXT: movl $.L.str, %esi
2352 ; X64-SSE-NEXT: movl $127, %edx
2353 ; X64-SSE-NEXT: callq memcmp
2354 ; X64-SSE-NEXT: testl %eax, %eax
2355 ; X64-SSE-NEXT: sete %al
2356 ; X64-SSE-NEXT: popq %rcx
2357 ; X64-SSE-NEXT: retq
2359 ; X64-AVX1-LABEL: length127_eq_const:
2360 ; X64-AVX1: # %bb.0:
2361 ; X64-AVX1-NEXT: pushq %rax
2362 ; X64-AVX1-NEXT: movl $.L.str, %esi
2363 ; X64-AVX1-NEXT: movl $127, %edx
2364 ; X64-AVX1-NEXT: callq memcmp
2365 ; X64-AVX1-NEXT: testl %eax, %eax
2366 ; X64-AVX1-NEXT: sete %al
2367 ; X64-AVX1-NEXT: popq %rcx
2368 ; X64-AVX1-NEXT: retq
2370 ; X64-AVX2-LABEL: length127_eq_const:
2371 ; X64-AVX2: # %bb.0:
2372 ; X64-AVX2-NEXT: pushq %rax
2373 ; X64-AVX2-NEXT: movl $.L.str, %esi
2374 ; X64-AVX2-NEXT: movl $127, %edx
2375 ; X64-AVX2-NEXT: callq memcmp
2376 ; X64-AVX2-NEXT: testl %eax, %eax
2377 ; X64-AVX2-NEXT: sete %al
2378 ; X64-AVX2-NEXT: popq %rcx
2379 ; X64-AVX2-NEXT: retq
2381 ; X64-AVX512BW-LABEL: length127_eq_const:
2382 ; X64-AVX512BW: # %bb.0:
2383 ; X64-AVX512BW-NEXT: vmovdqu64 (%rdi), %zmm0
2384 ; X64-AVX512BW-NEXT: vmovdqu64 63(%rdi), %zmm1
2385 ; X64-AVX512BW-NEXT: vpcmpneqb .L.str+63(%rip), %zmm1, %k0
2386 ; X64-AVX512BW-NEXT: vpcmpneqb .L.str(%rip), %zmm0, %k1
2387 ; X64-AVX512BW-NEXT: kortestq %k0, %k1
2388 ; X64-AVX512BW-NEXT: sete %al
2389 ; X64-AVX512BW-NEXT: vzeroupper
2390 ; X64-AVX512BW-NEXT: retq
2392 ; X64-AVX512F-LABEL: length127_eq_const:
2393 ; X64-AVX512F: # %bb.0:
2394 ; X64-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2395 ; X64-AVX512F-NEXT: vmovdqu64 63(%rdi), %zmm1
2396 ; X64-AVX512F-NEXT: vpcmpneqd .L.str+63(%rip), %zmm1, %k0
2397 ; X64-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k1
2398 ; X64-AVX512F-NEXT: kortestw %k0, %k1
2399 ; X64-AVX512F-NEXT: sete %al
2400 ; X64-AVX512F-NEXT: vzeroupper
2401 ; X64-AVX512F-NEXT: retq
2403 ; X64-MIC-AVX2-LABEL: length127_eq_const:
2404 ; X64-MIC-AVX2: # %bb.0:
2405 ; X64-MIC-AVX2-NEXT: pushq %rax
2406 ; X64-MIC-AVX2-NEXT: movl $.L.str, %esi
2407 ; X64-MIC-AVX2-NEXT: movl $127, %edx
2408 ; X64-MIC-AVX2-NEXT: callq memcmp
2409 ; X64-MIC-AVX2-NEXT: testl %eax, %eax
2410 ; X64-MIC-AVX2-NEXT: sete %al
2411 ; X64-MIC-AVX2-NEXT: popq %rcx
2412 ; X64-MIC-AVX2-NEXT: retq
2414 ; X64-MIC-AVX512F-LABEL: length127_eq_const:
2415 ; X64-MIC-AVX512F: # %bb.0:
2416 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2417 ; X64-MIC-AVX512F-NEXT: vmovdqu64 63(%rdi), %zmm1
2418 ; X64-MIC-AVX512F-NEXT: vpcmpneqd .L.str+63(%rip), %zmm1, %k0
2419 ; X64-MIC-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k1
2420 ; X64-MIC-AVX512F-NEXT: kortestw %k0, %k1
2421 ; X64-MIC-AVX512F-NEXT: sete %al
2422 ; X64-MIC-AVX512F-NEXT: vzeroupper
2423 ; X64-MIC-AVX512F-NEXT: retq
2425 %c = icmp eq i32 %m, 0
2430 ; X64-LABEL: length128:
2431 ; X64: # %bb.0:
2432 ; X64-NEXT: movl $128, %edx
2433 ; X64-NEXT: jmp memcmp # TAILCALL
2439 ; X64-SSE-LABEL: length128_eq:
2440 ; X64-SSE: # %bb.0:
2441 ; X64-SSE-NEXT: pushq %rax
2442 ; X64-SSE-NEXT: movl $128, %edx
2443 ; X64-SSE-NEXT: callq memcmp
2444 ; X64-SSE-NEXT: testl %eax, %eax
2445 ; X64-SSE-NEXT: setne %al
2446 ; X64-SSE-NEXT: popq %rcx
2447 ; X64-SSE-NEXT: retq
2449 ; X64-AVX1-LABEL: length128_eq:
2450 ; X64-AVX1: # %bb.0:
2451 ; X64-AVX1-NEXT: pushq %rax
2452 ; X64-AVX1-NEXT: movl $128, %edx
2453 ; X64-AVX1-NEXT: callq memcmp
2454 ; X64-AVX1-NEXT: testl %eax, %eax
2455 ; X64-AVX1-NEXT: setne %al
2456 ; X64-AVX1-NEXT: popq %rcx
2457 ; X64-AVX1-NEXT: retq
2459 ; X64-AVX2-LABEL: length128_eq:
2460 ; X64-AVX2: # %bb.0:
2461 ; X64-AVX2-NEXT: pushq %rax
2462 ; X64-AVX2-NEXT: movl $128, %edx
2463 ; X64-AVX2-NEXT: callq memcmp
2464 ; X64-AVX2-NEXT: testl %eax, %eax
2465 ; X64-AVX2-NEXT: setne %al
2466 ; X64-AVX2-NEXT: popq %rcx
2467 ; X64-AVX2-NEXT: retq
2469 ; X64-AVX512BW-LABEL: length128_eq:
2470 ; X64-AVX512BW: # %bb.0:
2471 ; X64-AVX512BW-NEXT: vmovdqu64 (%rdi), %zmm0
2472 ; X64-AVX512BW-NEXT: vmovdqu64 64(%rdi), %zmm1
2473 ; X64-AVX512BW-NEXT: vpcmpneqb 64(%rsi), %zmm1, %k0
2474 ; X64-AVX512BW-NEXT: vpcmpneqb (%rsi), %zmm0, %k1
2475 ; X64-AVX512BW-NEXT: kortestq %k0, %k1
2476 ; X64-AVX512BW-NEXT: setne %al
2477 ; X64-AVX512BW-NEXT: vzeroupper
2478 ; X64-AVX512BW-NEXT: retq
2480 ; X64-AVX512F-LABEL: length128_eq:
2481 ; X64-AVX512F: # %bb.0:
2482 ; X64-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2483 ; X64-AVX512F-NEXT: vmovdqu64 64(%rdi), %zmm1
2484 ; X64-AVX512F-NEXT: vpcmpneqd 64(%rsi), %zmm1, %k0
2485 ; X64-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k1
2486 ; X64-AVX512F-NEXT: kortestw %k0, %k1
2487 ; X64-AVX512F-NEXT: setne %al
2488 ; X64-AVX512F-NEXT: vzeroupper
2489 ; X64-AVX512F-NEXT: retq
2491 ; X64-MIC-AVX2-LABEL: length128_eq:
2492 ; X64-MIC-AVX2: # %bb.0:
2493 ; X64-MIC-AVX2-NEXT: pushq %rax
2494 ; X64-MIC-AVX2-NEXT: movl $128, %edx
2495 ; X64-MIC-AVX2-NEXT: callq memcmp
2496 ; X64-MIC-AVX2-NEXT: testl %eax, %eax
2497 ; X64-MIC-AVX2-NEXT: setne %al
2498 ; X64-MIC-AVX2-NEXT: popq %rcx
2499 ; X64-MIC-AVX2-NEXT: retq
2501 ; X64-MIC-AVX512F-LABEL: length128_eq:
2502 ; X64-MIC-AVX512F: # %bb.0:
2503 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2504 ; X64-MIC-AVX512F-NEXT: vmovdqu64 64(%rdi), %zmm1
2505 ; X64-MIC-AVX512F-NEXT: vpcmpneqd 64(%rsi), %zmm1, %k0
2506 ; X64-MIC-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k1
2507 ; X64-MIC-AVX512F-NEXT: kortestw %k0, %k1
2508 ; X64-MIC-AVX512F-NEXT: setne %al
2509 ; X64-MIC-AVX512F-NEXT: vzeroupper
2510 ; X64-MIC-AVX512F-NEXT: retq
2512 %cmp = icmp ne i32 %call, 0
2517 ; X64-LABEL: length128_lt:
2518 ; X64: # %bb.0:
2519 ; X64-NEXT: pushq %rax
2520 ; X64-NEXT: movl $128, %edx
2521 ; X64-NEXT: callq memcmp
2522 ; X64-NEXT: shrl $31, %eax
2523 ; X64-NEXT: # kill: def $al killed $al killed $eax
2524 ; X64-NEXT: popq %rcx
2525 ; X64-NEXT: retq
2527 %cmp = icmp slt i32 %call, 0
2532 ; X64-LABEL: length128_gt:
2533 ; X64: # %bb.0:
2534 ; X64-NEXT: pushq %rax
2535 ; X64-NEXT: movl $128, %edx
2536 ; X64-NEXT: callq memcmp
2537 ; X64-NEXT: testl %eax, %eax
2538 ; X64-NEXT: setg %al
2539 ; X64-NEXT: popq %rcx
2540 ; X64-NEXT: retq
2542 %cmp = icmp sgt i32 %call, 0
2547 ; X64-SSE-LABEL: length128_eq_const:
2548 ; X64-SSE: # %bb.0:
2549 ; X64-SSE-NEXT: pushq %rax
2550 ; X64-SSE-NEXT: movl $.L.str, %esi
2551 ; X64-SSE-NEXT: movl $128, %edx
2552 ; X64-SSE-NEXT: callq memcmp
2553 ; X64-SSE-NEXT: testl %eax, %eax
2554 ; X64-SSE-NEXT: sete %al
2555 ; X64-SSE-NEXT: popq %rcx
2556 ; X64-SSE-NEXT: retq
2558 ; X64-AVX1-LABEL: length128_eq_const:
2559 ; X64-AVX1: # %bb.0:
2560 ; X64-AVX1-NEXT: pushq %rax
2561 ; X64-AVX1-NEXT: movl $.L.str, %esi
2562 ; X64-AVX1-NEXT: movl $128, %edx
2563 ; X64-AVX1-NEXT: callq memcmp
2564 ; X64-AVX1-NEXT: testl %eax, %eax
2565 ; X64-AVX1-NEXT: sete %al
2566 ; X64-AVX1-NEXT: popq %rcx
2567 ; X64-AVX1-NEXT: retq
2569 ; X64-AVX2-LABEL: length128_eq_const:
2570 ; X64-AVX2: # %bb.0:
2571 ; X64-AVX2-NEXT: pushq %rax
2572 ; X64-AVX2-NEXT: movl $.L.str, %esi
2573 ; X64-AVX2-NEXT: movl $128, %edx
2574 ; X64-AVX2-NEXT: callq memcmp
2575 ; X64-AVX2-NEXT: testl %eax, %eax
2576 ; X64-AVX2-NEXT: sete %al
2577 ; X64-AVX2-NEXT: popq %rcx
2578 ; X64-AVX2-NEXT: retq
2580 ; X64-AVX512BW-LABEL: length128_eq_const:
2581 ; X64-AVX512BW: # %bb.0:
2582 ; X64-AVX512BW-NEXT: vmovdqu64 (%rdi), %zmm0
2583 ; X64-AVX512BW-NEXT: vmovdqu64 64(%rdi), %zmm1
2584 ; X64-AVX512BW-NEXT: vpcmpneqb .L.str+64(%rip), %zmm1, %k0
2585 ; X64-AVX512BW-NEXT: vpcmpneqb .L.str(%rip), %zmm0, %k1
2586 ; X64-AVX512BW-NEXT: kortestq %k0, %k1
2587 ; X64-AVX512BW-NEXT: sete %al
2588 ; X64-AVX512BW-NEXT: vzeroupper
2589 ; X64-AVX512BW-NEXT: retq
2591 ; X64-AVX512F-LABEL: length128_eq_const:
2592 ; X64-AVX512F: # %bb.0:
2593 ; X64-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2594 ; X64-AVX512F-NEXT: vmovdqu64 64(%rdi), %zmm1
2595 ; X64-AVX512F-NEXT: vpcmpneqd .L.str+64(%rip), %zmm1, %k0
2596 ; X64-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k1
2597 ; X64-AVX512F-NEXT: kortestw %k0, %k1
2598 ; X64-AVX512F-NEXT: sete %al
2599 ; X64-AVX512F-NEXT: vzeroupper
2600 ; X64-AVX512F-NEXT: retq
2602 ; X64-MIC-AVX2-LABEL: length128_eq_const:
2603 ; X64-MIC-AVX2: # %bb.0:
2604 ; X64-MIC-AVX2-NEXT: pushq %rax
2605 ; X64-MIC-AVX2-NEXT: movl $.L.str, %esi
2606 ; X64-MIC-AVX2-NEXT: movl $128, %edx
2607 ; X64-MIC-AVX2-NEXT: callq memcmp
2608 ; X64-MIC-AVX2-NEXT: testl %eax, %eax
2609 ; X64-MIC-AVX2-NEXT: sete %al
2610 ; X64-MIC-AVX2-NEXT: popq %rcx
2611 ; X64-MIC-AVX2-NEXT: retq
2613 ; X64-MIC-AVX512F-LABEL: length128_eq_const:
2614 ; X64-MIC-AVX512F: # %bb.0:
2615 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2616 ; X64-MIC-AVX512F-NEXT: vmovdqu64 64(%rdi), %zmm1
2617 ; X64-MIC-AVX512F-NEXT: vpcmpneqd .L.str+64(%rip), %zmm1, %k0
2618 ; X64-MIC-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k1
2619 ; X64-MIC-AVX512F-NEXT: kortestw %k0, %k1
2620 ; X64-MIC-AVX512F-NEXT: sete %al
2621 ; X64-MIC-AVX512F-NEXT: vzeroupper
2622 ; X64-MIC-AVX512F-NEXT: retq
2624 %c = icmp eq i32 %m, 0
2629 ; X64-LABEL: length192:
2630 ; X64: # %bb.0:
2631 ; X64-NEXT: movl $192, %edx
2632 ; X64-NEXT: jmp memcmp # TAILCALL
2638 ; X64-LABEL: length192_eq:
2639 ; X64: # %bb.0:
2640 ; X64-NEXT: pushq %rax
2641 ; X64-NEXT: movl $192, %edx
2642 ; X64-NEXT: callq memcmp
2643 ; X64-NEXT: testl %eax, %eax
2644 ; X64-NEXT: setne %al
2645 ; X64-NEXT: popq %rcx
2646 ; X64-NEXT: retq
2648 %cmp = icmp ne i32 %call, 0
2653 ; X64-LABEL: length192_lt:
2654 ; X64: # %bb.0:
2655 ; X64-NEXT: pushq %rax
2656 ; X64-NEXT: movl $192, %edx
2657 ; X64-NEXT: callq memcmp
2658 ; X64-NEXT: shrl $31, %eax
2659 ; X64-NEXT: # kill: def $al killed $al killed $eax
2660 ; X64-NEXT: popq %rcx
2661 ; X64-NEXT: retq
2663 %cmp = icmp slt i32 %call, 0
2668 ; X64-LABEL: length192_gt:
2669 ; X64: # %bb.0:
2670 ; X64-NEXT: pushq %rax
2671 ; X64-NEXT: movl $192, %edx
2672 ; X64-NEXT: callq memcmp
2673 ; X64-NEXT: testl %eax, %eax
2674 ; X64-NEXT: setg %al
2675 ; X64-NEXT: popq %rcx
2676 ; X64-NEXT: retq
2678 %cmp = icmp sgt i32 %call, 0
2683 ; X64-LABEL: length192_eq_const:
2684 ; X64: # %bb.0:
2685 ; X64-NEXT: pushq %rax
2686 ; X64-NEXT: movl $.L.str, %esi
2687 ; X64-NEXT: movl $192, %edx
2688 ; X64-NEXT: callq memcmp
2689 ; X64-NEXT: testl %eax, %eax
2690 ; X64-NEXT: sete %al
2691 ; X64-NEXT: popq %rcx
2692 ; X64-NEXT: retq
2694 %c = icmp eq i32 %m, 0
2699 ; X64-LABEL: length255:
2700 ; X64: # %bb.0:
2701 ; X64-NEXT: movl $255, %edx
2702 ; X64-NEXT: jmp memcmp # TAILCALL
2708 ; X64-LABEL: length255_eq:
2709 ; X64: # %bb.0:
2710 ; X64-NEXT: pushq %rax
2711 ; X64-NEXT: movl $255, %edx
2712 ; X64-NEXT: callq memcmp
2713 ; X64-NEXT: testl %eax, %eax
2714 ; X64-NEXT: setne %al
2715 ; X64-NEXT: popq %rcx
2716 ; X64-NEXT: retq
2718 %cmp = icmp ne i32 %call, 0
2723 ; X64-LABEL: length255_lt:
2724 ; X64: # %bb.0:
2725 ; X64-NEXT: pushq %rax
2726 ; X64-NEXT: movl $255, %edx
2727 ; X64-NEXT: callq memcmp
2728 ; X64-NEXT: shrl $31, %eax
2729 ; X64-NEXT: # kill: def $al killed $al killed $eax
2730 ; X64-NEXT: popq %rcx
2731 ; X64-NEXT: retq
2733 %cmp = icmp slt i32 %call, 0
2738 ; X64-LABEL: length255_gt:
2739 ; X64: # %bb.0:
2740 ; X64-NEXT: pushq %rax
2741 ; X64-NEXT: movl $255, %edx
2742 ; X64-NEXT: callq memcmp
2743 ; X64-NEXT: testl %eax, %eax
2744 ; X64-NEXT: setg %al
2745 ; X64-NEXT: popq %rcx
2746 ; X64-NEXT: retq
2748 %cmp = icmp sgt i32 %call, 0
2753 ; X64-LABEL: length255_eq_const:
2754 ; X64: # %bb.0:
2755 ; X64-NEXT: pushq %rax
2756 ; X64-NEXT: movl $.L.str, %esi
2757 ; X64-NEXT: movl $255, %edx
2758 ; X64-NEXT: callq memcmp
2759 ; X64-NEXT: testl %eax, %eax
2760 ; X64-NEXT: sete %al
2761 ; X64-NEXT: popq %rcx
2762 ; X64-NEXT: retq
2764 %c = icmp eq i32 %m, 0
2769 ; X64-LABEL: length256:
2770 ; X64: # %bb.0:
2771 ; X64-NEXT: movl $256, %edx # imm = 0x100
2772 ; X64-NEXT: jmp memcmp # TAILCALL
2778 ; X64-LABEL: length256_eq:
2779 ; X64: # %bb.0:
2780 ; X64-NEXT: pushq %rax
2781 ; X64-NEXT: movl $256, %edx # imm = 0x100
2782 ; X64-NEXT: callq memcmp
2783 ; X64-NEXT: testl %eax, %eax
2784 ; X64-NEXT: setne %al
2785 ; X64-NEXT: popq %rcx
2786 ; X64-NEXT: retq
2788 %cmp = icmp ne i32 %call, 0
2793 ; X64-LABEL: length256_lt:
2794 ; X64: # %bb.0:
2795 ; X64-NEXT: pushq %rax
2796 ; X64-NEXT: movl $256, %edx # imm = 0x100
2797 ; X64-NEXT: callq memcmp
2798 ; X64-NEXT: shrl $31, %eax
2799 ; X64-NEXT: # kill: def $al killed $al killed $eax
2800 ; X64-NEXT: popq %rcx
2801 ; X64-NEXT: retq
2803 %cmp = icmp slt i32 %call, 0
2808 ; X64-LABEL: length256_gt:
2809 ; X64: # %bb.0:
2810 ; X64-NEXT: pushq %rax
2811 ; X64-NEXT: movl $256, %edx # imm = 0x100
2812 ; X64-NEXT: callq memcmp
2813 ; X64-NEXT: testl %eax, %eax
2814 ; X64-NEXT: setg %al
2815 ; X64-NEXT: popq %rcx
2816 ; X64-NEXT: retq
2818 %cmp = icmp sgt i32 %call, 0
2823 ; X64-LABEL: length256_eq_const:
2824 ; X64: # %bb.0:
2825 ; X64-NEXT: pushq %rax
2826 ; X64-NEXT: movl $.L.str, %esi
2827 ; X64-NEXT: movl $256, %edx # imm = 0x100
2828 ; X64-NEXT: callq memcmp
2829 ; X64-NEXT: testl %eax, %eax
2830 ; X64-NEXT: sete %al
2831 ; X64-NEXT: popq %rcx
2832 ; X64-NEXT: retq
2834 %c = icmp eq i32 %m, 0
2839 ; X64-LABEL: length384:
2840 ; X64: # %bb.0:
2841 ; X64-NEXT: movl $384, %edx # imm = 0x180
2842 ; X64-NEXT: jmp memcmp # TAILCALL
2848 ; X64-LABEL: length384_eq:
2849 ; X64: # %bb.0:
2850 ; X64-NEXT: pushq %rax
2851 ; X64-NEXT: movl $384, %edx # imm = 0x180
2852 ; X64-NEXT: callq memcmp
2853 ; X64-NEXT: testl %eax, %eax
2854 ; X64-NEXT: setne %al
2855 ; X64-NEXT: popq %rcx
2856 ; X64-NEXT: retq
2858 %cmp = icmp ne i32 %call, 0
2863 ; X64-LABEL: length384_lt:
2864 ; X64: # %bb.0:
2865 ; X64-NEXT: pushq %rax
2866 ; X64-NEXT: movl $384, %edx # imm = 0x180
2867 ; X64-NEXT: callq memcmp
2868 ; X64-NEXT: shrl $31, %eax
2869 ; X64-NEXT: # kill: def $al killed $al killed $eax
2870 ; X64-NEXT: popq %rcx
2871 ; X64-NEXT: retq
2873 %cmp = icmp slt i32 %call, 0
2878 ; X64-LABEL: length384_gt:
2879 ; X64: # %bb.0:
2880 ; X64-NEXT: pushq %rax
2881 ; X64-NEXT: movl $384, %edx # imm = 0x180
2882 ; X64-NEXT: callq memcmp
2883 ; X64-NEXT: testl %eax, %eax
2884 ; X64-NEXT: setg %al
2885 ; X64-NEXT: popq %rcx
2886 ; X64-NEXT: retq
2888 %cmp = icmp sgt i32 %call, 0
2893 ; X64-LABEL: length384_eq_const:
2894 ; X64: # %bb.0:
2895 ; X64-NEXT: pushq %rax
2896 ; X64-NEXT: movl $.L.str, %esi
2897 ; X64-NEXT: movl $384, %edx # imm = 0x180
2898 ; X64-NEXT: callq memcmp
2899 ; X64-NEXT: testl %eax, %eax
2900 ; X64-NEXT: sete %al
2901 ; X64-NEXT: popq %rcx
2902 ; X64-NEXT: retq
2904 %c = icmp eq i32 %m, 0
2909 ; X64-LABEL: length511:
2910 ; X64: # %bb.0:
2911 ; X64-NEXT: movl $511, %edx # imm = 0x1FF
2912 ; X64-NEXT: jmp memcmp # TAILCALL
2918 ; X64-LABEL: length511_eq:
2919 ; X64: # %bb.0:
2920 ; X64-NEXT: pushq %rax
2921 ; X64-NEXT: movl $511, %edx # imm = 0x1FF
2922 ; X64-NEXT: callq memcmp
2923 ; X64-NEXT: testl %eax, %eax
2924 ; X64-NEXT: setne %al
2925 ; X64-NEXT: popq %rcx
2926 ; X64-NEXT: retq
2928 %cmp = icmp ne i32 %call, 0
2933 ; X64-LABEL: length511_lt:
2934 ; X64: # %bb.0:
2935 ; X64-NEXT: pushq %rax
2936 ; X64-NEXT: movl $511, %edx # imm = 0x1FF
2937 ; X64-NEXT: callq memcmp
2938 ; X64-NEXT: shrl $31, %eax
2939 ; X64-NEXT: # kill: def $al killed $al killed $eax
2940 ; X64-NEXT: popq %rcx
2941 ; X64-NEXT: retq
2943 %cmp = icmp slt i32 %call, 0
2948 ; X64-LABEL: length511_gt:
2949 ; X64: # %bb.0:
2950 ; X64-NEXT: pushq %rax
2951 ; X64-NEXT: movl $511, %edx # imm = 0x1FF
2952 ; X64-NEXT: callq memcmp
2953 ; X64-NEXT: testl %eax, %eax
2954 ; X64-NEXT: setg %al
2955 ; X64-NEXT: popq %rcx
2956 ; X64-NEXT: retq
2958 %cmp = icmp sgt i32 %call, 0
2963 ; X64-LABEL: length511_eq_const:
2964 ; X64: # %bb.0:
2965 ; X64-NEXT: pushq %rax
2966 ; X64-NEXT: movl $.L.str, %esi
2967 ; X64-NEXT: movl $511, %edx # imm = 0x1FF
2968 ; X64-NEXT: callq memcmp
2969 ; X64-NEXT: testl %eax, %eax
2970 ; X64-NEXT: sete %al
2971 ; X64-NEXT: popq %rcx
2972 ; X64-NEXT: retq
2974 %c = icmp eq i32 %m, 0
2979 ; X64-LABEL: length512:
2980 ; X64: # %bb.0:
2981 ; X64-NEXT: movl $512, %edx # imm = 0x200
2982 ; X64-NEXT: jmp memcmp # TAILCALL
2988 ; X64-LABEL: length512_eq:
2989 ; X64: # %bb.0:
2990 ; X64-NEXT: pushq %rax
2991 ; X64-NEXT: movl $512, %edx # imm = 0x200
2992 ; X64-NEXT: callq memcmp
2993 ; X64-NEXT: testl %eax, %eax
2994 ; X64-NEXT: setne %al
2995 ; X64-NEXT: popq %rcx
2996 ; X64-NEXT: retq
2998 %cmp = icmp ne i32 %call, 0
3003 ; X64-LABEL: length512_lt:
3004 ; X64: # %bb.0:
3005 ; X64-NEXT: pushq %rax
3006 ; X64-NEXT: movl $512, %edx # imm = 0x200
3007 ; X64-NEXT: callq memcmp
3008 ; X64-NEXT: shrl $31, %eax
3009 ; X64-NEXT: # kill: def $al killed $al killed $eax
3010 ; X64-NEXT: popq %rcx
3011 ; X64-NEXT: retq
3013 %cmp = icmp slt i32 %call, 0
3018 ; X64-LABEL: length512_gt:
3019 ; X64: # %bb.0:
3020 ; X64-NEXT: pushq %rax
3021 ; X64-NEXT: movl $512, %edx # imm = 0x200
3022 ; X64-NEXT: callq memcmp
3023 ; X64-NEXT: testl %eax, %eax
3024 ; X64-NEXT: setg %al
3025 ; X64-NEXT: popq %rcx
3026 ; X64-NEXT: retq
3028 %cmp = icmp sgt i32 %call, 0
3033 ; X64-LABEL: length512_eq_const:
3034 ; X64: # %bb.0:
3035 ; X64-NEXT: pushq %rax
3036 ; X64-NEXT: movl $.L.str, %esi
3037 ; X64-NEXT: movl $512, %edx # imm = 0x200
3038 ; X64-NEXT: callq memcmp
3039 ; X64-NEXT: testl %eax, %eax
3040 ; X64-NEXT: sete %al
3041 ; X64-NEXT: popq %rcx
3042 ; X64-NEXT: retq
3044 %c = icmp eq i32 %m, 0
3050 ; X64-LABEL: huge_length:
3051 ; X64: # %bb.0:
3052 ; X64-NEXT: movabsq $9223372036854775807, %rdx # imm = 0x7FFFFFFFFFFFFFFF
3053 ; X64-NEXT: jmp memcmp # TAILCALL
3059 ; X64-LABEL: huge_length_eq:
3060 ; X64: # %bb.0:
3061 ; X64-NEXT: pushq %rax
3062 ; X64-NEXT: movabsq $9223372036854775807, %rdx # imm = 0x7FFFFFFFFFFFFFFF
3063 ; X64-NEXT: callq memcmp
3064 ; X64-NEXT: testl %eax, %eax
3065 ; X64-NEXT: sete %al
3066 ; X64-NEXT: popq %rcx
3067 ; X64-NEXT: retq
3069 %c = icmp eq i32 %m, 0
3075 ; X64-LABEL: nonconst_length:
3076 ; X64: # %bb.0:
3077 ; X64-NEXT: jmp memcmp # TAILCALL
3083 ; X64-LABEL: nonconst_length_eq:
3084 ; X64: # %bb.0:
3085 ; X64-NEXT: pushq %rax
3086 ; X64-NEXT: callq memcmp
3087 ; X64-NEXT: testl %eax, %eax
3088 ; X64-NEXT: sete %al
3089 ; X64-NEXT: popq %rcx
3090 ; X64-NEXT: retq
3092 %c = icmp eq i32 %m, 0