blob: a95f89fc7c0aefa71d68a42f6c343edfda9d30db [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) {
Stephen Lind24ab202013-07-14 06:24:09 +000010; CHECK-LABEL: f1:
Richard Sandiford47660c12013-07-09 09:32:42 +000011; 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) {
Stephen Lind24ab202013-07-14 06:24:09 +000019; CHECK-LABEL: f2:
Richard Sandiford47660c12013-07-09 09:32:42 +000020; 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) {
Stephen Lind24ab202013-07-14 06:24:09 +000028; CHECK-LABEL: f3:
Richard Sandiford47660c12013-07-09 09:32:42 +000029; 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) {
Stephen Lind24ab202013-07-14 06:24:09 +000037; CHECK-LABEL: f4:
Richard Sandiford47660c12013-07-09 09:32:42 +000038; 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) {
Stephen Lind24ab202013-07-14 06:24:09 +000046; CHECK-LABEL: f5:
Richard Sandiford47660c12013-07-09 09:32:42 +000047; 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) {
Stephen Lind24ab202013-07-14 06:24:09 +000055; CHECK-LABEL: f6:
Richard Sandiford47660c12013-07-09 09:32:42 +000056; 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) {
Stephen Lind24ab202013-07-14 06:24:09 +000064; CHECK-LABEL: f7:
Richard Sandiford47660c12013-07-09 09:32:42 +000065; 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) {
Stephen Lind24ab202013-07-14 06:24:09 +000074; CHECK-LABEL: f8:
Richard Sandiford47660c12013-07-09 09:32:42 +000075; 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) {
Stephen Lind24ab202013-07-14 06:24:09 +000084; CHECK-LABEL: f9:
Richard Sandiford47660c12013-07-09 09:32:42 +000085; 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) {
Stephen Lind24ab202013-07-14 06:24:09 +000093; CHECK-LABEL: f10:
Richard Sandiford47660c12013-07-09 09:32:42 +000094; 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) {
Stephen Lind24ab202013-07-14 06:24:09 +0000102; CHECK-LABEL: f11:
Richard Sandiford47660c12013-07-09 09:32:42 +0000103; 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) {
Stephen Lind24ab202013-07-14 06:24:09 +0000112; CHECK-LABEL: f12:
Richard Sandiford47660c12013-07-09 09:32:42 +0000113; 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) {
Stephen Lind24ab202013-07-14 06:24:09 +0000122; CHECK-LABEL: f13:
Richard Sandiford47660c12013-07-09 09:32:42 +0000123; 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) {
Stephen Lind24ab202013-07-14 06:24:09 +0000132; CHECK-LABEL: f14:
Richard Sandiford47660c12013-07-09 09:32:42 +0000133; 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) {
Stephen Lind24ab202013-07-14 06:24:09 +0000142; CHECK-LABEL: f15:
Richard Sandiford4943bc32013-09-06 10:25:07 +0000143; CHECK: xc 0(7,%r2), 0(%r2)
Richard Sandiford47660c12013-07-09 09:32:42 +0000144; CHECK: br %r14
145 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 7, i32 1, i1 false)
146 ret void
147}
148
149; 7 bytes, i64 version.
150define void @f16(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000151; CHECK-LABEL: f16:
Richard Sandiford4943bc32013-09-06 10:25:07 +0000152; CHECK: xc 0(7,%r2), 0(%r2)
Richard Sandiford47660c12013-07-09 09:32:42 +0000153; CHECK: br %r14
154 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 7, i32 1, i1 false)
155 ret void
156}
157
158; 8 bytes, i32 version.
159define void @f17(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000160; CHECK-LABEL: f17:
Richard Sandiford47660c12013-07-09 09:32:42 +0000161; CHECK: mvghi 0(%r2), 0
162; CHECK: br %r14
163 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 8, i32 1, i1 false)
164 ret void
165}
166
167; 8 bytes, i64 version.
168define void @f18(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000169; CHECK-LABEL: f18:
Richard Sandiford47660c12013-07-09 09:32:42 +0000170; CHECK: mvghi 0(%r2), 0
171; CHECK: br %r14
172 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 8, i32 1, i1 false)
173 ret void
174}
175
176; 9 bytes, i32 version.
177define void @f19(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000178; CHECK-LABEL: f19:
Richard Sandiford47660c12013-07-09 09:32:42 +0000179; CHECK-DAG: mvghi 0(%r2), 0
180; CHECK-DAG: mvi 8(%r2), 0
181; CHECK: br %r14
182 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 9, i32 1, i1 false)
183 ret void
184}
185
186; 9 bytes, i64 version.
187define void @f20(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000188; CHECK-LABEL: f20:
Richard Sandiford47660c12013-07-09 09:32:42 +0000189; CHECK-DAG: mvghi 0(%r2), 0
190; CHECK-DAG: mvi 8(%r2), 0
191; CHECK: br %r14
192 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 9, i32 1, i1 false)
193 ret void
194}
195
196; 10 bytes, i32 version.
197define void @f21(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000198; CHECK-LABEL: f21:
Richard Sandiford47660c12013-07-09 09:32:42 +0000199; CHECK-DAG: mvghi 0(%r2), 0
200; CHECK-DAG: mvhhi 8(%r2), 0
201; CHECK: br %r14
202 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 10, i32 1, i1 false)
203 ret void
204}
205
206; 10 bytes, i64 version.
207define void @f22(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000208; CHECK-LABEL: f22:
Richard Sandiford47660c12013-07-09 09:32:42 +0000209; CHECK-DAG: mvghi 0(%r2), 0
210; CHECK-DAG: mvhhi 8(%r2), 0
211; CHECK: br %r14
212 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 10, i32 1, i1 false)
213 ret void
214}
215
216; 11 bytes, i32 version.
217define void @f23(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000218; CHECK-LABEL: f23:
Richard Sandiford4943bc32013-09-06 10:25:07 +0000219; CHECK: xc 0(11,%r2), 0(%r2)
Richard Sandiford47660c12013-07-09 09:32:42 +0000220; CHECK: br %r14
221 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 11, i32 1, i1 false)
222 ret void
223}
224
225; 11 bytes, i64 version.
226define void @f24(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000227; CHECK-LABEL: f24:
Richard Sandiford4943bc32013-09-06 10:25:07 +0000228; CHECK: xc 0(11,%r2), 0(%r2)
Richard Sandiford47660c12013-07-09 09:32:42 +0000229; CHECK: br %r14
230 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 11, i32 1, i1 false)
231 ret void
232}
233
234; 12 bytes, i32 version.
235define void @f25(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000236; CHECK-LABEL: f25:
Richard Sandiford47660c12013-07-09 09:32:42 +0000237; CHECK-DAG: mvghi 0(%r2), 0
238; CHECK-DAG: mvhi 8(%r2), 0
239; CHECK: br %r14
240 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 12, i32 1, i1 false)
241 ret void
242}
243
244; 12 bytes, i64 version.
245define void @f26(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000246; CHECK-LABEL: f26:
Richard Sandiford47660c12013-07-09 09:32:42 +0000247; CHECK-DAG: mvghi 0(%r2), 0
248; CHECK-DAG: mvhi 8(%r2), 0
249; CHECK: br %r14
250 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 12, i32 1, i1 false)
251 ret void
252}
253
254; 13 bytes, i32 version.
255define void @f27(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000256; CHECK-LABEL: f27:
Richard Sandiford4943bc32013-09-06 10:25:07 +0000257; CHECK: xc 0(13,%r2), 0(%r2)
Richard Sandiford47660c12013-07-09 09:32:42 +0000258; CHECK: br %r14
259 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 13, i32 1, i1 false)
260 ret void
261}
262
263; 13 bytes, i64 version.
264define void @f28(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000265; CHECK-LABEL: f28:
Richard Sandiford4943bc32013-09-06 10:25:07 +0000266; CHECK: xc 0(13,%r2), 0(%r2)
Richard Sandiford47660c12013-07-09 09:32:42 +0000267; CHECK: br %r14
268 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 13, i32 1, i1 false)
269 ret void
270}
271
272; 14 bytes, i32 version.
273define void @f29(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000274; CHECK-LABEL: f29:
Richard Sandiford4943bc32013-09-06 10:25:07 +0000275; CHECK: xc 0(14,%r2), 0(%r2)
Richard Sandiford47660c12013-07-09 09:32:42 +0000276; CHECK: br %r14
277 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 14, i32 1, i1 false)
278 ret void
279}
280
281; 14 bytes, i64 version.
282define void @f30(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000283; CHECK-LABEL: f30:
Richard Sandiford4943bc32013-09-06 10:25:07 +0000284; CHECK: xc 0(14,%r2), 0(%r2)
Richard Sandiford47660c12013-07-09 09:32:42 +0000285; CHECK: br %r14
286 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 14, i32 1, i1 false)
287 ret void
288}
289
290; 15 bytes, i32 version.
291define void @f31(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000292; CHECK-LABEL: f31:
Richard Sandiford4943bc32013-09-06 10:25:07 +0000293; CHECK: xc 0(15,%r2), 0(%r2)
Richard Sandiford47660c12013-07-09 09:32:42 +0000294; CHECK: br %r14
295 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 15, i32 1, i1 false)
296 ret void
297}
298
299; 15 bytes, i64 version.
300define void @f32(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000301; CHECK-LABEL: f32:
Richard Sandiford4943bc32013-09-06 10:25:07 +0000302; CHECK: xc 0(15,%r2), 0(%r2)
Richard Sandiford47660c12013-07-09 09:32:42 +0000303; CHECK: br %r14
304 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 15, i32 1, i1 false)
305 ret void
306}
307
308; 16 bytes, i32 version.
309define void @f33(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000310; CHECK-LABEL: f33:
Richard Sandiford47660c12013-07-09 09:32:42 +0000311; CHECK-DAG: mvghi 0(%r2), 0
312; CHECK-DAG: mvghi 8(%r2), 0
313; CHECK: br %r14
314 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 16, i32 1, i1 false)
315 ret void
316}
317
318; 16 bytes, i64 version.
319define void @f34(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000320; CHECK-LABEL: f34:
Richard Sandiford47660c12013-07-09 09:32:42 +0000321; CHECK-DAG: mvghi 0(%r2), 0
322; CHECK-DAG: mvghi 8(%r2), 0
323; CHECK: br %r14
324 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 16, i32 1, i1 false)
325 ret void
326}
327
328; 17 bytes, i32 version.
329define void @f35(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000330; CHECK-LABEL: f35:
Richard Sandiford4943bc32013-09-06 10:25:07 +0000331; CHECK: xc 0(17,%r2), 0(%r2)
Richard Sandiford47660c12013-07-09 09:32:42 +0000332; CHECK: br %r14
333 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 17, i32 1, i1 false)
334 ret void
335}
336
337; 17 bytes, i64 version.
338define void @f36(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000339; CHECK-LABEL: f36:
Richard Sandiford4943bc32013-09-06 10:25:07 +0000340; CHECK: xc 0(17,%r2), 0(%r2)
Richard Sandiford47660c12013-07-09 09:32:42 +0000341; CHECK: br %r14
342 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 17, i32 1, i1 false)
343 ret void
344}
345
Richard Sandiford4943bc32013-09-06 10:25:07 +0000346; 256 bytes, i32 version.
Richard Sandiford47660c12013-07-09 09:32:42 +0000347define void @f37(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000348; CHECK-LABEL: f37:
Richard Sandiford4943bc32013-09-06 10:25:07 +0000349; CHECK: xc 0(256,%r2), 0(%r2)
350; CHECK: br %r14
351 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 256, i32 1, i1 false)
352 ret void
353}
354
355; 256 bytes, i64 version.
356define void @f38(i8 *%dest) {
357; CHECK-LABEL: f38:
358; CHECK: xc 0(256,%r2), 0(%r2)
359; CHECK: br %r14
360 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 256, i32 1, i1 false)
361 ret void
362}
363
364; 257 bytes, i32 version. We need two MVCs.
365define void @f39(i8 *%dest) {
366; CHECK-LABEL: f39:
367; CHECK: xc 0(256,%r2), 0(%r2)
368; CHECK: xc 256(1,%r2), 256(%r2)
Richard Sandiford47660c12013-07-09 09:32:42 +0000369; CHECK: br %r14
370 call void @llvm.memset.p0i8.i32(i8 *%dest, i8 0, i32 257, i32 1, i1 false)
371 ret void
372}
373
374; 257 bytes, i64 version.
Richard Sandiford47660c12013-07-09 09:32:42 +0000375define void @f40(i8 *%dest) {
Stephen Lind24ab202013-07-14 06:24:09 +0000376; CHECK-LABEL: f40:
Richard Sandiford4943bc32013-09-06 10:25:07 +0000377; CHECK: xc 0(256,%r2), 0(%r2)
378; CHECK: xc 256(1,%r2), 256(%r2)
Richard Sandiford47660c12013-07-09 09:32:42 +0000379; CHECK: br %r14
Richard Sandiford4943bc32013-09-06 10:25:07 +0000380 call void @llvm.memset.p0i8.i64(i8 *%dest, i8 0, i64 257, i32 1, i1 false)
Richard Sandiford47660c12013-07-09 09:32:42 +0000381 ret void
382}