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
6declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1) nounwind
7
8define void @memset_0(i8* %a) nounwind  {
9; X86-LABEL: memset_0:
10; X86:       # %bb.0: # %entry
11; X86-NEXT:    retl
12;
13; CORE2-LABEL: memset_0:
14; CORE2:       # %bb.0: # %entry
15; CORE2-NEXT:    retq
16;
17; NEHALEM-LABEL: memset_0:
18; NEHALEM:       # %bb.0: # %entry
19; NEHALEM-NEXT:    retq
20entry:
21	call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 0, i1 false)
22	ret void
23}
24
25define void @memset_4(i8* %a) nounwind  {
26; X86-LABEL: memset_4:
27; X86:       # %bb.0: # %entry
28; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
29; X86-NEXT:    movl $0, (%eax)
30; X86-NEXT:    retl
31;
32; CORE2-LABEL: memset_4:
33; CORE2:       # %bb.0: # %entry
34; CORE2-NEXT:    movl $0, (%rdi)
35; CORE2-NEXT:    retq
36;
37; NEHALEM-LABEL: memset_4:
38; NEHALEM:       # %bb.0: # %entry
39; NEHALEM-NEXT:    movl $0, (%rdi)
40; NEHALEM-NEXT:    retq
41entry:
42	call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 4, i1 false)
43	ret void
44}
45
46define void @memset_5(i8* %a) nounwind  {
47; X86-LABEL: memset_5:
48; X86:       # %bb.0: # %entry
49; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
50; X86-NEXT:    movb $0, 4(%eax)
51; X86-NEXT:    movl $0, (%eax)
52; X86-NEXT:    retl
53;
54; CORE2-LABEL: memset_5:
55; CORE2:       # %bb.0: # %entry
56; CORE2-NEXT:    movb $0, 4(%rdi)
57; CORE2-NEXT:    movl $0, (%rdi)
58; CORE2-NEXT:    retq
59;
60; NEHALEM-LABEL: memset_5:
61; NEHALEM:       # %bb.0: # %entry
62; NEHALEM-NEXT:    movb $0, 4(%rdi)
63; NEHALEM-NEXT:    movl $0, (%rdi)
64; NEHALEM-NEXT:    retq
65entry:
66	call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 5, i1 false)
67	ret void
68}
69
70define void @memset_7(i8* %a) nounwind  {
71; X86-LABEL: memset_7:
72; X86:       # %bb.0: # %entry
73; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
74; X86-NEXT:    movl $0, 3(%eax)
75; X86-NEXT:    movl $0, (%eax)
76; X86-NEXT:    retl
77;
78; CORE2-LABEL: memset_7:
79; CORE2:       # %bb.0: # %entry
80; CORE2-NEXT:    movl $0, 3(%rdi)
81; CORE2-NEXT:    movl $0, (%rdi)
82; CORE2-NEXT:    retq
83;
84; NEHALEM-LABEL: memset_7:
85; NEHALEM:       # %bb.0: # %entry
86; NEHALEM-NEXT:    movl $0, 3(%rdi)
87; NEHALEM-NEXT:    movl $0, (%rdi)
88; NEHALEM-NEXT:    retq
89entry:
90	call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 7, i1 false)
91	ret void
92}
93
94define void @memset_8(i8* %a) nounwind  {
95; X86-LABEL: memset_8:
96; X86:       # %bb.0: # %entry
97; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
98; X86-NEXT:    movl $0, 4(%eax)
99; X86-NEXT:    movl $0, (%eax)
100; X86-NEXT:    retl
101;
102; CORE2-LABEL: memset_8:
103; CORE2:       # %bb.0: # %entry
104; CORE2-NEXT:    movq $0, (%rdi)
105; CORE2-NEXT:    retq
106;
107; NEHALEM-LABEL: memset_8:
108; NEHALEM:       # %bb.0: # %entry
109; NEHALEM-NEXT:    movq $0, (%rdi)
110; NEHALEM-NEXT:    retq
111entry:
112	call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 8, i1 false)
113	ret void
114}
115
116define void @memset_11(i8* %a) nounwind  {
117; X86-LABEL: memset_11:
118; X86:       # %bb.0: # %entry
119; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
120; X86-NEXT:    movl $0, 7(%eax)
121; X86-NEXT:    movl $0, 4(%eax)
122; X86-NEXT:    movl $0, (%eax)
123; X86-NEXT:    retl
124;
125; CORE2-LABEL: memset_11:
126; CORE2:       # %bb.0: # %entry
127; CORE2-NEXT:    movl $0, 7(%rdi)
128; CORE2-NEXT:    movq $0, (%rdi)
129; CORE2-NEXT:    retq
130;
131; NEHALEM-LABEL: memset_11:
132; NEHALEM:       # %bb.0: # %entry
133; NEHALEM-NEXT:    movl $0, 7(%rdi)
134; NEHALEM-NEXT:    movq $0, (%rdi)
135; NEHALEM-NEXT:    retq
136entry:
137	call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 11, i1 false)
138	ret void
139}
140
141define void @memset_13(i8* %a) nounwind  {
142; X86-LABEL: memset_13:
143; X86:       # %bb.0: # %entry
144; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
145; X86-NEXT:    movb $0, 12(%eax)
146; X86-NEXT:    movl $0, 8(%eax)
147; X86-NEXT:    movl $0, 4(%eax)
148; X86-NEXT:    movl $0, (%eax)
149; X86-NEXT:    retl
150;
151; CORE2-LABEL: memset_13:
152; CORE2:       # %bb.0: # %entry
153; CORE2-NEXT:    movq $0, 5(%rdi)
154; CORE2-NEXT:    movq $0, (%rdi)
155; CORE2-NEXT:    retq
156;
157; NEHALEM-LABEL: memset_13:
158; NEHALEM:       # %bb.0: # %entry
159; NEHALEM-NEXT:    movq $0, 5(%rdi)
160; NEHALEM-NEXT:    movq $0, (%rdi)
161; NEHALEM-NEXT:    retq
162entry:
163	call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 13, i1 false)
164	ret void
165}
166
167define void @memset_15(i8* %a) nounwind  {
168; X86-LABEL: memset_15:
169; X86:       # %bb.0: # %entry
170; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
171; X86-NEXT:    movl $0, 11(%eax)
172; X86-NEXT:    movl $0, 8(%eax)
173; X86-NEXT:    movl $0, 4(%eax)
174; X86-NEXT:    movl $0, (%eax)
175; X86-NEXT:    retl
176;
177; CORE2-LABEL: memset_15:
178; CORE2:       # %bb.0: # %entry
179; CORE2-NEXT:    movq $0, 7(%rdi)
180; CORE2-NEXT:    movq $0, (%rdi)
181; CORE2-NEXT:    retq
182;
183; NEHALEM-LABEL: memset_15:
184; NEHALEM:       # %bb.0: # %entry
185; NEHALEM-NEXT:    movq $0, 7(%rdi)
186; NEHALEM-NEXT:    movq $0, (%rdi)
187; NEHALEM-NEXT:    retq
188entry:
189	call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 15, i1 false)
190	ret void
191}
192
193define void @memset_16(i8* %a) nounwind  {
194; X86-LABEL: memset_16:
195; X86:       # %bb.0: # %entry
196; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
197; X86-NEXT:    movl $0, 12(%eax)
198; X86-NEXT:    movl $0, 8(%eax)
199; X86-NEXT:    movl $0, 4(%eax)
200; X86-NEXT:    movl $0, (%eax)
201; X86-NEXT:    retl
202;
203; CORE2-LABEL: memset_16:
204; CORE2:       # %bb.0: # %entry
205; CORE2-NEXT:    movq $0, 8(%rdi)
206; CORE2-NEXT:    movq $0, (%rdi)
207; CORE2-NEXT:    retq
208;
209; NEHALEM-LABEL: memset_16:
210; NEHALEM:       # %bb.0: # %entry
211; NEHALEM-NEXT:    xorps %xmm0, %xmm0
212; NEHALEM-NEXT:    movups %xmm0, (%rdi)
213; NEHALEM-NEXT:    retq
214entry:
215	call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 16, i1 false)
216	ret void
217}
218
219define void @memset_17(i8* %a) nounwind  {
220; X86-LABEL: memset_17:
221; X86:       # %bb.0: # %entry
222; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
223; X86-NEXT:    movb $0, 16(%eax)
224; X86-NEXT:    movl $0, 12(%eax)
225; X86-NEXT:    movl $0, 8(%eax)
226; X86-NEXT:    movl $0, 4(%eax)
227; X86-NEXT:    movl $0, (%eax)
228; X86-NEXT:    retl
229;
230; CORE2-LABEL: memset_17:
231; CORE2:       # %bb.0: # %entry
232; CORE2-NEXT:    movb $0, 16(%rdi)
233; CORE2-NEXT:    movq $0, 8(%rdi)
234; CORE2-NEXT:    movq $0, (%rdi)
235; CORE2-NEXT:    retq
236;
237; NEHALEM-LABEL: memset_17:
238; NEHALEM:       # %bb.0: # %entry
239; NEHALEM-NEXT:    xorps %xmm0, %xmm0
240; NEHALEM-NEXT:    movups %xmm0, (%rdi)
241; NEHALEM-NEXT:    movb $0, 16(%rdi)
242; NEHALEM-NEXT:    retq
243entry:
244	call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 17, i1 false)
245	ret void
246}
247
248define void @memset_19(i8* %a) nounwind  {
249; X86-LABEL: memset_19:
250; X86:       # %bb.0: # %entry
251; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
252; X86-NEXT:    movl $0, 15(%eax)
253; X86-NEXT:    movl $0, 12(%eax)
254; X86-NEXT:    movl $0, 8(%eax)
255; X86-NEXT:    movl $0, 4(%eax)
256; X86-NEXT:    movl $0, (%eax)
257; X86-NEXT:    retl
258;
259; CORE2-LABEL: memset_19:
260; CORE2:       # %bb.0: # %entry
261; CORE2-NEXT:    movl $0, 15(%rdi)
262; CORE2-NEXT:    movq $0, 8(%rdi)
263; CORE2-NEXT:    movq $0, (%rdi)
264; CORE2-NEXT:    retq
265;
266; NEHALEM-LABEL: memset_19:
267; NEHALEM:       # %bb.0: # %entry
268; NEHALEM-NEXT:    xorps %xmm0, %xmm0
269; NEHALEM-NEXT:    movups %xmm0, (%rdi)
270; NEHALEM-NEXT:    movl $0, 15(%rdi)
271; NEHALEM-NEXT:    retq
272entry:
273	call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 19, i1 false)
274	ret void
275}
276
277define void @memset_31(i8* %a) nounwind  {
278; X86-LABEL: memset_31:
279; X86:       # %bb.0: # %entry
280; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
281; X86-NEXT:    movl $0, 27(%eax)
282; X86-NEXT:    movl $0, 24(%eax)
283; X86-NEXT:    movl $0, 20(%eax)
284; X86-NEXT:    movl $0, 16(%eax)
285; X86-NEXT:    movl $0, 12(%eax)
286; X86-NEXT:    movl $0, 8(%eax)
287; X86-NEXT:    movl $0, 4(%eax)
288; X86-NEXT:    movl $0, (%eax)
289; X86-NEXT:    retl
290;
291; CORE2-LABEL: memset_31:
292; CORE2:       # %bb.0: # %entry
293; CORE2-NEXT:    movq $0, 23(%rdi)
294; CORE2-NEXT:    movq $0, 16(%rdi)
295; CORE2-NEXT:    movq $0, 8(%rdi)
296; CORE2-NEXT:    movq $0, (%rdi)
297; CORE2-NEXT:    retq
298;
299; NEHALEM-LABEL: memset_31:
300; NEHALEM:       # %bb.0: # %entry
301; NEHALEM-NEXT:    xorps %xmm0, %xmm0
302; NEHALEM-NEXT:    movups %xmm0, 15(%rdi)
303; NEHALEM-NEXT:    movups %xmm0, (%rdi)
304; NEHALEM-NEXT:    retq
305entry:
306	call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 31, i1 false)
307	ret void
308}
309
310define void @memset_35(i8* %a) nounwind  {
311; X86-LABEL: memset_35:
312; X86:       # %bb.0: # %entry
313; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
314; X86-NEXT:    movl $0, 31(%eax)
315; X86-NEXT:    movl $0, 28(%eax)
316; X86-NEXT:    movl $0, 24(%eax)
317; X86-NEXT:    movl $0, 20(%eax)
318; X86-NEXT:    movl $0, 16(%eax)
319; X86-NEXT:    movl $0, 12(%eax)
320; X86-NEXT:    movl $0, 8(%eax)
321; X86-NEXT:    movl $0, 4(%eax)
322; X86-NEXT:    movl $0, (%eax)
323; X86-NEXT:    retl
324;
325; CORE2-LABEL: memset_35:
326; CORE2:       # %bb.0: # %entry
327; CORE2-NEXT:    movl $0, 31(%rdi)
328; CORE2-NEXT:    movq $0, 24(%rdi)
329; CORE2-NEXT:    movq $0, 16(%rdi)
330; CORE2-NEXT:    movq $0, 8(%rdi)
331; CORE2-NEXT:    movq $0, (%rdi)
332; CORE2-NEXT:    retq
333;
334; NEHALEM-LABEL: memset_35:
335; NEHALEM:       # %bb.0: # %entry
336; NEHALEM-NEXT:    xorps %xmm0, %xmm0
337; NEHALEM-NEXT:    movups %xmm0, 16(%rdi)
338; NEHALEM-NEXT:    movups %xmm0, (%rdi)
339; NEHALEM-NEXT:    movl $0, 31(%rdi)
340; NEHALEM-NEXT:    retq
341entry:
342	call void @llvm.memset.p0i8.i64(i8* %a, i8 0, i64 35, i1 false)
343	ret void
344}
345