blob: b18cca4ec481f21423631b1e48f4f5621f890235 [file] [log] [blame]
Richard Sandiford47660c12013-07-09 09:32:42 +00001; Test memsets that clear all bits.
2;
3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4
5declare void @llvm.memset.p0i8.i32(i8 *nocapture, i8, i32, i32, i1) nounwind
6declare void @llvm.memset.p0i8.i64(i8 *nocapture, i8, i64, i32, i1) nounwind
7
8; No bytes, i32 version.
9define void @f1(i8 *%dest) {
10; CHECK: f1:
11; CHECK-NOT: %r2
12; CHECK: br %r14
13 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 0, i32 1, i1 false)
14 ret void
15}
16
17; No bytes, i64 version.
18define void @f2(i8 *%dest) {
19; CHECK: f2:
20; CHECK-NOT: %r2
21; CHECK: br %r14
22 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 0, i32 1, i1 false)
23 ret void
24}
25
26; 1 byte, i32 version.
27define void @f3(i8 *%dest) {
28; CHECK: f3:
29; CHECK: mvi 0(%r2), 0
30; CHECK: br %r14
31 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 1, i32 1, i1 false)
32 ret void
33}
34
35; 1 byte, i64 version.
36define void @f4(i8 *%dest) {
37; CHECK: f4:
38; CHECK: mvi 0(%r2), 0
39; CHECK: br %r14
40 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 1, i32 1, i1 false)
41 ret void
42}
43
44; 2 bytes, i32 version.
45define void @f5(i8 *%dest) {
46; CHECK: f5:
47; CHECK: mvhhi 0(%r2), 0
48; CHECK: br %r14
49 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 2, i32 1, i1 false)
50 ret void
51}
52
53; 2 bytes, i64 version.
54define void @f6(i8 *%dest) {
55; CHECK: f6:
56; CHECK: mvhhi 0(%r2), 0
57; CHECK: br %r14
58 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 2, i32 1, i1 false)
59 ret void
60}
61
62; 3 bytes, i32 version.
63define void @f7(i8 *%dest) {
64; CHECK: f7:
65; CHECK-DAG: mvhhi 0(%r2), 0
66; CHECK-DAG: mvi 2(%r2), 0
67; CHECK: br %r14
68 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 3, i32 1, i1 false)
69 ret void
70}
71
72; 3 bytes, i64 version.
73define void @f8(i8 *%dest) {
74; CHECK: f8:
75; CHECK-DAG: mvhhi 0(%r2), 0
76; CHECK-DAG: mvi 2(%r2), 0
77; CHECK: br %r14
78 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 3, i32 1, i1 false)
79 ret void
80}
81
82; 4 bytes, i32 version.
83define void @f9(i8 *%dest) {
84; CHECK: f9:
85; CHECK: mvhi 0(%r2), 0
86; CHECK: br %r14
87 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 4, i32 1, i1 false)
88 ret void
89}
90
91; 4 bytes, i64 version.
92define void @f10(i8 *%dest) {
93; CHECK: f10:
94; CHECK: mvhi 0(%r2), 0
95; CHECK: br %r14
96 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 4, i32 1, i1 false)
97 ret void
98}
99
100; 5 bytes, i32 version.
101define void @f11(i8 *%dest) {
102; CHECK: f11:
103; CHECK-DAG: mvhi 0(%r2), 0
104; CHECK-DAG: mvi 4(%r2), 0
105; CHECK: br %r14
106 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 5, i32 1, i1 false)
107 ret void
108}
109
110; 5 bytes, i64 version.
111define void @f12(i8 *%dest) {
112; CHECK: f12:
113; CHECK-DAG: mvhi 0(%r2), 0
114; CHECK-DAG: mvi 4(%r2), 0
115; CHECK: br %r14
116 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 5, i32 1, i1 false)
117 ret void
118}
119
120; 6 bytes, i32 version.
121define void @f13(i8 *%dest) {
122; CHECK: f13:
123; CHECK-DAG: mvhi 0(%r2), 0
124; CHECK-DAG: mvhhi 4(%r2), 0
125; CHECK: br %r14
126 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 6, i32 1, i1 false)
127 ret void
128}
129
130; 6 bytes, i64 version.
131define void @f14(i8 *%dest) {
132; CHECK: f14:
133; CHECK-DAG: mvhi 0(%r2), 0
134; CHECK-DAG: mvhhi 4(%r2), 0
135; CHECK: br %r14
136 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 6, i32 1, i1 false)
137 ret void
138}
139
140; 7 bytes, i32 version.
141define void @f15(i8 *%dest) {
142; CHECK: f15:
143; CHECK: mvi 0(%r2), 0
144; CHECK: mvc 1(6,%r2), 0(%r2)
145; CHECK: br %r14
146 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 7, i32 1, i1 false)
147 ret void
148}
149
150; 7 bytes, i64 version.
151define void @f16(i8 *%dest) {
152; CHECK: f16:
153; CHECK: mvi 0(%r2), 0
154; CHECK: mvc 1(6,%r2), 0(%r2)
155; CHECK: br %r14
156 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 7, i32 1, i1 false)
157 ret void
158}
159
160; 8 bytes, i32 version.
161define void @f17(i8 *%dest) {
162; CHECK: f17:
163; CHECK: mvghi 0(%r2), 0
164; CHECK: br %r14
165 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 8, i32 1, i1 false)
166 ret void
167}
168
169; 8 bytes, i64 version.
170define void @f18(i8 *%dest) {
171; CHECK: f18:
172; CHECK: mvghi 0(%r2), 0
173; CHECK: br %r14
174 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 8, i32 1, i1 false)
175 ret void
176}
177
178; 9 bytes, i32 version.
179define void @f19(i8 *%dest) {
180; CHECK: f19:
181; CHECK-DAG: mvghi 0(%r2), 0
182; CHECK-DAG: mvi 8(%r2), 0
183; CHECK: br %r14
184 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 9, i32 1, i1 false)
185 ret void
186}
187
188; 9 bytes, i64 version.
189define void @f20(i8 *%dest) {
190; CHECK: f20:
191; CHECK-DAG: mvghi 0(%r2), 0
192; CHECK-DAG: mvi 8(%r2), 0
193; CHECK: br %r14
194 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 9, i32 1, i1 false)
195 ret void
196}
197
198; 10 bytes, i32 version.
199define void @f21(i8 *%dest) {
200; CHECK: f21:
201; CHECK-DAG: mvghi 0(%r2), 0
202; CHECK-DAG: mvhhi 8(%r2), 0
203; CHECK: br %r14
204 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 10, i32 1, i1 false)
205 ret void
206}
207
208; 10 bytes, i64 version.
209define void @f22(i8 *%dest) {
210; CHECK: f22:
211; CHECK-DAG: mvghi 0(%r2), 0
212; CHECK-DAG: mvhhi 8(%r2), 0
213; CHECK: br %r14
214 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 10, i32 1, i1 false)
215 ret void
216}
217
218; 11 bytes, i32 version.
219define void @f23(i8 *%dest) {
220; CHECK: f23:
221; CHECK: mvi 0(%r2), 0
222; CHECK: mvc 1(10,%r2), 0(%r2)
223; CHECK: br %r14
224 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 11, i32 1, i1 false)
225 ret void
226}
227
228; 11 bytes, i64 version.
229define void @f24(i8 *%dest) {
230; CHECK: f24:
231; CHECK: mvi 0(%r2), 0
232; CHECK: mvc 1(10,%r2), 0(%r2)
233; CHECK: br %r14
234 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 11, i32 1, i1 false)
235 ret void
236}
237
238; 12 bytes, i32 version.
239define void @f25(i8 *%dest) {
240; CHECK: f25:
241; CHECK-DAG: mvghi 0(%r2), 0
242; CHECK-DAG: mvhi 8(%r2), 0
243; CHECK: br %r14
244 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 12, i32 1, i1 false)
245 ret void
246}
247
248; 12 bytes, i64 version.
249define void @f26(i8 *%dest) {
250; CHECK: f26:
251; CHECK-DAG: mvghi 0(%r2), 0
252; CHECK-DAG: mvhi 8(%r2), 0
253; CHECK: br %r14
254 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 12, i32 1, i1 false)
255 ret void
256}
257
258; 13 bytes, i32 version.
259define void @f27(i8 *%dest) {
260; CHECK: f27:
261; CHECK: mvi 0(%r2), 0
262; CHECK: mvc 1(12,%r2), 0(%r2)
263; CHECK: br %r14
264 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 13, i32 1, i1 false)
265 ret void
266}
267
268; 13 bytes, i64 version.
269define void @f28(i8 *%dest) {
270; CHECK: f28:
271; CHECK: mvi 0(%r2), 0
272; CHECK: mvc 1(12,%r2), 0(%r2)
273; CHECK: br %r14
274 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 13, i32 1, i1 false)
275 ret void
276}
277
278; 14 bytes, i32 version.
279define void @f29(i8 *%dest) {
280; CHECK: f29:
281; CHECK: mvi 0(%r2), 0
282; CHECK: mvc 1(13,%r2), 0(%r2)
283; CHECK: br %r14
284 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 14, i32 1, i1 false)
285 ret void
286}
287
288; 14 bytes, i64 version.
289define void @f30(i8 *%dest) {
290; CHECK: f30:
291; CHECK: mvi 0(%r2), 0
292; CHECK: mvc 1(13,%r2), 0(%r2)
293; CHECK: br %r14
294 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 14, i32 1, i1 false)
295 ret void
296}
297
298; 15 bytes, i32 version.
299define void @f31(i8 *%dest) {
300; CHECK: f31:
301; CHECK: mvi 0(%r2), 0
302; CHECK: mvc 1(14,%r2), 0(%r2)
303; CHECK: br %r14
304 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 15, i32 1, i1 false)
305 ret void
306}
307
308; 15 bytes, i64 version.
309define void @f32(i8 *%dest) {
310; CHECK: f32:
311; CHECK: mvi 0(%r2), 0
312; CHECK: mvc 1(14,%r2), 0(%r2)
313; CHECK: br %r14
314 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 15, i32 1, i1 false)
315 ret void
316}
317
318; 16 bytes, i32 version.
319define void @f33(i8 *%dest) {
320; CHECK: f33:
321; CHECK-DAG: mvghi 0(%r2), 0
322; CHECK-DAG: mvghi 8(%r2), 0
323; CHECK: br %r14
324 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 16, i32 1, i1 false)
325 ret void
326}
327
328; 16 bytes, i64 version.
329define void @f34(i8 *%dest) {
330; CHECK: f34:
331; CHECK-DAG: mvghi 0(%r2), 0
332; CHECK-DAG: mvghi 8(%r2), 0
333; CHECK: br %r14
334 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 16, i32 1, i1 false)
335 ret void
336}
337
338; 17 bytes, i32 version.
339define void @f35(i8 *%dest) {
340; CHECK: f35:
341; CHECK: mvi 0(%r2), 0
342; CHECK: mvc 1(16,%r2), 0(%r2)
343; CHECK: br %r14
344 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 17, i32 1, i1 false)
345 ret void
346}
347
348; 17 bytes, i64 version.
349define void @f36(i8 *%dest) {
350; CHECK: f36:
351; CHECK: mvi 0(%r2), 0
352; CHECK: mvc 1(16,%r2), 0(%r2)
353; CHECK: br %r14
354 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 17, i32 1, i1 false)
355 ret void
356}
357
358; 257 bytes, i32 version.
359define void @f37(i8 *%dest) {
360; CHECK: f37:
361; CHECK: mvi 0(%r2), 0
362; CHECK: mvc 1(256,%r2), 0(%r2)
363; CHECK: br %r14
364 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 257, i32 1, i1 false)
365 ret void
366}
367
368; 257 bytes, i64 version.
369define void @f38(i8 *%dest) {
370; CHECK: f38:
371; CHECK: mvi 0(%r2), 0
372; CHECK: mvc 1(256,%r2), 0(%r2)
373; CHECK: br %r14
374 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 257, i32 1, i1 false)
375 ret void
376}
377
378; 258 bytes, i32 version. 258 bytes is too big for a single MVC.
379; For now expect none, so that the test fails and gets updated when
380; large copies are implemented.
381define void @f39(i8 *%dest) {
382; CHECK: f39:
383; CHECK-NOT: mvc
384; CHECK: br %r14
385 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 258, i32 1, i1 false)
386 ret void
387}
388
389; 258 bytes, i64 version, with the same comments as above.
390define void @f40(i8 *%dest) {
391; CHECK: f40:
392; CHECK-NOT: mvc
393; CHECK: br %r14
394 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 258, i32 1, i1 false)
395 ret void
396}