xref: /llvm-project/llvm/test/CodeGen/SystemZ/memset-02.ll (revision a1710eb3cd5823c5d14899112ca3086acbdbe9cb)
1; Test memset in cases where the set value is a constant other than 0 and -1.
2;
3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4
5declare void @llvm.memset.p0.i32(ptr nocapture, i8, i32, i1) nounwind
6declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind
7
8; No bytes, i32 version.
9define void @f1(ptr %dest) {
10; CHECK-LABEL: f1:
11; CHECK-NOT: %r2
12; CHECK: br %r14
13  call void @llvm.memset.p0.i32(ptr %dest, i8 128, i32 0, i1 false)
14  ret void
15}
16
17; No bytes, i64 version.
18define void @f2(ptr %dest) {
19; CHECK-LABEL: f2:
20; CHECK-NOT: %r2
21; CHECK: br %r14
22  call void @llvm.memset.p0.i64(ptr %dest, i8 128, i64 0, i1 false)
23  ret void
24}
25
26; 1 byte, i32 version.
27define void @f3(ptr %dest) {
28; CHECK-LABEL: f3:
29; CHECK: mvi 0(%r2), 128
30; CHECK: br %r14
31  call void @llvm.memset.p0.i32(ptr %dest, i8 128, i32 1, i1 false)
32  ret void
33}
34
35; 1 byte, i64 version.
36define void @f4(ptr %dest) {
37; CHECK-LABEL: f4:
38; CHECK: mvi 0(%r2), 128
39; CHECK: br %r14
40  call void @llvm.memset.p0.i64(ptr %dest, i8 128, i64 1, i1 false)
41  ret void
42}
43
44; 2 bytes, i32 version.
45define void @f5(ptr %dest) {
46; CHECK-LABEL: f5:
47; CHECK: mvhhi 0(%r2), -32640
48; CHECK: br %r14
49  call void @llvm.memset.p0.i32(ptr %dest, i8 128, i32 2, i1 false)
50  ret void
51}
52
53; 2 bytes, i64 version.
54define void @f6(ptr %dest) {
55; CHECK-LABEL: f6:
56; CHECK: mvhhi 0(%r2), -32640
57; CHECK: br %r14
58  call void @llvm.memset.p0.i64(ptr %dest, i8 128, i64 2, i1 false)
59  ret void
60}
61
62; 3 bytes, i32 version.
63define void @f7(ptr %dest) {
64; CHECK-LABEL: f7:
65; CHECK-DAG: mvhhi 0(%r2), -32640
66; CHECK-DAG: mvi 2(%r2), 128
67; CHECK: br %r14
68  call void @llvm.memset.p0.i32(ptr %dest, i8 128, i32 3, i1 false)
69  ret void
70}
71
72; 3 bytes, i64 version.
73define void @f8(ptr %dest) {
74; CHECK-LABEL: f8:
75; CHECK-DAG: mvhhi 0(%r2), -32640
76; CHECK-DAG: mvi 2(%r2), 128
77; CHECK: br %r14
78  call void @llvm.memset.p0.i64(ptr %dest, i8 128, i64 3, i1 false)
79  ret void
80}
81
82; 4 bytes, i32 version.
83define void @f9(ptr %dest) {
84; CHECK-LABEL: f9:
85; CHECK: iilf [[REG:%r[0-5]]], 2155905152
86; CHECK: st [[REG]], 0(%r2)
87; CHECK: br %r14
88  call void @llvm.memset.p0.i32(ptr %dest, i8 128, i32 4, i1 false)
89  ret void
90}
91
92; 4 bytes, i64 version.
93define void @f10(ptr %dest) {
94; CHECK-LABEL: f10:
95; CHECK: iilf [[REG:%r[0-5]]], 2155905152
96; CHECK: st [[REG]], 0(%r2)
97; CHECK: br %r14
98  call void @llvm.memset.p0.i64(ptr %dest, i8 128, i64 4, i1 false)
99  ret void
100}
101
102; 5 bytes, i32 version.
103define void @f11(ptr %dest) {
104; CHECK-LABEL: f11:
105; CHECK: mvi 0(%r2), 128
106; CHECK: mvc 1(4,%r2), 0(%r2)
107; CHECK: br %r14
108  call void @llvm.memset.p0.i32(ptr %dest, i8 128, i32 5, i1 false)
109  ret void
110}
111
112; 5 bytes, i64 version.
113define void @f12(ptr %dest) {
114; CHECK-LABEL: f12:
115; CHECK: mvi 0(%r2), 128
116; CHECK: mvc 1(4,%r2), 0(%r2)
117; CHECK: br %r14
118  call void @llvm.memset.p0.i64(ptr %dest, i8 128, i64 5, i1 false)
119  ret void
120}
121
122; 257 bytes, i32 version.
123define void @f13(ptr %dest) {
124; CHECK-LABEL: f13:
125; CHECK: mvi 0(%r2), 128
126; CHECK: mvc 1(255,%r2), 0(%r2)
127; CHECK: mvi 256(%r2), 128
128; CHECK: br %r14
129  call void @llvm.memset.p0.i32(ptr %dest, i8 128, i32 257, i1 false)
130  ret void
131}
132
133; 257 bytes, i64 version.
134define void @f14(ptr %dest) {
135; CHECK-LABEL: f14:
136; CHECK: mvi 0(%r2), 128
137; CHECK: mvc 1(255,%r2), 0(%r2)
138; CHECK: mvi 256(%r2), 128
139; CHECK: br %r14
140  call void @llvm.memset.p0.i64(ptr %dest, i8 128, i64 257, i1 false)
141  ret void
142}
143
144; 258 bytes, i32 version.  We need two MVCs.
145define void @f15(ptr %dest) {
146; CHECK-LABEL: f15:
147; CHECK: mvi 0(%r2), 128
148; CHECK: mvc 1(255,%r2), 0(%r2)
149; CHECK: mvi 256(%r2), 128
150; CHECK: mvc 257(1,%r2), 256(%r2)
151; CHECK: br %r14
152  call void @llvm.memset.p0.i32(ptr %dest, i8 128, i32 258, i1 false)
153  ret void
154}
155
156; 258 bytes, i64 version.
157define void @f16(ptr %dest) {
158; CHECK-LABEL: f16:
159; CHECK: mvi 0(%r2), 128
160; CHECK: mvc 1(255,%r2), 0(%r2)
161; CHECK: mvi 256(%r2), 128
162; CHECK: mvc 257(1,%r2), 256(%r2)
163; CHECK: br %r14
164  call void @llvm.memset.p0.i64(ptr %dest, i8 128, i64 258, i1 false)
165  ret void
166}
167