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