[SystemZ] Also clear kill flag for index reg in splitMove().
[oota-llvm.git] / test / CodeGen / SystemZ / memset-02.ll
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
5 declare void @llvm.memset.p0i8.i32(i8 *nocapture, i8, i32, i32, i1) nounwind
6 declare void @llvm.memset.p0i8.i64(i8 *nocapture, i8, i64, i32, i1) nounwind
7
8 ; No bytes, i32 version.
9 define void @f1(i8 *%dest) {
10 ; CHECK-LABEL: f1:
11 ; CHECK-NOT: %r2
12 ; CHECK: br %r14
13   call void @llvm.memset.p0i8.i32(i8 *%dest, i8 128, i32 0, i32 1, i1 false)
14   ret void
15 }
16
17 ; No bytes, i64 version.
18 define void @f2(i8 *%dest) {
19 ; CHECK-LABEL: f2:
20 ; CHECK-NOT: %r2
21 ; CHECK: br %r14
22   call void @llvm.memset.p0i8.i64(i8 *%dest, i8 128, i64 0, i32 1, i1 false)
23   ret void
24 }
25
26 ; 1 byte, i32 version.
27 define void @f3(i8 *%dest) {
28 ; CHECK-LABEL: f3:
29 ; CHECK: mvi 0(%r2), 128
30 ; CHECK: br %r14
31   call void @llvm.memset.p0i8.i32(i8 *%dest, i8 128, i32 1, i32 1, i1 false)
32   ret void
33 }
34
35 ; 1 byte, i64 version.
36 define void @f4(i8 *%dest) {
37 ; CHECK-LABEL: f4:
38 ; CHECK: mvi 0(%r2), 128
39 ; CHECK: br %r14
40   call void @llvm.memset.p0i8.i64(i8 *%dest, i8 128, i64 1, i32 1, i1 false)
41   ret void
42 }
43
44 ; 2 bytes, i32 version.
45 define void @f5(i8 *%dest) {
46 ; CHECK-LABEL: f5:
47 ; CHECK: mvhhi 0(%r2), -32640
48 ; CHECK: br %r14
49   call void @llvm.memset.p0i8.i32(i8 *%dest, i8 128, i32 2, i32 1, i1 false)
50   ret void
51 }
52
53 ; 2 bytes, i64 version.
54 define void @f6(i8 *%dest) {
55 ; CHECK-LABEL: f6:
56 ; CHECK: mvhhi 0(%r2), -32640
57 ; CHECK: br %r14
58   call void @llvm.memset.p0i8.i64(i8 *%dest, i8 128, i64 2, i32 1, i1 false)
59   ret void
60 }
61
62 ; 3 bytes, i32 version.
63 define void @f7(i8 *%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.p0i8.i32(i8 *%dest, i8 128, i32 3, i32 1, i1 false)
69   ret void
70 }
71
72 ; 3 bytes, i64 version.
73 define void @f8(i8 *%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.p0i8.i64(i8 *%dest, i8 128, i64 3, i32 1, i1 false)
79   ret void
80 }
81
82 ; 4 bytes, i32 version.
83 define void @f9(i8 *%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.p0i8.i32(i8 *%dest, i8 128, i32 4, i32 1, i1 false)
89   ret void
90 }
91
92 ; 4 bytes, i64 version.
93 define void @f10(i8 *%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.p0i8.i64(i8 *%dest, i8 128, i64 4, i32 1, i1 false)
99   ret void
100 }
101
102 ; 5 bytes, i32 version.
103 define void @f11(i8 *%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.p0i8.i32(i8 *%dest, i8 128, i32 5, i32 1, i1 false)
109   ret void
110 }
111
112 ; 5 bytes, i64 version.
113 define void @f12(i8 *%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.p0i8.i64(i8 *%dest, i8 128, i64 5, i32 1, i1 false)
119   ret void
120 }
121
122 ; 257 bytes, i32 version.
123 define void @f13(i8 *%dest) {
124 ; CHECK-LABEL: f13:
125 ; CHECK: mvi 0(%r2), 128
126 ; CHECK: mvc 1(256,%r2), 0(%r2)
127 ; CHECK: br %r14
128   call void @llvm.memset.p0i8.i32(i8 *%dest, i8 128, i32 257, i32 1, i1 false)
129   ret void
130 }
131
132 ; 257 bytes, i64 version.
133 define void @f14(i8 *%dest) {
134 ; CHECK-LABEL: f14:
135 ; CHECK: mvi 0(%r2), 128
136 ; CHECK: mvc 1(256,%r2), 0(%r2)
137 ; CHECK: br %r14
138   call void @llvm.memset.p0i8.i64(i8 *%dest, i8 128, i64 257, i32 1, i1 false)
139   ret void
140 }
141
142 ; 258 bytes, i32 version.  We need two MVCs.
143 define void @f15(i8 *%dest) {
144 ; CHECK-LABEL: f15:
145 ; CHECK: mvi 0(%r2), 128
146 ; CHECK: mvc 1(256,%r2), 0(%r2)
147 ; CHECK: mvc 257(1,%r2), 256(%r2)
148 ; CHECK: br %r14
149   call void @llvm.memset.p0i8.i32(i8 *%dest, i8 128, i32 258, i32 1, i1 false)
150   ret void
151 }
152
153 ; 258 bytes, i64 version.
154 define void @f16(i8 *%dest) {
155 ; CHECK-LABEL: f16:
156 ; CHECK: mvi 0(%r2), 128
157 ; CHECK: mvc 1(256,%r2), 0(%r2)
158 ; CHECK: mvc 257(1,%r2), 256(%r2)
159 ; CHECK: br %r14
160   call void @llvm.memset.p0i8.i64(i8 *%dest, i8 128, i64 258, i32 1, i1 false)
161   ret void
162 }