[FastISel][AArch64] Optimize compare-and-branch for i1 to use 'tbz'.
[oota-llvm.git] / test / CodeGen / AArch64 / arm64-neon-mul-div.ll
1 ; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-none-linux-gnu -mattr=+neon | FileCheck %s
2 ; arm64 has its own copy of this because of the intrinsics
3
4 define <8 x i8> @mul8xi8(<8 x i8> %A, <8 x i8> %B) {
5 ; CHECK-LABEL: mul8xi8:
6 ; CHECK: mul {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
7         %tmp3 = mul <8 x i8> %A, %B;
8         ret <8 x i8> %tmp3
9 }
10
11 define <16 x i8> @mul16xi8(<16 x i8> %A, <16 x i8> %B) {
12 ; CHECK-LABEL: mul16xi8:
13 ; CHECK: mul {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
14         %tmp3 = mul <16 x i8> %A, %B;
15         ret <16 x i8> %tmp3
16 }
17
18 define <4 x i16> @mul4xi16(<4 x i16> %A, <4 x i16> %B) {
19 ; CHECK-LABEL: mul4xi16:
20 ; CHECK: mul {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
21         %tmp3 = mul <4 x i16> %A, %B;
22         ret <4 x i16> %tmp3
23 }
24
25 define <8 x i16> @mul8xi16(<8 x i16> %A, <8 x i16> %B) {
26 ; CHECK-LABEL: mul8xi16:
27 ; CHECK: mul {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
28         %tmp3 = mul <8 x i16> %A, %B;
29         ret <8 x i16> %tmp3
30 }
31
32 define <2 x i32> @mul2xi32(<2 x i32> %A, <2 x i32> %B) {
33 ; CHECK-LABEL: mul2xi32:
34 ; CHECK: mul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
35         %tmp3 = mul <2 x i32> %A, %B;
36         ret <2 x i32> %tmp3
37 }
38
39 define <4 x i32> @mul4x32(<4 x i32> %A, <4 x i32> %B) {
40 ; CHECK-LABEL: mul4x32:
41 ; CHECK: mul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
42         %tmp3 = mul <4 x i32> %A, %B;
43         ret <4 x i32> %tmp3
44 }
45
46 define <1 x i64> @mul1xi64(<1 x i64> %A, <1 x i64> %B) {
47 ; CHECK-LABEL: mul1xi64:
48 ; CHECK: mul x{{[0-9]+}}, x{{[0-9]+}}, x{{[0-9]+}}
49   %tmp3 = mul <1 x i64> %A, %B;
50   ret <1 x i64> %tmp3
51 }
52
53 define <2 x i64> @mul2xi64(<2 x i64> %A, <2 x i64> %B) {
54 ; CHECK-LABEL: mul2xi64:
55 ; CHECK: mul x{{[0-9]+}}, x{{[0-9]+}}, x{{[0-9]+}}
56 ; CHECK: mul x{{[0-9]+}}, x{{[0-9]+}}, x{{[0-9]+}}
57   %tmp3 = mul <2 x i64> %A, %B;
58   ret <2 x i64> %tmp3
59 }
60
61  define <2 x float> @mul2xfloat(<2 x float> %A, <2 x float> %B) {
62 ; CHECK-LABEL: mul2xfloat:
63 ; CHECK: fmul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
64         %tmp3 = fmul <2 x float> %A, %B;
65         ret <2 x float> %tmp3
66 }
67
68 define <4 x float> @mul4xfloat(<4 x float> %A, <4 x float> %B) {
69 ; CHECK-LABEL: mul4xfloat:
70 ; CHECK: fmul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
71         %tmp3 = fmul <4 x float> %A, %B;
72         ret <4 x float> %tmp3
73 }
74 define <2 x double> @mul2xdouble(<2 x double> %A, <2 x double> %B) {
75 ; CHECK-LABEL: mul2xdouble:
76 ; CHECK: fmul {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
77         %tmp3 = fmul <2 x double> %A, %B;
78         ret <2 x double> %tmp3
79 }
80
81
82  define <2 x float> @div2xfloat(<2 x float> %A, <2 x float> %B) {
83 ; CHECK-LABEL: div2xfloat:
84 ; CHECK: fdiv {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
85         %tmp3 = fdiv <2 x float> %A, %B;
86         ret <2 x float> %tmp3
87 }
88
89 define <4 x float> @div4xfloat(<4 x float> %A, <4 x float> %B) {
90 ; CHECK-LABEL: div4xfloat:
91 ; CHECK: fdiv {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
92         %tmp3 = fdiv <4 x float> %A, %B;
93         ret <4 x float> %tmp3
94 }
95 define <2 x double> @div2xdouble(<2 x double> %A, <2 x double> %B) {
96 ; CHECK-LABEL: div2xdouble:
97 ; CHECK: fdiv {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
98         %tmp3 = fdiv <2 x double> %A, %B;
99         ret <2 x double> %tmp3
100 }
101
102 define <1 x i8> @sdiv1x8(<1 x i8> %A, <1 x i8> %B) {
103 ; CHECK-LABEL: sdiv1x8:
104 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
105         %tmp3 = sdiv <1 x i8> %A, %B;
106         ret <1 x i8> %tmp3
107 }
108
109 define <8 x i8> @sdiv8x8(<8 x i8> %A, <8 x i8> %B) {
110 ; CHECK-LABEL: sdiv8x8:
111 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
112 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
113 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
114 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
115 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
116 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
117 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
118 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
119         %tmp3 = sdiv <8 x i8> %A, %B;
120         ret <8 x i8> %tmp3
121 }
122
123 define <16 x i8> @sdiv16x8(<16 x i8> %A, <16 x i8> %B) {
124 ; CHECK-LABEL: sdiv16x8:
125 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
126 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
127 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
128 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
129 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
130 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
131 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
132 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
133 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
134 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
135 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
136 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
137 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
138 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
139 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
140 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
141         %tmp3 = sdiv <16 x i8> %A, %B;
142         ret <16 x i8> %tmp3
143 }
144
145 define <1 x i16> @sdiv1x16(<1 x i16> %A, <1 x i16> %B) {
146 ; CHECK-LABEL: sdiv1x16:
147 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
148         %tmp3 = sdiv <1 x i16> %A, %B;
149         ret <1 x i16> %tmp3
150 }
151
152 define <4 x i16> @sdiv4x16(<4 x i16> %A, <4 x i16> %B) {
153 ; CHECK-LABEL: sdiv4x16:
154 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
155 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
156 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
157 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
158         %tmp3 = sdiv <4 x i16> %A, %B;
159         ret <4 x i16> %tmp3
160 }
161
162 define <8 x i16> @sdiv8x16(<8 x i16> %A, <8 x i16> %B) {
163 ; CHECK-LABEL: sdiv8x16:
164 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
165 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
166 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
167 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
168 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
169 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
170 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
171 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
172         %tmp3 = sdiv <8 x i16> %A, %B;
173         ret <8 x i16> %tmp3
174 }
175
176 define <1 x i32> @sdiv1x32(<1 x i32> %A, <1 x i32> %B) {
177 ; CHECK-LABEL: sdiv1x32:
178 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
179         %tmp3 = sdiv <1 x i32> %A, %B;
180         ret <1 x i32> %tmp3
181 }
182
183 define <2 x i32> @sdiv2x32(<2 x i32> %A, <2 x i32> %B) {
184 ; CHECK-LABEL: sdiv2x32:
185 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
186 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
187         %tmp3 = sdiv <2 x i32> %A, %B;
188         ret <2 x i32> %tmp3
189 }
190
191 define <4 x i32> @sdiv4x32(<4 x i32> %A, <4 x i32> %B) {
192 ; CHECK-LABEL: sdiv4x32:
193 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
194 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
195 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
196 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
197         %tmp3 = sdiv <4 x i32> %A, %B;
198         ret <4 x i32> %tmp3
199 }
200
201 define <1 x i64> @sdiv1x64(<1 x i64> %A, <1 x i64> %B) {
202 ; CHECK-LABEL: sdiv1x64:
203 ; CHECK: sdiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
204         %tmp3 = sdiv <1 x i64> %A, %B;
205         ret <1 x i64> %tmp3
206 }
207
208 define <2 x i64> @sdiv2x64(<2 x i64> %A, <2 x i64> %B) {
209 ; CHECK-LABEL: sdiv2x64:
210 ; CHECK: sdiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
211 ; CHECK: sdiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
212         %tmp3 = sdiv <2 x i64> %A, %B;
213         ret <2 x i64> %tmp3
214 }
215
216 define <1 x i8> @udiv1x8(<1 x i8> %A, <1 x i8> %B) {
217 ; CHECK-LABEL: udiv1x8:
218 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
219         %tmp3 = udiv <1 x i8> %A, %B;
220         ret <1 x i8> %tmp3
221 }
222
223 define <8 x i8> @udiv8x8(<8 x i8> %A, <8 x i8> %B) {
224 ; CHECK-LABEL: udiv8x8:
225 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
226 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
227 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
228 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
229 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
230 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
231 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
232 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
233         %tmp3 = udiv <8 x i8> %A, %B;
234         ret <8 x i8> %tmp3
235 }
236
237 define <16 x i8> @udiv16x8(<16 x i8> %A, <16 x i8> %B) {
238 ; CHECK-LABEL: udiv16x8:
239 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
240 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
241 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
242 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
243 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
244 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
245 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
246 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
247 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
248 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
249 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
250 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
251 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
252 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
253 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
254 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
255         %tmp3 = udiv <16 x i8> %A, %B;
256         ret <16 x i8> %tmp3
257 }
258
259 define <1 x i16> @udiv1x16(<1 x i16> %A, <1 x i16> %B) {
260 ; CHECK-LABEL: udiv1x16:
261 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
262         %tmp3 = udiv <1 x i16> %A, %B;
263         ret <1 x i16> %tmp3
264 }
265
266 define <4 x i16> @udiv4x16(<4 x i16> %A, <4 x i16> %B) {
267 ; CHECK-LABEL: udiv4x16:
268 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
269 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
270 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
271 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
272         %tmp3 = udiv <4 x i16> %A, %B;
273         ret <4 x i16> %tmp3
274 }
275
276 define <8 x i16> @udiv8x16(<8 x i16> %A, <8 x i16> %B) {
277 ; CHECK-LABEL: udiv8x16:
278 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
279 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
280 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
281 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
282 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
283 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
284 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
285 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
286         %tmp3 = udiv <8 x i16> %A, %B;
287         ret <8 x i16> %tmp3
288 }
289
290 define <1 x i32> @udiv1x32(<1 x i32> %A, <1 x i32> %B) {
291 ; CHECK-LABEL: udiv1x32:
292 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
293         %tmp3 = udiv <1 x i32> %A, %B;
294         ret <1 x i32> %tmp3
295 }
296
297 define <2 x i32> @udiv2x32(<2 x i32> %A, <2 x i32> %B) {
298 ; CHECK-LABEL: udiv2x32:
299 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
300 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
301         %tmp3 = udiv <2 x i32> %A, %B;
302         ret <2 x i32> %tmp3
303 }
304
305 define <4 x i32> @udiv4x32(<4 x i32> %A, <4 x i32> %B) {
306 ; CHECK-LABEL: udiv4x32:
307 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
308 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
309 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
310 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
311         %tmp3 = udiv <4 x i32> %A, %B;
312         ret <4 x i32> %tmp3
313 }
314
315 define <1 x i64> @udiv1x64(<1 x i64> %A, <1 x i64> %B) {
316 ; CHECK-LABEL: udiv1x64:
317 ; CHECK: udiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
318         %tmp3 = udiv <1 x i64> %A, %B;
319         ret <1 x i64> %tmp3
320 }
321
322 define <2 x i64> @udiv2x64(<2 x i64> %A, <2 x i64> %B) {
323 ; CHECK-LABEL: udiv2x64:
324 ; CHECK: udiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
325 ; CHECK: udiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
326         %tmp3 = udiv <2 x i64> %A, %B;
327         ret <2 x i64> %tmp3
328 }
329
330 define <1 x i8> @srem1x8(<1 x i8> %A, <1 x i8> %B) {
331 ; CHECK-LABEL: srem1x8:
332 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
333 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
334         %tmp3 = srem <1 x i8> %A, %B;
335         ret <1 x i8> %tmp3
336 }
337
338 define <8 x i8> @srem8x8(<8 x i8> %A, <8 x i8> %B) {
339 ; CHECK-LABEL: srem8x8:
340 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
341 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
342 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
343 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
344 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
345 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
346 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
347 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
348 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
349 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
350 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
351 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
352 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
353 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
354 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
355 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
356         %tmp3 = srem <8 x i8> %A, %B;
357         ret <8 x i8> %tmp3
358 }
359
360 define <16 x i8> @srem16x8(<16 x i8> %A, <16 x i8> %B) {
361 ; CHECK-LABEL: srem16x8:
362 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
363 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
364 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
365 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
366 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
367 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
368 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
369 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
370 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
371 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
372 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
373 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
374 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
375 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
376 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
377 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
378 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
379 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
380 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
381 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
382 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
383 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
384 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
385 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
386 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
387 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
388 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
389 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
390 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
391 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
392 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
393 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
394         %tmp3 = srem <16 x i8> %A, %B;
395         ret <16 x i8> %tmp3
396 }
397
398 define <1 x i16> @srem1x16(<1 x i16> %A, <1 x i16> %B) {
399 ; CHECK-LABEL: srem1x16:
400 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
401 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
402         %tmp3 = srem <1 x i16> %A, %B;
403         ret <1 x i16> %tmp3
404 }
405
406 define <4 x i16> @srem4x16(<4 x i16> %A, <4 x i16> %B) {
407 ; CHECK-LABEL: srem4x16:
408 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
409 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
410 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
411 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
412 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
413 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
414 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
415 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
416         %tmp3 = srem <4 x i16> %A, %B;
417         ret <4 x i16> %tmp3
418 }
419
420 define <8 x i16> @srem8x16(<8 x i16> %A, <8 x i16> %B) {
421 ; CHECK-LABEL: srem8x16:
422 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
423 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
424 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
425 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
426 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
427 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
428 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
429 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
430 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
431 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
432 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
433 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
434 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
435 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
436 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
437 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
438         %tmp3 = srem <8 x i16> %A, %B;
439         ret <8 x i16> %tmp3
440 }
441
442 define <1 x i32> @srem1x32(<1 x i32> %A, <1 x i32> %B) {
443 ; CHECK-LABEL: srem1x32:
444 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
445 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
446         %tmp3 = srem <1 x i32> %A, %B;
447         ret <1 x i32> %tmp3
448 }
449
450 define <2 x i32> @srem2x32(<2 x i32> %A, <2 x i32> %B) {
451 ; CHECK-LABEL: srem2x32:
452 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
453 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
454 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
455 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
456         %tmp3 = srem <2 x i32> %A, %B;
457         ret <2 x i32> %tmp3
458 }
459
460 define <4 x i32> @srem4x32(<4 x i32> %A, <4 x i32> %B) {
461 ; CHECK-LABEL: srem4x32:
462 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
463 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
464 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
465 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
466 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
467 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
468 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
469 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
470         %tmp3 = srem <4 x i32> %A, %B;
471         ret <4 x i32> %tmp3
472 }
473
474 define <1 x i64> @srem1x64(<1 x i64> %A, <1 x i64> %B) {
475 ; CHECK-LABEL: srem1x64:
476 ; CHECK: sdiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
477 ; CHECK: msub {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
478         %tmp3 = srem <1 x i64> %A, %B;
479         ret <1 x i64> %tmp3
480 }
481
482 define <2 x i64> @srem2x64(<2 x i64> %A, <2 x i64> %B) {
483 ; CHECK-LABEL: srem2x64:
484 ; CHECK: sdiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
485 ; CHECK: sdiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
486 ; CHECK: msub {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
487 ; CHECK: msub {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
488         %tmp3 = srem <2 x i64> %A, %B;
489         ret <2 x i64> %tmp3
490 }
491
492 define <1 x i8> @urem1x8(<1 x i8> %A, <1 x i8> %B) {
493 ; CHECK-LABEL: urem1x8:
494 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
495 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
496         %tmp3 = urem <1 x i8> %A, %B;
497         ret <1 x i8> %tmp3
498 }
499
500 define <8 x i8> @urem8x8(<8 x i8> %A, <8 x i8> %B) {
501 ; CHECK-LABEL: urem8x8:
502 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
503 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
504 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
505 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
506 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
507 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
508 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
509 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
510 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
511 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
512 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
513 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
514 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
515 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
516 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
517 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
518         %tmp3 = urem <8 x i8> %A, %B;
519         ret <8 x i8> %tmp3
520 }
521
522 define <16 x i8> @urem16x8(<16 x i8> %A, <16 x i8> %B) {
523 ; CHECK-LABEL: urem16x8:
524 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
525 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
526 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
527 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
528 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
529 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
530 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
531 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
532 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
533 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
534 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
535 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
536 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
537 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
538 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
539 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
540 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
541 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
542 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
543 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
544 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
545 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
546 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
547 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
548 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
549 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
550 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
551 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
552 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
553 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
554 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
555 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
556         %tmp3 = urem <16 x i8> %A, %B;
557         ret <16 x i8> %tmp3
558 }
559
560 define <1 x i16> @urem1x16(<1 x i16> %A, <1 x i16> %B) {
561 ; CHECK-LABEL: urem1x16:
562 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
563 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
564         %tmp3 = urem <1 x i16> %A, %B;
565         ret <1 x i16> %tmp3
566 }
567
568 define <4 x i16> @urem4x16(<4 x i16> %A, <4 x i16> %B) {
569 ; CHECK-LABEL: urem4x16:
570 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
571 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
572 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
573 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
574 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
575 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
576 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
577 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
578         %tmp3 = urem <4 x i16> %A, %B;
579         ret <4 x i16> %tmp3
580 }
581
582 define <8 x i16> @urem8x16(<8 x i16> %A, <8 x i16> %B) {
583 ; CHECK-LABEL: urem8x16:
584 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
585 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
586 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
587 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
588 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
589 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
590 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
591 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
592 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
593 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
594 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
595 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
596 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
597 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
598 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
599 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
600         %tmp3 = urem <8 x i16> %A, %B;
601         ret <8 x i16> %tmp3
602 }
603
604 define <1 x i32> @urem1x32(<1 x i32> %A, <1 x i32> %B) {
605 ; CHECK-LABEL: urem1x32:
606 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
607 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
608         %tmp3 = urem <1 x i32> %A, %B;
609         ret <1 x i32> %tmp3
610 }
611
612 define <2 x i32> @urem2x32(<2 x i32> %A, <2 x i32> %B) {
613 ; CHECK-LABEL: urem2x32:
614 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
615 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
616 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
617 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
618         %tmp3 = urem <2 x i32> %A, %B;
619         ret <2 x i32> %tmp3
620 }
621
622 define <4 x i32> @urem4x32(<4 x i32> %A, <4 x i32> %B) {
623 ; CHECK-LABEL: urem4x32:
624 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
625 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
626 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
627 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
628 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
629 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
630 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
631 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
632         %tmp3 = urem <4 x i32> %A, %B;
633         ret <4 x i32> %tmp3
634 }
635
636 define <1 x i64> @urem1x64(<1 x i64> %A, <1 x i64> %B) {
637 ; CHECK-LABEL: urem1x64:
638 ; CHECK: udiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
639 ; CHECK: msub {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
640         %tmp3 = urem <1 x i64> %A, %B;
641         ret <1 x i64> %tmp3
642 }
643
644 define <2 x i64> @urem2x64(<2 x i64> %A, <2 x i64> %B) {
645 ; CHECK-LABEL: urem2x64:
646 ; CHECK: udiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
647 ; CHECK: udiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
648 ; CHECK: msub {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
649 ; CHECK: msub {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
650         %tmp3 = urem <2 x i64> %A, %B;
651         ret <2 x i64> %tmp3
652 }
653
654 define <2 x float> @frem2f32(<2 x float> %A, <2 x float> %B) {
655 ; CHECK-LABEL: frem2f32:
656 ; CHECK: bl fmodf
657 ; CHECK: bl fmodf
658         %tmp3 = frem <2 x float> %A, %B;
659         ret <2 x float> %tmp3
660 }
661
662 define <4 x float> @frem4f32(<4 x float> %A, <4 x float> %B) {
663 ; CHECK-LABEL: frem4f32:
664 ; CHECK: bl fmodf
665 ; CHECK: bl fmodf
666 ; CHECK: bl fmodf
667 ; CHECK: bl fmodf
668         %tmp3 = frem <4 x float> %A, %B;
669         ret <4 x float> %tmp3
670 }
671
672 define <1 x double> @frem1d64(<1 x double> %A, <1 x double> %B) {
673 ; CHECK-LABEL: frem1d64:
674 ; CHECK: bl fmod
675         %tmp3 = frem <1 x double> %A, %B;
676         ret <1 x double> %tmp3
677 }
678
679 define <2 x double> @frem2d64(<2 x double> %A, <2 x double> %B) {
680 ; CHECK-LABEL: frem2d64:
681 ; CHECK: bl fmod
682 ; CHECK: bl fmod
683         %tmp3 = frem <2 x double> %A, %B;
684         ret <2 x double> %tmp3
685 }
686
687 declare <8 x i8> @llvm.aarch64.neon.pmul.v8i8(<8 x i8>, <8 x i8>)
688 declare <16 x i8> @llvm.aarch64.neon.pmul.v16i8(<16 x i8>, <16 x i8>)
689
690 define <8 x i8> @poly_mulv8i8(<8 x i8> %lhs, <8 x i8> %rhs) {
691 ; CHECK-LABEL: poly_mulv8i8:
692    %prod = call <8 x i8> @llvm.aarch64.neon.pmul.v8i8(<8 x i8> %lhs, <8 x i8> %rhs)
693 ; CHECK: pmul v0.8b, v0.8b, v1.8b
694    ret <8 x i8> %prod
695 }
696
697 define <16 x i8> @poly_mulv16i8(<16 x i8> %lhs, <16 x i8> %rhs) {
698 ; CHECK-LABEL: poly_mulv16i8:
699    %prod = call <16 x i8> @llvm.aarch64.neon.pmul.v16i8(<16 x i8> %lhs, <16 x i8> %rhs)
700 ; CHECK: pmul v0.16b, v0.16b, v1.16b
701    ret <16 x i8> %prod
702 }
703
704 declare <4 x i16> @llvm.aarch64.neon.sqdmulh.v4i16(<4 x i16>, <4 x i16>)
705 declare <8 x i16> @llvm.aarch64.neon.sqdmulh.v8i16(<8 x i16>, <8 x i16>)
706 declare <2 x i32> @llvm.aarch64.neon.sqdmulh.v2i32(<2 x i32>, <2 x i32>)
707 declare <4 x i32> @llvm.aarch64.neon.sqdmulh.v4i32(<4 x i32>, <4 x i32>)
708
709 define <4 x i16> @test_sqdmulh_v4i16(<4 x i16> %lhs, <4 x i16> %rhs) {
710 ; CHECK-LABEL: test_sqdmulh_v4i16:
711    %prod = call <4 x i16> @llvm.aarch64.neon.sqdmulh.v4i16(<4 x i16> %lhs, <4 x i16> %rhs)
712 ; CHECK: sqdmulh v0.4h, v0.4h, v1.4h
713    ret <4 x i16> %prod
714 }
715
716 define <8 x i16> @test_sqdmulh_v8i16(<8 x i16> %lhs, <8 x i16> %rhs) {
717 ; CHECK-LABEL: test_sqdmulh_v8i16:
718    %prod = call <8 x i16> @llvm.aarch64.neon.sqdmulh.v8i16(<8 x i16> %lhs, <8 x i16> %rhs)
719 ; CHECK: sqdmulh v0.8h, v0.8h, v1.8h
720    ret <8 x i16> %prod
721 }
722
723 define <2 x i32> @test_sqdmulh_v2i32(<2 x i32> %lhs, <2 x i32> %rhs) {
724 ; CHECK-LABEL: test_sqdmulh_v2i32:
725    %prod = call <2 x i32> @llvm.aarch64.neon.sqdmulh.v2i32(<2 x i32> %lhs, <2 x i32> %rhs)
726 ; CHECK: sqdmulh v0.2s, v0.2s, v1.2s
727    ret <2 x i32> %prod
728 }
729
730 define <4 x i32> @test_sqdmulh_v4i32(<4 x i32> %lhs, <4 x i32> %rhs) {
731 ; CHECK-LABEL: test_sqdmulh_v4i32:
732    %prod = call <4 x i32> @llvm.aarch64.neon.sqdmulh.v4i32(<4 x i32> %lhs, <4 x i32> %rhs)
733 ; CHECK: sqdmulh v0.4s, v0.4s, v1.4s
734    ret <4 x i32> %prod
735 }
736
737 declare <4 x i16> @llvm.aarch64.neon.sqrdmulh.v4i16(<4 x i16>, <4 x i16>)
738 declare <8 x i16> @llvm.aarch64.neon.sqrdmulh.v8i16(<8 x i16>, <8 x i16>)
739 declare <2 x i32> @llvm.aarch64.neon.sqrdmulh.v2i32(<2 x i32>, <2 x i32>)
740 declare <4 x i32> @llvm.aarch64.neon.sqrdmulh.v4i32(<4 x i32>, <4 x i32>)
741
742 define <4 x i16> @test_sqrdmulh_v4i16(<4 x i16> %lhs, <4 x i16> %rhs) {
743 ; CHECK-LABEL: test_sqrdmulh_v4i16:
744    %prod = call <4 x i16> @llvm.aarch64.neon.sqrdmulh.v4i16(<4 x i16> %lhs, <4 x i16> %rhs)
745 ; CHECK: sqrdmulh v0.4h, v0.4h, v1.4h
746    ret <4 x i16> %prod
747 }
748
749 define <8 x i16> @test_sqrdmulh_v8i16(<8 x i16> %lhs, <8 x i16> %rhs) {
750 ; CHECK-LABEL: test_sqrdmulh_v8i16:
751    %prod = call <8 x i16> @llvm.aarch64.neon.sqrdmulh.v8i16(<8 x i16> %lhs, <8 x i16> %rhs)
752 ; CHECK: sqrdmulh v0.8h, v0.8h, v1.8h
753    ret <8 x i16> %prod
754 }
755
756 define <2 x i32> @test_sqrdmulh_v2i32(<2 x i32> %lhs, <2 x i32> %rhs) {
757 ; CHECK-LABEL: test_sqrdmulh_v2i32:
758    %prod = call <2 x i32> @llvm.aarch64.neon.sqrdmulh.v2i32(<2 x i32> %lhs, <2 x i32> %rhs)
759 ; CHECK: sqrdmulh v0.2s, v0.2s, v1.2s
760    ret <2 x i32> %prod
761 }
762
763 define <4 x i32> @test_sqrdmulh_v4i32(<4 x i32> %lhs, <4 x i32> %rhs) {
764 ; CHECK-LABEL: test_sqrdmulh_v4i32:
765    %prod = call <4 x i32> @llvm.aarch64.neon.sqrdmulh.v4i32(<4 x i32> %lhs, <4 x i32> %rhs)
766 ; CHECK: sqrdmulh v0.4s, v0.4s, v1.4s
767    ret <4 x i32> %prod
768 }
769
770 declare <2 x float> @llvm.aarch64.neon.fmulx.v2f32(<2 x float>, <2 x float>)
771 declare <4 x float> @llvm.aarch64.neon.fmulx.v4f32(<4 x float>, <4 x float>)
772 declare <2 x double> @llvm.aarch64.neon.fmulx.v2f64(<2 x double>, <2 x double>)
773
774 define <2 x float> @fmulx_v2f32(<2 x float> %lhs, <2 x float> %rhs) {
775 ; CHECK-LABEL: fmulx_v2f32:
776 ; Using registers other than v0, v1 and v2 are possible, but would be odd.
777 ; CHECK: fmulx v0.2s, v0.2s, v1.2s
778         %val = call <2 x float> @llvm.aarch64.neon.fmulx.v2f32(<2 x float> %lhs, <2 x float> %rhs)
779         ret <2 x float> %val
780 }
781
782 define <4 x float> @fmulx_v4f32(<4 x float> %lhs, <4 x float> %rhs) {
783 ; CHECK-LABEL: fmulx_v4f32:
784 ; Using registers other than v0, v1 and v2 are possible, but would be odd.
785 ; CHECK: fmulx v0.4s, v0.4s, v1.4s
786         %val = call <4 x float> @llvm.aarch64.neon.fmulx.v4f32(<4 x float> %lhs, <4 x float> %rhs)
787         ret <4 x float> %val
788 }
789
790 define <2 x double> @fmulx_v2f64(<2 x double> %lhs, <2 x double> %rhs) {
791 ; CHECK-LABEL: fmulx_v2f64:
792 ; Using registers other than v0, v1 and v2 are possible, but would be odd.
793 ; CHECK: fmulx v0.2d, v0.2d, v1.2d
794         %val = call <2 x double> @llvm.aarch64.neon.fmulx.v2f64(<2 x double> %lhs, <2 x double> %rhs)
795         ret <2 x double> %val
796 }
797