blob: 3ecd0e43589f8b6ebb6d38f6566fddfc77a70a06 [file] [log] [blame]
Daniel Sanders1b1e25b2013-09-27 10:08:31 +00001; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck %s
Daniel Sanders1ede3002013-11-15 11:04:16 +00002; RUN: llc -march=mipsel -mattr=+msa,+fp64 < %s | FileCheck %s
Daniel Sanders7fab9122013-09-11 12:39:25 +00003
4define void @add_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
5 ; CHECK: add_v16i8:
6
David Blaikiea79ac142015-02-27 21:17:42 +00007 %1 = load <16 x i8>, <16 x i8>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +00008 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +00009 %2 = load <16 x i8>, <16 x i8>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +000010 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
11 %3 = add <16 x i8> %1, %2
12 ; CHECK-DAG: addv.b [[R3:\$w[0-9]+]], [[R1]], [[R2]]
13 store <16 x i8> %3, <16 x i8>* %c
14 ; CHECK-DAG: st.b [[R3]], 0($4)
15
16 ret void
17 ; CHECK: .size add_v16i8
18}
19
20define void @add_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
21 ; CHECK: add_v8i16:
22
David Blaikiea79ac142015-02-27 21:17:42 +000023 %1 = load <8 x i16>, <8 x i16>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +000024 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +000025 %2 = load <8 x i16>, <8 x i16>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +000026 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
27 %3 = add <8 x i16> %1, %2
28 ; CHECK-DAG: addv.h [[R3:\$w[0-9]+]], [[R1]], [[R2]]
29 store <8 x i16> %3, <8 x i16>* %c
30 ; CHECK-DAG: st.h [[R3]], 0($4)
31
32 ret void
33 ; CHECK: .size add_v8i16
34}
35
36define void @add_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
37 ; CHECK: add_v4i32:
38
David Blaikiea79ac142015-02-27 21:17:42 +000039 %1 = load <4 x i32>, <4 x i32>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +000040 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +000041 %2 = load <4 x i32>, <4 x i32>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +000042 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
43 %3 = add <4 x i32> %1, %2
44 ; CHECK-DAG: addv.w [[R3:\$w[0-9]+]], [[R1]], [[R2]]
45 store <4 x i32> %3, <4 x i32>* %c
46 ; CHECK-DAG: st.w [[R3]], 0($4)
47
48 ret void
49 ; CHECK: .size add_v4i32
50}
51
52define void @add_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
53 ; CHECK: add_v2i64:
54
David Blaikiea79ac142015-02-27 21:17:42 +000055 %1 = load <2 x i64>, <2 x i64>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +000056 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +000057 %2 = load <2 x i64>, <2 x i64>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +000058 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
59 %3 = add <2 x i64> %1, %2
60 ; CHECK-DAG: addv.d [[R3:\$w[0-9]+]], [[R1]], [[R2]]
61 store <2 x i64> %3, <2 x i64>* %c
62 ; CHECK-DAG: st.d [[R3]], 0($4)
63
64 ret void
65 ; CHECK: .size add_v2i64
66}
Daniel Sanders86d0c8d2013-09-23 14:29:55 +000067
68define void @add_v16i8_i(<16 x i8>* %c, <16 x i8>* %a) nounwind {
69 ; CHECK: add_v16i8_i:
70
David Blaikiea79ac142015-02-27 21:17:42 +000071 %1 = load <16 x i8>, <16 x i8>* %a
Daniel Sanders86d0c8d2013-09-23 14:29:55 +000072 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
Daniel Sanders3ce56622013-09-24 12:18:31 +000073 %2 = add <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1,
74 i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
Daniel Sanders86d0c8d2013-09-23 14:29:55 +000075 ; CHECK-DAG: addvi.b [[R3:\$w[0-9]+]], [[R1]], 1
76 store <16 x i8> %2, <16 x i8>* %c
77 ; CHECK-DAG: st.b [[R3]], 0($4)
78
79 ret void
80 ; CHECK: .size add_v16i8_i
81}
82
83define void @add_v8i16_i(<8 x i16>* %c, <8 x i16>* %a) nounwind {
84 ; CHECK: add_v8i16_i:
85
David Blaikiea79ac142015-02-27 21:17:42 +000086 %1 = load <8 x i16>, <8 x i16>* %a
Daniel Sanders86d0c8d2013-09-23 14:29:55 +000087 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
Daniel Sanders3ce56622013-09-24 12:18:31 +000088 %2 = add <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1,
89 i16 1, i16 1, i16 1, i16 1>
Daniel Sanders86d0c8d2013-09-23 14:29:55 +000090 ; CHECK-DAG: addvi.h [[R3:\$w[0-9]+]], [[R1]], 1
91 store <8 x i16> %2, <8 x i16>* %c
92 ; CHECK-DAG: st.h [[R3]], 0($4)
93
94 ret void
95 ; CHECK: .size add_v8i16_i
96}
97
98define void @add_v4i32_i(<4 x i32>* %c, <4 x i32>* %a) nounwind {
99 ; CHECK: add_v4i32_i:
100
David Blaikiea79ac142015-02-27 21:17:42 +0000101 %1 = load <4 x i32>, <4 x i32>* %a
Daniel Sanders86d0c8d2013-09-23 14:29:55 +0000102 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
103 %2 = add <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1>
104 ; CHECK-DAG: addvi.w [[R3:\$w[0-9]+]], [[R1]], 1
105 store <4 x i32> %2, <4 x i32>* %c
106 ; CHECK-DAG: st.w [[R3]], 0($4)
107
108 ret void
109 ; CHECK: .size add_v4i32_i
110}
111
112define void @add_v2i64_i(<2 x i64>* %c, <2 x i64>* %a) nounwind {
113 ; CHECK: add_v2i64_i:
114
David Blaikiea79ac142015-02-27 21:17:42 +0000115 %1 = load <2 x i64>, <2 x i64>* %a
Daniel Sanders86d0c8d2013-09-23 14:29:55 +0000116 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
117 %2 = add <2 x i64> %1, <i64 1, i64 1>
118 ; CHECK-DAG: addvi.d [[R3:\$w[0-9]+]], [[R1]], 1
119 store <2 x i64> %2, <2 x i64>* %c
120 ; CHECK-DAG: st.d [[R3]], 0($4)
121
122 ret void
123 ; CHECK: .size add_v2i64_i
124}
125
Daniel Sanders7fab9122013-09-11 12:39:25 +0000126define void @sub_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
127 ; CHECK: sub_v16i8:
128
David Blaikiea79ac142015-02-27 21:17:42 +0000129 %1 = load <16 x i8>, <16 x i8>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000130 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000131 %2 = load <16 x i8>, <16 x i8>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000132 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
133 %3 = sub <16 x i8> %1, %2
134 ; CHECK-DAG: subv.b [[R3:\$w[0-9]+]], [[R1]], [[R2]]
135 store <16 x i8> %3, <16 x i8>* %c
136 ; CHECK-DAG: st.b [[R3]], 0($4)
137
138 ret void
139 ; CHECK: .size sub_v16i8
140}
141
142define void @sub_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
143 ; CHECK: sub_v8i16:
144
David Blaikiea79ac142015-02-27 21:17:42 +0000145 %1 = load <8 x i16>, <8 x i16>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000146 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000147 %2 = load <8 x i16>, <8 x i16>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000148 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
149 %3 = sub <8 x i16> %1, %2
150 ; CHECK-DAG: subv.h [[R3:\$w[0-9]+]], [[R1]], [[R2]]
151 store <8 x i16> %3, <8 x i16>* %c
152 ; CHECK-DAG: st.h [[R3]], 0($4)
153
154 ret void
155 ; CHECK: .size sub_v8i16
156}
157
158define void @sub_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
159 ; CHECK: sub_v4i32:
160
David Blaikiea79ac142015-02-27 21:17:42 +0000161 %1 = load <4 x i32>, <4 x i32>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000162 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000163 %2 = load <4 x i32>, <4 x i32>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000164 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
165 %3 = sub <4 x i32> %1, %2
166 ; CHECK-DAG: subv.w [[R3:\$w[0-9]+]], [[R1]], [[R2]]
167 store <4 x i32> %3, <4 x i32>* %c
168 ; CHECK-DAG: st.w [[R3]], 0($4)
169
170 ret void
171 ; CHECK: .size sub_v4i32
172}
173
174define void @sub_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
175 ; CHECK: sub_v2i64:
176
David Blaikiea79ac142015-02-27 21:17:42 +0000177 %1 = load <2 x i64>, <2 x i64>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000178 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000179 %2 = load <2 x i64>, <2 x i64>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000180 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
181 %3 = sub <2 x i64> %1, %2
182 ; CHECK-DAG: subv.d [[R3:\$w[0-9]+]], [[R1]], [[R2]]
183 store <2 x i64> %3, <2 x i64>* %c
184 ; CHECK-DAG: st.d [[R3]], 0($4)
185
186 ret void
187 ; CHECK: .size sub_v2i64
188}
189
Daniel Sanders86d0c8d2013-09-23 14:29:55 +0000190define void @sub_v16i8_i(<16 x i8>* %c, <16 x i8>* %a) nounwind {
191 ; CHECK: sub_v16i8_i:
192
David Blaikiea79ac142015-02-27 21:17:42 +0000193 %1 = load <16 x i8>, <16 x i8>* %a
Daniel Sanders86d0c8d2013-09-23 14:29:55 +0000194 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
Daniel Sanders3ce56622013-09-24 12:18:31 +0000195 %2 = sub <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1,
196 i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
Daniel Sanders86d0c8d2013-09-23 14:29:55 +0000197 ; CHECK-DAG: subvi.b [[R3:\$w[0-9]+]], [[R1]], 1
198 store <16 x i8> %2, <16 x i8>* %c
199 ; CHECK-DAG: st.b [[R3]], 0($4)
200
201 ret void
202 ; CHECK: .size sub_v16i8_i
203}
204
205define void @sub_v8i16_i(<8 x i16>* %c, <8 x i16>* %a) nounwind {
206 ; CHECK: sub_v8i16_i:
207
David Blaikiea79ac142015-02-27 21:17:42 +0000208 %1 = load <8 x i16>, <8 x i16>* %a
Daniel Sanders86d0c8d2013-09-23 14:29:55 +0000209 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
Daniel Sanders3ce56622013-09-24 12:18:31 +0000210 %2 = sub <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1,
211 i16 1, i16 1, i16 1, i16 1>
Daniel Sanders86d0c8d2013-09-23 14:29:55 +0000212 ; CHECK-DAG: subvi.h [[R3:\$w[0-9]+]], [[R1]], 1
213 store <8 x i16> %2, <8 x i16>* %c
214 ; CHECK-DAG: st.h [[R3]], 0($4)
215
216 ret void
217 ; CHECK: .size sub_v8i16_i
218}
219
220define void @sub_v4i32_i(<4 x i32>* %c, <4 x i32>* %a) nounwind {
221 ; CHECK: sub_v4i32_i:
222
David Blaikiea79ac142015-02-27 21:17:42 +0000223 %1 = load <4 x i32>, <4 x i32>* %a
Daniel Sanders86d0c8d2013-09-23 14:29:55 +0000224 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
225 %2 = sub <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1>
226 ; CHECK-DAG: subvi.w [[R3:\$w[0-9]+]], [[R1]], 1
227 store <4 x i32> %2, <4 x i32>* %c
228 ; CHECK-DAG: st.w [[R3]], 0($4)
229
230 ret void
231 ; CHECK: .size sub_v4i32_i
232}
233
234define void @sub_v2i64_i(<2 x i64>* %c, <2 x i64>* %a) nounwind {
235 ; CHECK: sub_v2i64_i:
236
David Blaikiea79ac142015-02-27 21:17:42 +0000237 %1 = load <2 x i64>, <2 x i64>* %a
Daniel Sanders86d0c8d2013-09-23 14:29:55 +0000238 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
239 %2 = sub <2 x i64> %1, <i64 1, i64 1>
240 ; CHECK-DAG: subvi.d [[R3:\$w[0-9]+]], [[R1]], 1
241 store <2 x i64> %2, <2 x i64>* %c
242 ; CHECK-DAG: st.d [[R3]], 0($4)
243
244 ret void
245 ; CHECK: .size sub_v2i64_i
246}
247
Daniel Sanders7fab9122013-09-11 12:39:25 +0000248define void @mul_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
249 ; CHECK: mul_v16i8:
250
David Blaikiea79ac142015-02-27 21:17:42 +0000251 %1 = load <16 x i8>, <16 x i8>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000252 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000253 %2 = load <16 x i8>, <16 x i8>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000254 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
255 %3 = mul <16 x i8> %1, %2
256 ; CHECK-DAG: mulv.b [[R3:\$w[0-9]+]], [[R1]], [[R2]]
257 store <16 x i8> %3, <16 x i8>* %c
258 ; CHECK-DAG: st.b [[R3]], 0($4)
259
260 ret void
261 ; CHECK: .size mul_v16i8
262}
263
264define void @mul_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
265 ; CHECK: mul_v8i16:
266
David Blaikiea79ac142015-02-27 21:17:42 +0000267 %1 = load <8 x i16>, <8 x i16>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000268 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000269 %2 = load <8 x i16>, <8 x i16>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000270 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
271 %3 = mul <8 x i16> %1, %2
272 ; CHECK-DAG: mulv.h [[R3:\$w[0-9]+]], [[R1]], [[R2]]
273 store <8 x i16> %3, <8 x i16>* %c
274 ; CHECK-DAG: st.h [[R3]], 0($4)
275
276 ret void
277 ; CHECK: .size mul_v8i16
278}
279
280define void @mul_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
281 ; CHECK: mul_v4i32:
282
David Blaikiea79ac142015-02-27 21:17:42 +0000283 %1 = load <4 x i32>, <4 x i32>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000284 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000285 %2 = load <4 x i32>, <4 x i32>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000286 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
287 %3 = mul <4 x i32> %1, %2
288 ; CHECK-DAG: mulv.w [[R3:\$w[0-9]+]], [[R1]], [[R2]]
289 store <4 x i32> %3, <4 x i32>* %c
290 ; CHECK-DAG: st.w [[R3]], 0($4)
291
292 ret void
293 ; CHECK: .size mul_v4i32
294}
295
296define void @mul_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
297 ; CHECK: mul_v2i64:
298
David Blaikiea79ac142015-02-27 21:17:42 +0000299 %1 = load <2 x i64>, <2 x i64>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000300 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000301 %2 = load <2 x i64>, <2 x i64>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000302 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
303 %3 = mul <2 x i64> %1, %2
304 ; CHECK-DAG: mulv.d [[R3:\$w[0-9]+]], [[R1]], [[R2]]
305 store <2 x i64> %3, <2 x i64>* %c
306 ; CHECK-DAG: st.d [[R3]], 0($4)
307
308 ret void
309 ; CHECK: .size mul_v2i64
310}
311
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000312define void @maddv_v16i8(<16 x i8>* %d, <16 x i8>* %a, <16 x i8>* %b,
313 <16 x i8>* %c) nounwind {
314 ; CHECK: maddv_v16i8:
315
David Blaikiea79ac142015-02-27 21:17:42 +0000316 %1 = load <16 x i8>, <16 x i8>* %a
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000317 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000318 %2 = load <16 x i8>, <16 x i8>* %b
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000319 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
David Blaikiea79ac142015-02-27 21:17:42 +0000320 %3 = load <16 x i8>, <16 x i8>* %c
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000321 ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0($7)
322 %4 = mul <16 x i8> %2, %3
323 %5 = add <16 x i8> %4, %1
324 ; CHECK-DAG: maddv.b [[R1]], [[R2]], [[R3]]
325 store <16 x i8> %5, <16 x i8>* %d
326 ; CHECK-DAG: st.b [[R1]], 0($4)
327
328 ret void
329 ; CHECK: .size maddv_v16i8
330}
331
332define void @maddv_v8i16(<8 x i16>* %d, <8 x i16>* %a, <8 x i16>* %b,
333 <8 x i16>* %c) nounwind {
334 ; CHECK: maddv_v8i16:
335
David Blaikiea79ac142015-02-27 21:17:42 +0000336 %1 = load <8 x i16>, <8 x i16>* %a
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000337 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000338 %2 = load <8 x i16>, <8 x i16>* %b
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000339 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
David Blaikiea79ac142015-02-27 21:17:42 +0000340 %3 = load <8 x i16>, <8 x i16>* %c
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000341 ; CHECK-DAG: ld.h [[R3:\$w[0-9]+]], 0($7)
342 %4 = mul <8 x i16> %2, %3
343 %5 = add <8 x i16> %4, %1
344 ; CHECK-DAG: maddv.h [[R1]], [[R2]], [[R3]]
345 store <8 x i16> %5, <8 x i16>* %d
346 ; CHECK-DAG: st.h [[R1]], 0($4)
347
348 ret void
349 ; CHECK: .size maddv_v8i16
350}
351
352define void @maddv_v4i32(<4 x i32>* %d, <4 x i32>* %a, <4 x i32>* %b,
353 <4 x i32>* %c) nounwind {
354 ; CHECK: maddv_v4i32:
355
David Blaikiea79ac142015-02-27 21:17:42 +0000356 %1 = load <4 x i32>, <4 x i32>* %a
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000357 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000358 %2 = load <4 x i32>, <4 x i32>* %b
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000359 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
David Blaikiea79ac142015-02-27 21:17:42 +0000360 %3 = load <4 x i32>, <4 x i32>* %c
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000361 ; CHECK-DAG: ld.w [[R3:\$w[0-9]+]], 0($7)
362 %4 = mul <4 x i32> %2, %3
363 %5 = add <4 x i32> %4, %1
364 ; CHECK-DAG: maddv.w [[R1]], [[R2]], [[R3]]
365 store <4 x i32> %5, <4 x i32>* %d
366 ; CHECK-DAG: st.w [[R1]], 0($4)
367
368 ret void
369 ; CHECK: .size maddv_v4i32
370}
371
372define void @maddv_v2i64(<2 x i64>* %d, <2 x i64>* %a, <2 x i64>* %b,
373 <2 x i64>* %c) nounwind {
374 ; CHECK: maddv_v2i64:
375
David Blaikiea79ac142015-02-27 21:17:42 +0000376 %1 = load <2 x i64>, <2 x i64>* %a
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000377 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000378 %2 = load <2 x i64>, <2 x i64>* %b
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000379 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
David Blaikiea79ac142015-02-27 21:17:42 +0000380 %3 = load <2 x i64>, <2 x i64>* %c
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000381 ; CHECK-DAG: ld.d [[R3:\$w[0-9]+]], 0($7)
382 %4 = mul <2 x i64> %2, %3
383 %5 = add <2 x i64> %4, %1
384 ; CHECK-DAG: maddv.d [[R1]], [[R2]], [[R3]]
385 store <2 x i64> %5, <2 x i64>* %d
386 ; CHECK-DAG: st.d [[R1]], 0($4)
387
388 ret void
389 ; CHECK: .size maddv_v2i64
390}
391
392define void @msubv_v16i8(<16 x i8>* %d, <16 x i8>* %a, <16 x i8>* %b,
393 <16 x i8>* %c) nounwind {
394 ; CHECK: msubv_v16i8:
395
David Blaikiea79ac142015-02-27 21:17:42 +0000396 %1 = load <16 x i8>, <16 x i8>* %a
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000397 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000398 %2 = load <16 x i8>, <16 x i8>* %b
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000399 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
David Blaikiea79ac142015-02-27 21:17:42 +0000400 %3 = load <16 x i8>, <16 x i8>* %c
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000401 ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0($7)
402 %4 = mul <16 x i8> %2, %3
403 %5 = sub <16 x i8> %1, %4
404 ; CHECK-DAG: msubv.b [[R1]], [[R2]], [[R3]]
405 store <16 x i8> %5, <16 x i8>* %d
406 ; CHECK-DAG: st.b [[R1]], 0($4)
407
408 ret void
409 ; CHECK: .size msubv_v16i8
410}
411
412define void @msubv_v8i16(<8 x i16>* %d, <8 x i16>* %a, <8 x i16>* %b,
413 <8 x i16>* %c) nounwind {
414 ; CHECK: msubv_v8i16:
415
David Blaikiea79ac142015-02-27 21:17:42 +0000416 %1 = load <8 x i16>, <8 x i16>* %a
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000417 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000418 %2 = load <8 x i16>, <8 x i16>* %b
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000419 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
David Blaikiea79ac142015-02-27 21:17:42 +0000420 %3 = load <8 x i16>, <8 x i16>* %c
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000421 ; CHECK-DAG: ld.h [[R3:\$w[0-9]+]], 0($7)
422 %4 = mul <8 x i16> %2, %3
423 %5 = sub <8 x i16> %1, %4
424 ; CHECK-DAG: msubv.h [[R1]], [[R2]], [[R3]]
425 store <8 x i16> %5, <8 x i16>* %d
426 ; CHECK-DAG: st.h [[R1]], 0($4)
427
428 ret void
429 ; CHECK: .size msubv_v8i16
430}
431
432define void @msubv_v4i32(<4 x i32>* %d, <4 x i32>* %a, <4 x i32>* %b,
433 <4 x i32>* %c) nounwind {
434 ; CHECK: msubv_v4i32:
435
David Blaikiea79ac142015-02-27 21:17:42 +0000436 %1 = load <4 x i32>, <4 x i32>* %a
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000437 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000438 %2 = load <4 x i32>, <4 x i32>* %b
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000439 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
David Blaikiea79ac142015-02-27 21:17:42 +0000440 %3 = load <4 x i32>, <4 x i32>* %c
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000441 ; CHECK-DAG: ld.w [[R3:\$w[0-9]+]], 0($7)
442 %4 = mul <4 x i32> %2, %3
443 %5 = sub <4 x i32> %1, %4
444 ; CHECK-DAG: msubv.w [[R1]], [[R2]], [[R3]]
445 store <4 x i32> %5, <4 x i32>* %d
446 ; CHECK-DAG: st.w [[R1]], 0($4)
447
448 ret void
449 ; CHECK: .size msubv_v4i32
450}
451
452define void @msubv_v2i64(<2 x i64>* %d, <2 x i64>* %a, <2 x i64>* %b,
453 <2 x i64>* %c) nounwind {
454 ; CHECK: msubv_v2i64:
455
David Blaikiea79ac142015-02-27 21:17:42 +0000456 %1 = load <2 x i64>, <2 x i64>* %a
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000457 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000458 %2 = load <2 x i64>, <2 x i64>* %b
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000459 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
David Blaikiea79ac142015-02-27 21:17:42 +0000460 %3 = load <2 x i64>, <2 x i64>* %c
Daniel Sanders50e5ed32013-10-11 10:50:42 +0000461 ; CHECK-DAG: ld.d [[R3:\$w[0-9]+]], 0($7)
462 %4 = mul <2 x i64> %2, %3
463 %5 = sub <2 x i64> %1, %4
464 ; CHECK-DAG: msubv.d [[R1]], [[R2]], [[R3]]
465 store <2 x i64> %5, <2 x i64>* %d
466 ; CHECK-DAG: st.d [[R1]], 0($4)
467
468 ret void
469 ; CHECK: .size msubv_v2i64
470}
471
Daniel Sanders7fab9122013-09-11 12:39:25 +0000472define void @div_s_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
473 ; CHECK: div_s_v16i8:
474
David Blaikiea79ac142015-02-27 21:17:42 +0000475 %1 = load <16 x i8>, <16 x i8>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000476 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000477 %2 = load <16 x i8>, <16 x i8>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000478 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
479 %3 = sdiv <16 x i8> %1, %2
480 ; CHECK-DAG: div_s.b [[R3:\$w[0-9]+]], [[R1]], [[R2]]
481 store <16 x i8> %3, <16 x i8>* %c
482 ; CHECK-DAG: st.b [[R3]], 0($4)
483
484 ret void
485 ; CHECK: .size div_s_v16i8
486}
487
488define void @div_s_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
489 ; CHECK: div_s_v8i16:
490
David Blaikiea79ac142015-02-27 21:17:42 +0000491 %1 = load <8 x i16>, <8 x i16>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000492 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000493 %2 = load <8 x i16>, <8 x i16>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000494 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
495 %3 = sdiv <8 x i16> %1, %2
496 ; CHECK-DAG: div_s.h [[R3:\$w[0-9]+]], [[R1]], [[R2]]
497 store <8 x i16> %3, <8 x i16>* %c
498 ; CHECK-DAG: st.h [[R3]], 0($4)
499
500 ret void
501 ; CHECK: .size div_s_v8i16
502}
503
504define void @div_s_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
505 ; CHECK: div_s_v4i32:
506
David Blaikiea79ac142015-02-27 21:17:42 +0000507 %1 = load <4 x i32>, <4 x i32>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000508 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000509 %2 = load <4 x i32>, <4 x i32>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000510 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
511 %3 = sdiv <4 x i32> %1, %2
512 ; CHECK-DAG: div_s.w [[R3:\$w[0-9]+]], [[R1]], [[R2]]
513 store <4 x i32> %3, <4 x i32>* %c
514 ; CHECK-DAG: st.w [[R3]], 0($4)
515
516 ret void
517 ; CHECK: .size div_s_v4i32
518}
519
520define void @div_s_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
521 ; CHECK: div_s_v2i64:
522
David Blaikiea79ac142015-02-27 21:17:42 +0000523 %1 = load <2 x i64>, <2 x i64>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000524 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000525 %2 = load <2 x i64>, <2 x i64>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000526 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
527 %3 = sdiv <2 x i64> %1, %2
528 ; CHECK-DAG: div_s.d [[R3:\$w[0-9]+]], [[R1]], [[R2]]
529 store <2 x i64> %3, <2 x i64>* %c
530 ; CHECK-DAG: st.d [[R3]], 0($4)
531
532 ret void
533 ; CHECK: .size div_s_v2i64
534}
535
536define void @div_u_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
537 ; CHECK: div_u_v16i8:
538
David Blaikiea79ac142015-02-27 21:17:42 +0000539 %1 = load <16 x i8>, <16 x i8>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000540 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000541 %2 = load <16 x i8>, <16 x i8>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000542 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
543 %3 = udiv <16 x i8> %1, %2
544 ; CHECK-DAG: div_u.b [[R3:\$w[0-9]+]], [[R1]], [[R2]]
545 store <16 x i8> %3, <16 x i8>* %c
546 ; CHECK-DAG: st.b [[R3]], 0($4)
547
548 ret void
549 ; CHECK: .size div_u_v16i8
550}
551
552define void @div_u_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
553 ; CHECK: div_u_v8i16:
554
David Blaikiea79ac142015-02-27 21:17:42 +0000555 %1 = load <8 x i16>, <8 x i16>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000556 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000557 %2 = load <8 x i16>, <8 x i16>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000558 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
559 %3 = udiv <8 x i16> %1, %2
560 ; CHECK-DAG: div_u.h [[R3:\$w[0-9]+]], [[R1]], [[R2]]
561 store <8 x i16> %3, <8 x i16>* %c
562 ; CHECK-DAG: st.h [[R3]], 0($4)
563
564 ret void
565 ; CHECK: .size div_u_v8i16
566}
567
568define void @div_u_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
569 ; CHECK: div_u_v4i32:
570
David Blaikiea79ac142015-02-27 21:17:42 +0000571 %1 = load <4 x i32>, <4 x i32>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000572 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000573 %2 = load <4 x i32>, <4 x i32>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000574 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
575 %3 = udiv <4 x i32> %1, %2
576 ; CHECK-DAG: div_u.w [[R3:\$w[0-9]+]], [[R1]], [[R2]]
577 store <4 x i32> %3, <4 x i32>* %c
578 ; CHECK-DAG: st.w [[R3]], 0($4)
579
580 ret void
581 ; CHECK: .size div_u_v4i32
582}
583
584define void @div_u_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
585 ; CHECK: div_u_v2i64:
586
David Blaikiea79ac142015-02-27 21:17:42 +0000587 %1 = load <2 x i64>, <2 x i64>* %a
Daniel Sanders7fab9122013-09-11 12:39:25 +0000588 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000589 %2 = load <2 x i64>, <2 x i64>* %b
Daniel Sanders7fab9122013-09-11 12:39:25 +0000590 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
591 %3 = udiv <2 x i64> %1, %2
592 ; CHECK-DAG: div_u.d [[R3:\$w[0-9]+]], [[R1]], [[R2]]
593 store <2 x i64> %3, <2 x i64>* %c
594 ; CHECK-DAG: st.d [[R3]], 0($4)
595
596 ret void
597 ; CHECK: .size div_u_v2i64
598}
Daniel Sanders0210dd42013-10-01 10:22:35 +0000599
600define void @mod_s_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
601 ; CHECK: mod_s_v16i8:
602
David Blaikiea79ac142015-02-27 21:17:42 +0000603 %1 = load <16 x i8>, <16 x i8>* %a
Daniel Sanders0210dd42013-10-01 10:22:35 +0000604 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000605 %2 = load <16 x i8>, <16 x i8>* %b
Daniel Sanders0210dd42013-10-01 10:22:35 +0000606 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
607 %3 = srem <16 x i8> %1, %2
608 ; CHECK-DAG: mod_s.b [[R3:\$w[0-9]+]], [[R1]], [[R2]]
609 store <16 x i8> %3, <16 x i8>* %c
610 ; CHECK-DAG: st.b [[R3]], 0($4)
611
612 ret void
613 ; CHECK: .size mod_s_v16i8
614}
615
616define void @mod_s_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
617 ; CHECK: mod_s_v8i16:
618
David Blaikiea79ac142015-02-27 21:17:42 +0000619 %1 = load <8 x i16>, <8 x i16>* %a
Daniel Sanders0210dd42013-10-01 10:22:35 +0000620 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000621 %2 = load <8 x i16>, <8 x i16>* %b
Daniel Sanders0210dd42013-10-01 10:22:35 +0000622 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
623 %3 = srem <8 x i16> %1, %2
624 ; CHECK-DAG: mod_s.h [[R3:\$w[0-9]+]], [[R1]], [[R2]]
625 store <8 x i16> %3, <8 x i16>* %c
626 ; CHECK-DAG: st.h [[R3]], 0($4)
627
628 ret void
629 ; CHECK: .size mod_s_v8i16
630}
631
632define void @mod_s_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
633 ; CHECK: mod_s_v4i32:
634
David Blaikiea79ac142015-02-27 21:17:42 +0000635 %1 = load <4 x i32>, <4 x i32>* %a
Daniel Sanders0210dd42013-10-01 10:22:35 +0000636 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000637 %2 = load <4 x i32>, <4 x i32>* %b
Daniel Sanders0210dd42013-10-01 10:22:35 +0000638 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
639 %3 = srem <4 x i32> %1, %2
640 ; CHECK-DAG: mod_s.w [[R3:\$w[0-9]+]], [[R1]], [[R2]]
641 store <4 x i32> %3, <4 x i32>* %c
642 ; CHECK-DAG: st.w [[R3]], 0($4)
643
644 ret void
645 ; CHECK: .size mod_s_v4i32
646}
647
648define void @mod_s_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
649 ; CHECK: mod_s_v2i64:
650
David Blaikiea79ac142015-02-27 21:17:42 +0000651 %1 = load <2 x i64>, <2 x i64>* %a
Daniel Sanders0210dd42013-10-01 10:22:35 +0000652 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000653 %2 = load <2 x i64>, <2 x i64>* %b
Daniel Sanders0210dd42013-10-01 10:22:35 +0000654 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
655 %3 = srem <2 x i64> %1, %2
656 ; CHECK-DAG: mod_s.d [[R3:\$w[0-9]+]], [[R1]], [[R2]]
657 store <2 x i64> %3, <2 x i64>* %c
658 ; CHECK-DAG: st.d [[R3]], 0($4)
659
660 ret void
661 ; CHECK: .size mod_s_v2i64
662}
663
664define void @mod_u_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind {
665 ; CHECK: mod_u_v16i8:
666
David Blaikiea79ac142015-02-27 21:17:42 +0000667 %1 = load <16 x i8>, <16 x i8>* %a
Daniel Sanders0210dd42013-10-01 10:22:35 +0000668 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000669 %2 = load <16 x i8>, <16 x i8>* %b
Daniel Sanders0210dd42013-10-01 10:22:35 +0000670 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6)
671 %3 = urem <16 x i8> %1, %2
672 ; CHECK-DAG: mod_u.b [[R3:\$w[0-9]+]], [[R1]], [[R2]]
673 store <16 x i8> %3, <16 x i8>* %c
674 ; CHECK-DAG: st.b [[R3]], 0($4)
675
676 ret void
677 ; CHECK: .size mod_u_v16i8
678}
679
680define void @mod_u_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind {
681 ; CHECK: mod_u_v8i16:
682
David Blaikiea79ac142015-02-27 21:17:42 +0000683 %1 = load <8 x i16>, <8 x i16>* %a
Daniel Sanders0210dd42013-10-01 10:22:35 +0000684 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000685 %2 = load <8 x i16>, <8 x i16>* %b
Daniel Sanders0210dd42013-10-01 10:22:35 +0000686 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6)
687 %3 = urem <8 x i16> %1, %2
688 ; CHECK-DAG: mod_u.h [[R3:\$w[0-9]+]], [[R1]], [[R2]]
689 store <8 x i16> %3, <8 x i16>* %c
690 ; CHECK-DAG: st.h [[R3]], 0($4)
691
692 ret void
693 ; CHECK: .size mod_u_v8i16
694}
695
696define void @mod_u_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind {
697 ; CHECK: mod_u_v4i32:
698
David Blaikiea79ac142015-02-27 21:17:42 +0000699 %1 = load <4 x i32>, <4 x i32>* %a
Daniel Sanders0210dd42013-10-01 10:22:35 +0000700 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000701 %2 = load <4 x i32>, <4 x i32>* %b
Daniel Sanders0210dd42013-10-01 10:22:35 +0000702 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6)
703 %3 = urem <4 x i32> %1, %2
704 ; CHECK-DAG: mod_u.w [[R3:\$w[0-9]+]], [[R1]], [[R2]]
705 store <4 x i32> %3, <4 x i32>* %c
706 ; CHECK-DAG: st.w [[R3]], 0($4)
707
708 ret void
709 ; CHECK: .size mod_u_v4i32
710}
711
712define void @mod_u_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind {
713 ; CHECK: mod_u_v2i64:
714
David Blaikiea79ac142015-02-27 21:17:42 +0000715 %1 = load <2 x i64>, <2 x i64>* %a
Daniel Sanders0210dd42013-10-01 10:22:35 +0000716 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5)
David Blaikiea79ac142015-02-27 21:17:42 +0000717 %2 = load <2 x i64>, <2 x i64>* %b
Daniel Sanders0210dd42013-10-01 10:22:35 +0000718 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6)
719 %3 = urem <2 x i64> %1, %2
720 ; CHECK-DAG: mod_u.d [[R3:\$w[0-9]+]], [[R1]], [[R2]]
721 store <2 x i64> %3, <2 x i64>* %c
722 ; CHECK-DAG: st.d [[R3]], 0($4)
723
724 ret void
725 ; CHECK: .size mod_u_v2i64
726}