Lines Matching +full:0 +full:x64

2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=X64,X64-SSE2
3 … %s -mtriple=x86_64-unknown-unknown -mattr=avx | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX1
4 …%s -mtriple=x86_64-unknown-unknown -mattr=avx2 | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX2
14 ; X64-LABEL: length2:
15 ; X64: # %bb.0:
16 ; X64-NEXT: pushq $2
17 ; X64-NEXT: popq %rdx
18 ; X64-NEXT: jmp memcmp # TAILCALL
24 ; X64-LABEL: length2_eq:
25 ; X64: # %bb.0:
26 ; X64-NEXT: movzwl (%rdi), %eax
27 ; X64-NEXT: cmpw (%rsi), %ax
28 ; X64-NEXT: sete %al
29 ; X64-NEXT: retq
31 %c = icmp eq i32 %m, 0
36 ; X64-LABEL: length2_eq_const:
37 ; X64: # %bb.0:
38 ; X64-NEXT: cmpw $12849, (%rdi) # imm = 0x3231
39 ; X64-NEXT: setne %al
40 ; X64-NEXT: retq
41 …%m = tail call i32 @memcmp(ptr %X, ptr getelementptr inbounds ([65 x i8], ptr @.str, i32 0, i32 1)…
42 %c = icmp ne i32 %m, 0
47 ; X64-LABEL: length2_eq_nobuiltin_attr:
48 ; X64: # %bb.0:
49 ; X64-NEXT: pushq %rax
50 ; X64-NEXT: pushq $2
51 ; X64-NEXT: popq %rdx
52 ; X64-NEXT: callq memcmp
53 ; X64-NEXT: testl %eax, %eax
54 ; X64-NEXT: sete %al
55 ; X64-NEXT: popq %rcx
56 ; X64-NEXT: retq
58 %c = icmp eq i32 %m, 0
63 ; X64-LABEL: length3:
64 ; X64: # %bb.0:
65 ; X64-NEXT: pushq $3
66 ; X64-NEXT: popq %rdx
67 ; X64-NEXT: jmp memcmp # TAILCALL
73 ; X64-LABEL: length3_eq:
74 ; X64: # %bb.0:
75 ; X64-NEXT: pushq %rax
76 ; X64-NEXT: pushq $3
77 ; X64-NEXT: popq %rdx
78 ; X64-NEXT: callq memcmp
79 ; X64-NEXT: testl %eax, %eax
80 ; X64-NEXT: setne %al
81 ; X64-NEXT: popq %rcx
82 ; X64-NEXT: retq
84 %c = icmp ne i32 %m, 0
89 ; X64-LABEL: length4:
90 ; X64: # %bb.0:
91 ; X64-NEXT: pushq $4
92 ; X64-NEXT: popq %rdx
93 ; X64-NEXT: jmp memcmp # TAILCALL
99 ; X64-LABEL: length4_eq:
100 ; X64: # %bb.0:
101 ; X64-NEXT: movl (%rdi), %eax
102 ; X64-NEXT: cmpl (%rsi), %eax
103 ; X64-NEXT: setne %al
104 ; X64-NEXT: retq
106 %c = icmp ne i32 %m, 0
111 ; X64-LABEL: length4_eq_const:
112 ; X64: # %bb.0:
113 ; X64-NEXT: cmpl $875770417, (%rdi) # imm = 0x34333231
114 ; X64-NEXT: sete %al
115 ; X64-NEXT: retq
116 …%m = tail call i32 @memcmp(ptr %X, ptr getelementptr inbounds ([65 x i8], ptr @.str, i32 0, i32 1)…
117 %c = icmp eq i32 %m, 0
122 ; X64-LABEL: length5:
123 ; X64: # %bb.0:
124 ; X64-NEXT: pushq $5
125 ; X64-NEXT: popq %rdx
126 ; X64-NEXT: jmp memcmp # TAILCALL
132 ; X64-LABEL: length5_eq:
133 ; X64: # %bb.0:
134 ; X64-NEXT: pushq %rax
135 ; X64-NEXT: pushq $5
136 ; X64-NEXT: popq %rdx
137 ; X64-NEXT: callq memcmp
138 ; X64-NEXT: testl %eax, %eax
139 ; X64-NEXT: setne %al
140 ; X64-NEXT: popq %rcx
141 ; X64-NEXT: retq
143 %c = icmp ne i32 %m, 0
148 ; X64-LABEL: length8:
149 ; X64: # %bb.0:
150 ; X64-NEXT: pushq $8
151 ; X64-NEXT: popq %rdx
152 ; X64-NEXT: jmp memcmp # TAILCALL
158 ; X64-LABEL: length8_eq:
159 ; X64: # %bb.0:
160 ; X64-NEXT: movq (%rdi), %rax
161 ; X64-NEXT: cmpq (%rsi), %rax
162 ; X64-NEXT: sete %al
163 ; X64-NEXT: retq
165 %c = icmp eq i32 %m, 0
170 ; X64-LABEL: length8_eq_const:
171 ; X64: # %bb.0:
172 ; X64-NEXT: movabsq $3978425819141910832, %rax # imm = 0x3736353433323130
173 ; X64-NEXT: cmpq %rax, (%rdi)
174 ; X64-NEXT: setne %al
175 ; X64-NEXT: retq
177 %c = icmp ne i32 %m, 0
182 ; X64-LABEL: length12_eq:
183 ; X64: # %bb.0:
184 ; X64-NEXT: pushq %rax
185 ; X64-NEXT: pushq $12
186 ; X64-NEXT: popq %rdx
187 ; X64-NEXT: callq memcmp
188 ; X64-NEXT: testl %eax, %eax
189 ; X64-NEXT: setne %al
190 ; X64-NEXT: popq %rcx
191 ; X64-NEXT: retq
193 %c = icmp ne i32 %m, 0
198 ; X64-LABEL: length12:
199 ; X64: # %bb.0:
200 ; X64-NEXT: pushq $12
201 ; X64-NEXT: popq %rdx
202 ; X64-NEXT: jmp memcmp # TAILCALL
211 ; X64-LABEL: length16:
212 ; X64: # %bb.0:
213 ; X64-NEXT: pushq $16
214 ; X64-NEXT: popq %rdx
215 ; X64-NEXT: jmp memcmp # TAILCALL
221 ; X64-SSE2-LABEL: length16_eq:
222 ; X64-SSE2: # %bb.0:
223 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm0
224 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm1
225 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm1
226 ; X64-SSE2-NEXT: pmovmskb %xmm1, %eax
227 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
228 ; X64-SSE2-NEXT: setne %al
229 ; X64-SSE2-NEXT: retq
231 ; X64-AVX-LABEL: length16_eq:
232 ; X64-AVX: # %bb.0:
233 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
234 ; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
235 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
236 ; X64-AVX-NEXT: setne %al
237 ; X64-AVX-NEXT: retq
239 %cmp = icmp ne i32 %call, 0
244 ; X64-SSE2-LABEL: length16_eq_const:
245 ; X64-SSE2: # %bb.0:
246 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
247 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
248 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
249 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
250 ; X64-SSE2-NEXT: sete %al
251 ; X64-SSE2-NEXT: retq
253 ; X64-AVX-LABEL: length16_eq_const:
254 ; X64-AVX: # %bb.0:
255 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
256 ; X64-AVX-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
257 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
258 ; X64-AVX-NEXT: sete %al
259 ; X64-AVX-NEXT: retq
261 %c = icmp eq i32 %m, 0
268 ; X64-LABEL: length24:
269 ; X64: # %bb.0:
270 ; X64-NEXT: pushq $24
271 ; X64-NEXT: popq %rdx
272 ; X64-NEXT: jmp memcmp # TAILCALL
278 ; X64-LABEL: length24_eq:
279 ; X64: # %bb.0:
280 ; X64-NEXT: pushq %rax
281 ; X64-NEXT: pushq $24
282 ; X64-NEXT: popq %rdx
283 ; X64-NEXT: callq memcmp
284 ; X64-NEXT: testl %eax, %eax
285 ; X64-NEXT: sete %al
286 ; X64-NEXT: popq %rcx
287 ; X64-NEXT: retq
289 %cmp = icmp eq i32 %call, 0
294 ; X64-LABEL: length24_eq_const:
295 ; X64: # %bb.0:
296 ; X64-NEXT: pushq %rax
297 ; X64-NEXT: pushq $24
298 ; X64-NEXT: popq %rdx
299 ; X64-NEXT: movl $.L.str, %esi
300 ; X64-NEXT: callq memcmp
301 ; X64-NEXT: testl %eax, %eax
302 ; X64-NEXT: setne %al
303 ; X64-NEXT: popq %rcx
304 ; X64-NEXT: retq
306 %c = icmp ne i32 %m, 0
311 ; X64-LABEL: length32:
312 ; X64: # %bb.0:
313 ; X64-NEXT: pushq $32
314 ; X64-NEXT: popq %rdx
315 ; X64-NEXT: jmp memcmp # TAILCALL
323 ; X64-SSE2-LABEL: length32_eq:
324 ; X64-SSE2: # %bb.0:
325 ; X64-SSE2-NEXT: pushq %rax
326 ; X64-SSE2-NEXT: pushq $32
327 ; X64-SSE2-NEXT: popq %rdx
328 ; X64-SSE2-NEXT: callq memcmp
329 ; X64-SSE2-NEXT: testl %eax, %eax
330 ; X64-SSE2-NEXT: sete %al
331 ; X64-SSE2-NEXT: popq %rcx
332 ; X64-SSE2-NEXT: retq
334 ; X64-AVX1-LABEL: length32_eq:
335 ; X64-AVX1: # %bb.0:
336 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
337 ; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
338 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
339 ; X64-AVX1-NEXT: sete %al
340 ; X64-AVX1-NEXT: vzeroupper
341 ; X64-AVX1-NEXT: retq
343 ; X64-AVX2-LABEL: length32_eq:
344 ; X64-AVX2: # %bb.0:
345 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
346 ; X64-AVX2-NEXT: vpxor (%rsi), %ymm0, %ymm0
347 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
348 ; X64-AVX2-NEXT: sete %al
349 ; X64-AVX2-NEXT: vzeroupper
350 ; X64-AVX2-NEXT: retq
352 %cmp = icmp eq i32 %call, 0
357 ; X64-SSE2-LABEL: length32_eq_const:
358 ; X64-SSE2: # %bb.0:
359 ; X64-SSE2-NEXT: pushq %rax
360 ; X64-SSE2-NEXT: pushq $32
361 ; X64-SSE2-NEXT: popq %rdx
362 ; X64-SSE2-NEXT: movl $.L.str, %esi
363 ; X64-SSE2-NEXT: callq memcmp
364 ; X64-SSE2-NEXT: testl %eax, %eax
365 ; X64-SSE2-NEXT: setne %al
366 ; X64-SSE2-NEXT: popq %rcx
367 ; X64-SSE2-NEXT: retq
369 ; X64-AVX1-LABEL: length32_eq_const:
370 ; X64-AVX1: # %bb.0:
371 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
372 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
373 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
374 ; X64-AVX1-NEXT: setne %al
375 ; X64-AVX1-NEXT: vzeroupper
376 ; X64-AVX1-NEXT: retq
378 ; X64-AVX2-LABEL: length32_eq_const:
379 ; X64-AVX2: # %bb.0:
380 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
381 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
382 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
383 ; X64-AVX2-NEXT: setne %al
384 ; X64-AVX2-NEXT: vzeroupper
385 ; X64-AVX2-NEXT: retq
387 %c = icmp ne i32 %m, 0
392 ; X64-LABEL: length64:
393 ; X64: # %bb.0:
394 ; X64-NEXT: pushq $64
395 ; X64-NEXT: popq %rdx
396 ; X64-NEXT: jmp memcmp # TAILCALL
402 ; X64-LABEL: length64_eq:
403 ; X64: # %bb.0:
404 ; X64-NEXT: pushq %rax
405 ; X64-NEXT: pushq $64
406 ; X64-NEXT: popq %rdx
407 ; X64-NEXT: callq memcmp
408 ; X64-NEXT: testl %eax, %eax
409 ; X64-NEXT: setne %al
410 ; X64-NEXT: popq %rcx
411 ; X64-NEXT: retq
413 %cmp = icmp ne i32 %call, 0
418 ; X64-LABEL: length64_eq_const:
419 ; X64: # %bb.0:
420 ; X64-NEXT: pushq %rax
421 ; X64-NEXT: pushq $64
422 ; X64-NEXT: popq %rdx
423 ; X64-NEXT: movl $.L.str, %esi
424 ; X64-NEXT: callq memcmp
425 ; X64-NEXT: testl %eax, %eax
426 ; X64-NEXT: sete %al
427 ; X64-NEXT: popq %rcx
428 ; X64-NEXT: retq
430 %c = icmp eq i32 %m, 0