[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / X86 / memset-zero.ll
blobfb28742e688c986f365eeba2b988cd0f5e88104c
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-unknown-linux | FileCheck %s --check-prefix=X86
3 ; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=core2 | FileCheck %s --check-prefix=CORE2
4 ; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=nehalem | FileCheck %s --check-prefix=NEHALEM
5 ; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=sandybridge | FileCheck %s --check-prefix=SANDYBRIDGE
6 ; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=skylake | FileCheck %s --check-prefix=SKYLAKE
9 declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1) nounwind
11 define void @memset_0(i8* %a) nounwind  {
12 ; X86-LABEL: memset_0:
13 ; X86:       # %bb.0: # %entry
14 ; X86-NEXT:    retl
16 ; CORE2-LABEL: memset_0:
17 ; CORE2:       # %bb.0: # %entry
18 ; CORE2-NEXT:    retq
20 ; NEHALEM-LABEL: memset_0:
21 ; NEHALEM:       # %bb.0: # %entry
22 ; NEHALEM-NEXT:    retq
24 ; SANDYBRIDGE-LABEL: memset_0:
25 ; SANDYBRIDGE:       # %bb.0: # %entry
26 ; SANDYBRIDGE-NEXT:    retq
28 ; SKYLAKE-LABEL: memset_0:
29 ; SKYLAKE:       # %bb.0: # %entry
30 ; SKYLAKE-NEXT:    retq
31 entry:
32         call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 0, i1 false)
33         ret void
36 define void @memset_4(i8* %a) nounwind  {
37 ; X86-LABEL: memset_4:
38 ; X86:       # %bb.0: # %entry
39 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
40 ; X86-NEXT:    movl $0, (%eax)
41 ; X86-NEXT:    retl
43 ; CORE2-LABEL: memset_4:
44 ; CORE2:       # %bb.0: # %entry
45 ; CORE2-NEXT:    movl $0, (%rdi)
46 ; CORE2-NEXT:    retq
48 ; NEHALEM-LABEL: memset_4:
49 ; NEHALEM:       # %bb.0: # %entry
50 ; NEHALEM-NEXT:    movl $0, (%rdi)
51 ; NEHALEM-NEXT:    retq
53 ; SANDYBRIDGE-LABEL: memset_4:
54 ; SANDYBRIDGE:       # %bb.0: # %entry
55 ; SANDYBRIDGE-NEXT:    movl $0, (%rdi)
56 ; SANDYBRIDGE-NEXT:    retq
58 ; SKYLAKE-LABEL: memset_4:
59 ; SKYLAKE:       # %bb.0: # %entry
60 ; SKYLAKE-NEXT:    movl $0, (%rdi)
61 ; SKYLAKE-NEXT:    retq
62 entry:
63         call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 4, i1 false)
64         ret void
67 define void @memset_5(i8* %a) nounwind  {
68 ; X86-LABEL: memset_5:
69 ; X86:       # %bb.0: # %entry
70 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
71 ; X86-NEXT:    movb $0, 4(%eax)
72 ; X86-NEXT:    movl $0, (%eax)
73 ; X86-NEXT:    retl
75 ; CORE2-LABEL: memset_5:
76 ; CORE2:       # %bb.0: # %entry
77 ; CORE2-NEXT:    movb $0, 4(%rdi)
78 ; CORE2-NEXT:    movl $0, (%rdi)
79 ; CORE2-NEXT:    retq
81 ; NEHALEM-LABEL: memset_5:
82 ; NEHALEM:       # %bb.0: # %entry
83 ; NEHALEM-NEXT:    movb $0, 4(%rdi)
84 ; NEHALEM-NEXT:    movl $0, (%rdi)
85 ; NEHALEM-NEXT:    retq
87 ; SANDYBRIDGE-LABEL: memset_5:
88 ; SANDYBRIDGE:       # %bb.0: # %entry
89 ; SANDYBRIDGE-NEXT:    movb $0, 4(%rdi)
90 ; SANDYBRIDGE-NEXT:    movl $0, (%rdi)
91 ; SANDYBRIDGE-NEXT:    retq
93 ; SKYLAKE-LABEL: memset_5:
94 ; SKYLAKE:       # %bb.0: # %entry
95 ; SKYLAKE-NEXT:    movb $0, 4(%rdi)
96 ; SKYLAKE-NEXT:    movl $0, (%rdi)
97 ; SKYLAKE-NEXT:    retq
98 entry:
99         call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 5, i1 false)
100         ret void
103 define void @memset_7(i8* %a) nounwind  {
104 ; X86-LABEL: memset_7:
105 ; X86:       # %bb.0: # %entry
106 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
107 ; X86-NEXT:    movl $0, 3(%eax)
108 ; X86-NEXT:    movl $0, (%eax)
109 ; X86-NEXT:    retl
111 ; CORE2-LABEL: memset_7:
112 ; CORE2:       # %bb.0: # %entry
113 ; CORE2-NEXT:    movl $0, 3(%rdi)
114 ; CORE2-NEXT:    movl $0, (%rdi)
115 ; CORE2-NEXT:    retq
117 ; NEHALEM-LABEL: memset_7:
118 ; NEHALEM:       # %bb.0: # %entry
119 ; NEHALEM-NEXT:    movl $0, 3(%rdi)
120 ; NEHALEM-NEXT:    movl $0, (%rdi)
121 ; NEHALEM-NEXT:    retq
123 ; SANDYBRIDGE-LABEL: memset_7:
124 ; SANDYBRIDGE:       # %bb.0: # %entry
125 ; SANDYBRIDGE-NEXT:    movl $0, 3(%rdi)
126 ; SANDYBRIDGE-NEXT:    movl $0, (%rdi)
127 ; SANDYBRIDGE-NEXT:    retq
129 ; SKYLAKE-LABEL: memset_7:
130 ; SKYLAKE:       # %bb.0: # %entry
131 ; SKYLAKE-NEXT:    movl $0, 3(%rdi)
132 ; SKYLAKE-NEXT:    movl $0, (%rdi)
133 ; SKYLAKE-NEXT:    retq
134 entry:
135         call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 7, i1 false)
136         ret void
139 define void @memset_8(i8* %a) nounwind  {
140 ; X86-LABEL: memset_8:
141 ; X86:       # %bb.0: # %entry
142 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
143 ; X86-NEXT:    movl $0, 4(%eax)
144 ; X86-NEXT:    movl $0, (%eax)
145 ; X86-NEXT:    retl
147 ; CORE2-LABEL: memset_8:
148 ; CORE2:       # %bb.0: # %entry
149 ; CORE2-NEXT:    movq $0, (%rdi)
150 ; CORE2-NEXT:    retq
152 ; NEHALEM-LABEL: memset_8:
153 ; NEHALEM:       # %bb.0: # %entry
154 ; NEHALEM-NEXT:    movq $0, (%rdi)
155 ; NEHALEM-NEXT:    retq
157 ; SANDYBRIDGE-LABEL: memset_8:
158 ; SANDYBRIDGE:       # %bb.0: # %entry
159 ; SANDYBRIDGE-NEXT:    movq $0, (%rdi)
160 ; SANDYBRIDGE-NEXT:    retq
162 ; SKYLAKE-LABEL: memset_8:
163 ; SKYLAKE:       # %bb.0: # %entry
164 ; SKYLAKE-NEXT:    movq $0, (%rdi)
165 ; SKYLAKE-NEXT:    retq
166 entry:
167         call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 8, i1 false)
168         ret void
171 define void @memset_11(i8* %a) nounwind  {
172 ; X86-LABEL: memset_11:
173 ; X86:       # %bb.0: # %entry
174 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
175 ; X86-NEXT:    movl $0, 7(%eax)
176 ; X86-NEXT:    movl $0, 4(%eax)
177 ; X86-NEXT:    movl $0, (%eax)
178 ; X86-NEXT:    retl
180 ; CORE2-LABEL: memset_11:
181 ; CORE2:       # %bb.0: # %entry
182 ; CORE2-NEXT:    movl $0, 7(%rdi)
183 ; CORE2-NEXT:    movq $0, (%rdi)
184 ; CORE2-NEXT:    retq
186 ; NEHALEM-LABEL: memset_11:
187 ; NEHALEM:       # %bb.0: # %entry
188 ; NEHALEM-NEXT:    movl $0, 7(%rdi)
189 ; NEHALEM-NEXT:    movq $0, (%rdi)
190 ; NEHALEM-NEXT:    retq
192 ; SANDYBRIDGE-LABEL: memset_11:
193 ; SANDYBRIDGE:       # %bb.0: # %entry
194 ; SANDYBRIDGE-NEXT:    movl $0, 7(%rdi)
195 ; SANDYBRIDGE-NEXT:    movq $0, (%rdi)
196 ; SANDYBRIDGE-NEXT:    retq
198 ; SKYLAKE-LABEL: memset_11:
199 ; SKYLAKE:       # %bb.0: # %entry
200 ; SKYLAKE-NEXT:    movl $0, 7(%rdi)
201 ; SKYLAKE-NEXT:    movq $0, (%rdi)
202 ; SKYLAKE-NEXT:    retq
203 entry:
204         call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 11, i1 false)
205         ret void
208 define void @memset_13(i8* %a) nounwind  {
209 ; X86-LABEL: memset_13:
210 ; X86:       # %bb.0: # %entry
211 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
212 ; X86-NEXT:    movb $0, 12(%eax)
213 ; X86-NEXT:    movl $0, 8(%eax)
214 ; X86-NEXT:    movl $0, 4(%eax)
215 ; X86-NEXT:    movl $0, (%eax)
216 ; X86-NEXT:    retl
218 ; CORE2-LABEL: memset_13:
219 ; CORE2:       # %bb.0: # %entry
220 ; CORE2-NEXT:    movq $0, 5(%rdi)
221 ; CORE2-NEXT:    movq $0, (%rdi)
222 ; CORE2-NEXT:    retq
224 ; NEHALEM-LABEL: memset_13:
225 ; NEHALEM:       # %bb.0: # %entry
226 ; NEHALEM-NEXT:    movq $0, 5(%rdi)
227 ; NEHALEM-NEXT:    movq $0, (%rdi)
228 ; NEHALEM-NEXT:    retq
230 ; SANDYBRIDGE-LABEL: memset_13:
231 ; SANDYBRIDGE:       # %bb.0: # %entry
232 ; SANDYBRIDGE-NEXT:    movq $0, 5(%rdi)
233 ; SANDYBRIDGE-NEXT:    movq $0, (%rdi)
234 ; SANDYBRIDGE-NEXT:    retq
236 ; SKYLAKE-LABEL: memset_13:
237 ; SKYLAKE:       # %bb.0: # %entry
238 ; SKYLAKE-NEXT:    movq $0, 5(%rdi)
239 ; SKYLAKE-NEXT:    movq $0, (%rdi)
240 ; SKYLAKE-NEXT:    retq
241 entry:
242         call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 13, i1 false)
243         ret void
246 define void @memset_15(i8* %a) nounwind  {
247 ; X86-LABEL: memset_15:
248 ; X86:       # %bb.0: # %entry
249 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
250 ; X86-NEXT:    movl $0, 11(%eax)
251 ; X86-NEXT:    movl $0, 8(%eax)
252 ; X86-NEXT:    movl $0, 4(%eax)
253 ; X86-NEXT:    movl $0, (%eax)
254 ; X86-NEXT:    retl
256 ; CORE2-LABEL: memset_15:
257 ; CORE2:       # %bb.0: # %entry
258 ; CORE2-NEXT:    movq $0, 7(%rdi)
259 ; CORE2-NEXT:    movq $0, (%rdi)
260 ; CORE2-NEXT:    retq
262 ; NEHALEM-LABEL: memset_15:
263 ; NEHALEM:       # %bb.0: # %entry
264 ; NEHALEM-NEXT:    movq $0, 7(%rdi)
265 ; NEHALEM-NEXT:    movq $0, (%rdi)
266 ; NEHALEM-NEXT:    retq
268 ; SANDYBRIDGE-LABEL: memset_15:
269 ; SANDYBRIDGE:       # %bb.0: # %entry
270 ; SANDYBRIDGE-NEXT:    movq $0, 7(%rdi)
271 ; SANDYBRIDGE-NEXT:    movq $0, (%rdi)
272 ; SANDYBRIDGE-NEXT:    retq
274 ; SKYLAKE-LABEL: memset_15:
275 ; SKYLAKE:       # %bb.0: # %entry
276 ; SKYLAKE-NEXT:    movq $0, 7(%rdi)
277 ; SKYLAKE-NEXT:    movq $0, (%rdi)
278 ; SKYLAKE-NEXT:    retq
279 entry:
280         call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 15, i1 false)
281         ret void
284 define void @memset_16(i8* %a) nounwind  {
285 ; X86-LABEL: memset_16:
286 ; X86:       # %bb.0: # %entry
287 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
288 ; X86-NEXT:    movl $0, 12(%eax)
289 ; X86-NEXT:    movl $0, 8(%eax)
290 ; X86-NEXT:    movl $0, 4(%eax)
291 ; X86-NEXT:    movl $0, (%eax)
292 ; X86-NEXT:    retl
294 ; CORE2-LABEL: memset_16:
295 ; CORE2:       # %bb.0: # %entry
296 ; CORE2-NEXT:    movq $0, 8(%rdi)
297 ; CORE2-NEXT:    movq $0, (%rdi)
298 ; CORE2-NEXT:    retq
300 ; NEHALEM-LABEL: memset_16:
301 ; NEHALEM:       # %bb.0: # %entry
302 ; NEHALEM-NEXT:    xorps %xmm0, %xmm0
303 ; NEHALEM-NEXT:    movups %xmm0, (%rdi)
304 ; NEHALEM-NEXT:    retq
306 ; SANDYBRIDGE-LABEL: memset_16:
307 ; SANDYBRIDGE:       # %bb.0: # %entry
308 ; SANDYBRIDGE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
309 ; SANDYBRIDGE-NEXT:    vmovups %xmm0, (%rdi)
310 ; SANDYBRIDGE-NEXT:    retq
312 ; SKYLAKE-LABEL: memset_16:
313 ; SKYLAKE:       # %bb.0: # %entry
314 ; SKYLAKE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
315 ; SKYLAKE-NEXT:    vmovups %xmm0, (%rdi)
316 ; SKYLAKE-NEXT:    retq
317 entry:
318         call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 16, i1 false)
319         ret void
322 define void @memset_17(i8* %a) nounwind  {
323 ; X86-LABEL: memset_17:
324 ; X86:       # %bb.0: # %entry
325 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
326 ; X86-NEXT:    movb $0, 16(%eax)
327 ; X86-NEXT:    movl $0, 12(%eax)
328 ; X86-NEXT:    movl $0, 8(%eax)
329 ; X86-NEXT:    movl $0, 4(%eax)
330 ; X86-NEXT:    movl $0, (%eax)
331 ; X86-NEXT:    retl
333 ; CORE2-LABEL: memset_17:
334 ; CORE2:       # %bb.0: # %entry
335 ; CORE2-NEXT:    movb $0, 16(%rdi)
336 ; CORE2-NEXT:    movq $0, 8(%rdi)
337 ; CORE2-NEXT:    movq $0, (%rdi)
338 ; CORE2-NEXT:    retq
340 ; NEHALEM-LABEL: memset_17:
341 ; NEHALEM:       # %bb.0: # %entry
342 ; NEHALEM-NEXT:    xorps %xmm0, %xmm0
343 ; NEHALEM-NEXT:    movups %xmm0, (%rdi)
344 ; NEHALEM-NEXT:    movb $0, 16(%rdi)
345 ; NEHALEM-NEXT:    retq
347 ; SANDYBRIDGE-LABEL: memset_17:
348 ; SANDYBRIDGE:       # %bb.0: # %entry
349 ; SANDYBRIDGE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
350 ; SANDYBRIDGE-NEXT:    vmovups %xmm0, (%rdi)
351 ; SANDYBRIDGE-NEXT:    movb $0, 16(%rdi)
352 ; SANDYBRIDGE-NEXT:    retq
354 ; SKYLAKE-LABEL: memset_17:
355 ; SKYLAKE:       # %bb.0: # %entry
356 ; SKYLAKE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
357 ; SKYLAKE-NEXT:    vmovups %xmm0, (%rdi)
358 ; SKYLAKE-NEXT:    movb $0, 16(%rdi)
359 ; SKYLAKE-NEXT:    retq
360 entry:
361         call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 17, i1 false)
362         ret void
365 define void @memset_19(i8* %a) nounwind  {
366 ; X86-LABEL: memset_19:
367 ; X86:       # %bb.0: # %entry
368 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
369 ; X86-NEXT:    movl $0, 15(%eax)
370 ; X86-NEXT:    movl $0, 12(%eax)
371 ; X86-NEXT:    movl $0, 8(%eax)
372 ; X86-NEXT:    movl $0, 4(%eax)
373 ; X86-NEXT:    movl $0, (%eax)
374 ; X86-NEXT:    retl
376 ; CORE2-LABEL: memset_19:
377 ; CORE2:       # %bb.0: # %entry
378 ; CORE2-NEXT:    movl $0, 15(%rdi)
379 ; CORE2-NEXT:    movq $0, 8(%rdi)
380 ; CORE2-NEXT:    movq $0, (%rdi)
381 ; CORE2-NEXT:    retq
383 ; NEHALEM-LABEL: memset_19:
384 ; NEHALEM:       # %bb.0: # %entry
385 ; NEHALEM-NEXT:    xorps %xmm0, %xmm0
386 ; NEHALEM-NEXT:    movups %xmm0, (%rdi)
387 ; NEHALEM-NEXT:    movl $0, 15(%rdi)
388 ; NEHALEM-NEXT:    retq
390 ; SANDYBRIDGE-LABEL: memset_19:
391 ; SANDYBRIDGE:       # %bb.0: # %entry
392 ; SANDYBRIDGE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
393 ; SANDYBRIDGE-NEXT:    vmovups %xmm0, (%rdi)
394 ; SANDYBRIDGE-NEXT:    movl $0, 15(%rdi)
395 ; SANDYBRIDGE-NEXT:    retq
397 ; SKYLAKE-LABEL: memset_19:
398 ; SKYLAKE:       # %bb.0: # %entry
399 ; SKYLAKE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
400 ; SKYLAKE-NEXT:    vmovups %xmm0, (%rdi)
401 ; SKYLAKE-NEXT:    movl $0, 15(%rdi)
402 ; SKYLAKE-NEXT:    retq
403 entry:
404         call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 19, i1 false)
405         ret void
408 define void @memset_31(i8* %a) nounwind  {
409 ; X86-LABEL: memset_31:
410 ; X86:       # %bb.0: # %entry
411 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
412 ; X86-NEXT:    movl $0, 27(%eax)
413 ; X86-NEXT:    movl $0, 24(%eax)
414 ; X86-NEXT:    movl $0, 20(%eax)
415 ; X86-NEXT:    movl $0, 16(%eax)
416 ; X86-NEXT:    movl $0, 12(%eax)
417 ; X86-NEXT:    movl $0, 8(%eax)
418 ; X86-NEXT:    movl $0, 4(%eax)
419 ; X86-NEXT:    movl $0, (%eax)
420 ; X86-NEXT:    retl
422 ; CORE2-LABEL: memset_31:
423 ; CORE2:       # %bb.0: # %entry
424 ; CORE2-NEXT:    movq $0, 23(%rdi)
425 ; CORE2-NEXT:    movq $0, 16(%rdi)
426 ; CORE2-NEXT:    movq $0, 8(%rdi)
427 ; CORE2-NEXT:    movq $0, (%rdi)
428 ; CORE2-NEXT:    retq
430 ; NEHALEM-LABEL: memset_31:
431 ; NEHALEM:       # %bb.0: # %entry
432 ; NEHALEM-NEXT:    xorps %xmm0, %xmm0
433 ; NEHALEM-NEXT:    movups %xmm0, 15(%rdi)
434 ; NEHALEM-NEXT:    movups %xmm0, (%rdi)
435 ; NEHALEM-NEXT:    retq
437 ; SANDYBRIDGE-LABEL: memset_31:
438 ; SANDYBRIDGE:       # %bb.0: # %entry
439 ; SANDYBRIDGE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
440 ; SANDYBRIDGE-NEXT:    vmovups %xmm0, 15(%rdi)
441 ; SANDYBRIDGE-NEXT:    vmovups %xmm0, (%rdi)
442 ; SANDYBRIDGE-NEXT:    retq
444 ; SKYLAKE-LABEL: memset_31:
445 ; SKYLAKE:       # %bb.0: # %entry
446 ; SKYLAKE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
447 ; SKYLAKE-NEXT:    vmovups %xmm0, 15(%rdi)
448 ; SKYLAKE-NEXT:    vmovups %xmm0, (%rdi)
449 ; SKYLAKE-NEXT:    retq
450 entry:
451         call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 31, i1 false)
452         ret void
455 define void @memset_32(i8* %a) nounwind  {
456 ; X86-LABEL: memset_32:
457 ; X86:       # %bb.0: # %entry
458 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
459 ; X86-NEXT:    movl $0, 28(%eax)
460 ; X86-NEXT:    movl $0, 24(%eax)
461 ; X86-NEXT:    movl $0, 20(%eax)
462 ; X86-NEXT:    movl $0, 16(%eax)
463 ; X86-NEXT:    movl $0, 12(%eax)
464 ; X86-NEXT:    movl $0, 8(%eax)
465 ; X86-NEXT:    movl $0, 4(%eax)
466 ; X86-NEXT:    movl $0, (%eax)
467 ; X86-NEXT:    retl
469 ; CORE2-LABEL: memset_32:
470 ; CORE2:       # %bb.0: # %entry
471 ; CORE2-NEXT:    movq $0, 24(%rdi)
472 ; CORE2-NEXT:    movq $0, 16(%rdi)
473 ; CORE2-NEXT:    movq $0, 8(%rdi)
474 ; CORE2-NEXT:    movq $0, (%rdi)
475 ; CORE2-NEXT:    retq
477 ; NEHALEM-LABEL: memset_32:
478 ; NEHALEM:       # %bb.0: # %entry
479 ; NEHALEM-NEXT:    xorps %xmm0, %xmm0
480 ; NEHALEM-NEXT:    movups %xmm0, 16(%rdi)
481 ; NEHALEM-NEXT:    movups %xmm0, (%rdi)
482 ; NEHALEM-NEXT:    retq
484 ; SANDYBRIDGE-LABEL: memset_32:
485 ; SANDYBRIDGE:       # %bb.0: # %entry
486 ; SANDYBRIDGE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
487 ; SANDYBRIDGE-NEXT:    vmovups %xmm0, 16(%rdi)
488 ; SANDYBRIDGE-NEXT:    vmovups %xmm0, (%rdi)
489 ; SANDYBRIDGE-NEXT:    retq
491 ; SKYLAKE-LABEL: memset_32:
492 ; SKYLAKE:       # %bb.0: # %entry
493 ; SKYLAKE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
494 ; SKYLAKE-NEXT:    vmovups %ymm0, (%rdi)
495 ; SKYLAKE-NEXT:    vzeroupper
496 ; SKYLAKE-NEXT:    retq
497 entry:
498         call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 32, i1 false)
499         ret void
502 define void @memset_32_align32(i8* %a) nounwind  {
503 ; X86-LABEL: memset_32_align32:
504 ; X86:       # %bb.0: # %entry
505 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
506 ; X86-NEXT:    movl $0, 28(%eax)
507 ; X86-NEXT:    movl $0, 24(%eax)
508 ; X86-NEXT:    movl $0, 20(%eax)
509 ; X86-NEXT:    movl $0, 16(%eax)
510 ; X86-NEXT:    movl $0, 12(%eax)
511 ; X86-NEXT:    movl $0, 8(%eax)
512 ; X86-NEXT:    movl $0, 4(%eax)
513 ; X86-NEXT:    movl $0, (%eax)
514 ; X86-NEXT:    retl
516 ; CORE2-LABEL: memset_32_align32:
517 ; CORE2:       # %bb.0: # %entry
518 ; CORE2-NEXT:    xorps %xmm0, %xmm0
519 ; CORE2-NEXT:    movaps %xmm0, 16(%rdi)
520 ; CORE2-NEXT:    movaps %xmm0, (%rdi)
521 ; CORE2-NEXT:    retq
523 ; NEHALEM-LABEL: memset_32_align32:
524 ; NEHALEM:       # %bb.0: # %entry
525 ; NEHALEM-NEXT:    xorps %xmm0, %xmm0
526 ; NEHALEM-NEXT:    movaps %xmm0, 16(%rdi)
527 ; NEHALEM-NEXT:    movaps %xmm0, (%rdi)
528 ; NEHALEM-NEXT:    retq
530 ; SANDYBRIDGE-LABEL: memset_32_align32:
531 ; SANDYBRIDGE:       # %bb.0: # %entry
532 ; SANDYBRIDGE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
533 ; SANDYBRIDGE-NEXT:    vmovaps %ymm0, (%rdi)
534 ; SANDYBRIDGE-NEXT:    vzeroupper
535 ; SANDYBRIDGE-NEXT:    retq
537 ; SKYLAKE-LABEL: memset_32_align32:
538 ; SKYLAKE:       # %bb.0: # %entry
539 ; SKYLAKE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
540 ; SKYLAKE-NEXT:    vmovaps %ymm0, (%rdi)
541 ; SKYLAKE-NEXT:    vzeroupper
542 ; SKYLAKE-NEXT:    retq
543 entry:
544         call void @llvm.memset.p0i8.i64(i8* align 32 %a, i8 0, i64 32, i1 false)
545         ret void
549 define void @memset_35(i8* %a) nounwind  {
550 ; X86-LABEL: memset_35:
551 ; X86:       # %bb.0: # %entry
552 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
553 ; X86-NEXT:    movl $0, 31(%eax)
554 ; X86-NEXT:    movl $0, 28(%eax)
555 ; X86-NEXT:    movl $0, 24(%eax)
556 ; X86-NEXT:    movl $0, 20(%eax)
557 ; X86-NEXT:    movl $0, 16(%eax)
558 ; X86-NEXT:    movl $0, 12(%eax)
559 ; X86-NEXT:    movl $0, 8(%eax)
560 ; X86-NEXT:    movl $0, 4(%eax)
561 ; X86-NEXT:    movl $0, (%eax)
562 ; X86-NEXT:    retl
564 ; CORE2-LABEL: memset_35:
565 ; CORE2:       # %bb.0: # %entry
566 ; CORE2-NEXT:    movl $0, 31(%rdi)
567 ; CORE2-NEXT:    movq $0, 24(%rdi)
568 ; CORE2-NEXT:    movq $0, 16(%rdi)
569 ; CORE2-NEXT:    movq $0, 8(%rdi)
570 ; CORE2-NEXT:    movq $0, (%rdi)
571 ; CORE2-NEXT:    retq
573 ; NEHALEM-LABEL: memset_35:
574 ; NEHALEM:       # %bb.0: # %entry
575 ; NEHALEM-NEXT:    xorps %xmm0, %xmm0
576 ; NEHALEM-NEXT:    movups %xmm0, 16(%rdi)
577 ; NEHALEM-NEXT:    movups %xmm0, (%rdi)
578 ; NEHALEM-NEXT:    movl $0, 31(%rdi)
579 ; NEHALEM-NEXT:    retq
581 ; SANDYBRIDGE-LABEL: memset_35:
582 ; SANDYBRIDGE:       # %bb.0: # %entry
583 ; SANDYBRIDGE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
584 ; SANDYBRIDGE-NEXT:    vmovups %xmm0, 16(%rdi)
585 ; SANDYBRIDGE-NEXT:    vmovups %xmm0, (%rdi)
586 ; SANDYBRIDGE-NEXT:    movl $0, 31(%rdi)
587 ; SANDYBRIDGE-NEXT:    retq
589 ; SKYLAKE-LABEL: memset_35:
590 ; SKYLAKE:       # %bb.0: # %entry
591 ; SKYLAKE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
592 ; SKYLAKE-NEXT:    vmovups %ymm0, (%rdi)
593 ; SKYLAKE-NEXT:    movl $0, 31(%rdi)
594 ; SKYLAKE-NEXT:    vzeroupper
595 ; SKYLAKE-NEXT:    retq
596 entry:
597         call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 35, i1 false)
598         ret void