1 ; RUN: llc -show-mc-encoding -march=arm -mcpu=cortex-a8 -mattr=+neon < %s | FileCheck %s
6 define <8 x i8> @vadd_8xi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
7 %tmp1 = load <8 x i8>* %A
8 %tmp2 = load <8 x i8>* %B
9 ; CHECK: vadd.i8 d16, d17, d16 @ encoding: [0xa0,0x08,0x41,0xf2]
10 %tmp3 = add <8 x i8> %tmp1, %tmp2
15 define <4 x i16> @vadd_4xi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
16 %tmp1 = load <4 x i16>* %A
17 %tmp2 = load <4 x i16>* %B
18 ; CHECK: vadd.i16 d16, d17, d16 @ encoding: [0xa0,0x08,0x51,0xf2]
19 %tmp3 = add <4 x i16> %tmp1, %tmp2
24 define <1 x i64> @vadd_1xi64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
25 %tmp1 = load <1 x i64>* %A
26 %tmp2 = load <1 x i64>* %B
27 ; CHECK: vadd.i64 d16, d17, d16 @ encoding: [0xa0,0x08,0x71,0xf2]
28 %tmp3 = add <1 x i64> %tmp1, %tmp2
33 define <2 x i32> @vadd_2xi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
34 %tmp1 = load <2 x i32>* %A
35 %tmp2 = load <2 x i32>* %B
36 ; CHECK: vadd.i32 d16, d17, d16 @ encoding: [0xa0,0x08,0x61,0xf2]
37 %tmp3 = add <2 x i32> %tmp1, %tmp2
42 define <2 x float> @vadd_2xfloat(<2 x float>* %A, <2 x float>* %B) nounwind {
43 %tmp1 = load <2 x float>* %A
44 %tmp2 = load <2 x float>* %B
45 ; CHECK: vadd.f32 d16, d16, d17 @ encoding: [0xa1,0x0d,0x40,0xf2]
46 %tmp3 = fadd <2 x float> %tmp1, %tmp2
51 define <4 x float> @vadd_4xfloat(<4 x float>* %A, <4 x float>* %B) nounwind {
52 %tmp1 = load <4 x float>* %A
53 %tmp2 = load <4 x float>* %B
54 ; CHECK: vadd.f32 q8, q8, q9 @ encoding: [0xe2,0x0d,0x40,0xf2]
55 %tmp3 = fadd <4 x float> %tmp1, %tmp2
60 define <8 x i16> @vaddls_8xi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
61 %tmp1 = load <8 x i8>* %A
62 %tmp2 = load <8 x i8>* %B
63 %tmp3 = sext <8 x i8> %tmp1 to <8 x i16>
64 %tmp4 = sext <8 x i8> %tmp2 to <8 x i16>
65 ; CHECK: vaddl.s8 q8, d17, d16 @ encoding: [0xa0,0x00,0xc1,0xf2]
66 %tmp5 = add <8 x i16> %tmp3, %tmp4
71 define <4 x i32> @vaddls_4xi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
72 %tmp1 = load <4 x i16>* %A
73 %tmp2 = load <4 x i16>* %B
74 %tmp3 = sext <4 x i16> %tmp1 to <4 x i32>
75 %tmp4 = sext <4 x i16> %tmp2 to <4 x i32>
76 ; CHECK: vaddl.s16 q8, d17, d16 @ encoding: [0xa0,0x00,0xd1,0xf2]
77 %tmp5 = add <4 x i32> %tmp3, %tmp4
82 define <2 x i64> @vaddls_2xi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
83 %tmp1 = load <2 x i32>* %A
84 %tmp2 = load <2 x i32>* %B
85 %tmp3 = sext <2 x i32> %tmp1 to <2 x i64>
86 %tmp4 = sext <2 x i32> %tmp2 to <2 x i64>
87 ; CHECK: vaddl.s32 q8, d17, d16 @ encoding: [0xa0,0x00,0xe1,0xf2]
88 %tmp5 = add <2 x i64> %tmp3, %tmp4
93 define <8 x i16> @vaddlu_8xi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
94 %tmp1 = load <8 x i8>* %A
95 %tmp2 = load <8 x i8>* %B
96 %tmp3 = zext <8 x i8> %tmp1 to <8 x i16>
97 %tmp4 = zext <8 x i8> %tmp2 to <8 x i16>
98 ; CHECK: vaddl.u8 q8, d17, d16 @ encoding: [0xa0,0x00,0xc1,0xf3]
99 %tmp5 = add <8 x i16> %tmp3, %tmp4
103 ; CHECK: vaddlu_4xi16
104 define <4 x i32> @vaddlu_4xi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
105 %tmp1 = load <4 x i16>* %A
106 %tmp2 = load <4 x i16>* %B
107 %tmp3 = zext <4 x i16> %tmp1 to <4 x i32>
108 %tmp4 = zext <4 x i16> %tmp2 to <4 x i32>
109 ; CHECK: vaddl.u16 q8, d17, d16 @ encoding: [0xa0,0x00,0xd1,0xf3]
110 %tmp5 = add <4 x i32> %tmp3, %tmp4
114 ; CHECK: vaddlu_2xi32
115 define <2 x i64> @vaddlu_2xi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
116 %tmp1 = load <2 x i32>* %A
117 %tmp2 = load <2 x i32>* %B
118 %tmp3 = zext <2 x i32> %tmp1 to <2 x i64>
119 %tmp4 = zext <2 x i32> %tmp2 to <2 x i64>
120 ; CHECK: vaddl.u32 q8, d17, d16 @ encoding: [0xa0,0x00,0xe1,0xf3]
121 %tmp5 = add <2 x i64> %tmp3, %tmp4
126 define <8 x i16> @vaddws_8xi8(<8 x i16>* %A, <8 x i8>* %B) nounwind {
127 %tmp1 = load <8 x i16>* %A
128 %tmp2 = load <8 x i8>* %B
129 %tmp3 = sext <8 x i8> %tmp2 to <8 x i16>
130 ; CHECK: vaddw.s8 q8, q8, d18 @ encoding: [0xa2,0x01,0xc0,0xf2]
131 %tmp4 = add <8 x i16> %tmp1, %tmp3
135 ; CHECK: vaddws_4xi16
136 define <4 x i32> @vaddws_4xi16(<4 x i32>* %A, <4 x i16>* %B) nounwind {
137 %tmp1 = load <4 x i32>* %A
138 %tmp2 = load <4 x i16>* %B
139 %tmp3 = sext <4 x i16> %tmp2 to <4 x i32>
140 ; CHECK: vaddw.s16 q8, q8, d18 @ encoding: [0xa2,0x01,0xd0,0xf2]
141 %tmp4 = add <4 x i32> %tmp1, %tmp3
145 ; CHECK: vaddws_2xi32
146 define <2 x i64> @vaddws_2xi32(<2 x i64>* %A, <2 x i32>* %B) nounwind {
147 %tmp1 = load <2 x i64>* %A
148 %tmp2 = load <2 x i32>* %B
149 %tmp3 = sext <2 x i32> %tmp2 to <2 x i64>
150 ; CHECK: vaddw.s32 q8, q8, d18 @ encoding: [0xa2,0x01,0xe0,0xf2]
151 %tmp4 = add <2 x i64> %tmp1, %tmp3
156 define <8 x i16> @vaddwu_8xi8(<8 x i16>* %A, <8 x i8>* %B) nounwind {
157 %tmp1 = load <8 x i16>* %A
158 %tmp2 = load <8 x i8>* %B
159 %tmp3 = zext <8 x i8> %tmp2 to <8 x i16>
160 ; CHECK: vaddw.u8 q8, q8, d18 @ encoding: [0xa2,0x01,0xc0,0xf3]
161 %tmp4 = add <8 x i16> %tmp1, %tmp3
165 ; CHECK: vaddwu_4xi16
166 define <4 x i32> @vaddwu_4xi16(<4 x i32>* %A, <4 x i16>* %B) nounwind {
167 %tmp1 = load <4 x i32>* %A
168 %tmp2 = load <4 x i16>* %B
169 %tmp3 = zext <4 x i16> %tmp2 to <4 x i32>
170 ; CHECK: vaddw.u16 q8, q8, d18 @ encoding: [0xa2,0x01,0xd0,0xf3]
171 %tmp4 = add <4 x i32> %tmp1, %tmp3
175 ; CHECK: vaddwu_2xi32
176 define <2 x i64> @vaddwu_2xi32(<2 x i64>* %A, <2 x i32>* %B) nounwind {
177 %tmp1 = load <2 x i64>* %A
178 %tmp2 = load <2 x i32>* %B
179 %tmp3 = zext <2 x i32> %tmp2 to <2 x i64>
180 ; CHECK: vaddw.u32 q8, q8, d18 @ encoding: [0xa2,0x01,0xe0,0xf3]
181 %tmp4 = add <2 x i64> %tmp1, %tmp3
185 declare <8 x i8> @llvm.arm.neon.vhadds.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
186 declare <4 x i16> @llvm.arm.neon.vhadds.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
187 declare <2 x i32> @llvm.arm.neon.vhadds.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
190 define <8 x i8> @vhadds_8xi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
191 %tmp1 = load <8 x i8>* %A
192 %tmp2 = load <8 x i8>* %B
193 ; CHECK: vhadd.s8 d16, d16, d17 @ encoding: [0xa1,0x00,0x40,0xf2]
194 %tmp3 = call <8 x i8> @llvm.arm.neon.vhadds.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
198 ; CHECK: vhadds_4xi16
199 define <4 x i16> @vhadds_4xi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
200 %tmp1 = load <4 x i16>* %A
201 %tmp2 = load <4 x i16>* %B
202 ; CHECK: vhadd.s16 d16, d16, d17 @ encoding: [0xa1,0x00,0x50,0xf2]
203 %tmp3 = call <4 x i16> @llvm.arm.neon.vhadds.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
207 ; CHECK: vhadds_2xi32
208 define <2 x i32> @vhadds_2xi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
209 %tmp1 = load <2 x i32>* %A
210 %tmp2 = load <2 x i32>* %B
211 ; CHECK: vhadd.s32 d16, d16, d17 @ encoding: [0xa1,0x00,0x60,0xf2]
212 %tmp3 = call <2 x i32> @llvm.arm.neon.vhadds.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
216 declare <8 x i8> @llvm.arm.neon.vhaddu.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
217 declare <4 x i16> @llvm.arm.neon.vhaddu.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
218 declare <2 x i32> @llvm.arm.neon.vhaddu.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
221 define <8 x i8> @vhaddu_8xi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
222 %tmp1 = load <8 x i8>* %A
223 %tmp2 = load <8 x i8>* %B
224 ; CHECK: vhadd.u8 d16, d16, d17 @ encoding: [0xa1,0x00,0x40,0xf3]
225 %tmp3 = call <8 x i8> @llvm.arm.neon.vhaddu.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
229 ; CHECK: vhaddu_4xi16
230 define <4 x i16> @vhaddu_4xi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
231 %tmp1 = load <4 x i16>* %A
232 %tmp2 = load <4 x i16>* %B
233 ; CHECK: vhadd.u16 d16, d16, d17 @ encoding: [0xa1,0x00,0x50,0xf3]
234 %tmp3 = call <4 x i16> @llvm.arm.neon.vhaddu.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
238 ; CHECK: vhaddu_2xi32
239 define <2 x i32> @vhaddu_2xi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
240 %tmp1 = load <2 x i32>* %A
241 %tmp2 = load <2 x i32>* %B
242 ; CHECK: vhadd.u32 d16, d16, d17 @ encoding: [0xa1,0x00,0x60,0xf3]
243 %tmp3 = call <2 x i32> @llvm.arm.neon.vhaddu.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
247 declare <16 x i8> @llvm.arm.neon.vhadds.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
248 declare <8 x i16> @llvm.arm.neon.vhadds.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
249 declare <4 x i32> @llvm.arm.neon.vhadds.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
251 ; CHECK: vhadds_16xi8
252 define <16 x i8> @vhadds_16xi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
253 %tmp1 = load <16 x i8>* %A
254 %tmp2 = load <16 x i8>* %B
255 ; CHECK: vhadd.s8 q8, q8, q9 @ encoding: [0xe2,0x00,0x40,0xf2]
256 %tmp3 = call <16 x i8> @llvm.arm.neon.vhadds.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
260 ; CHECK: vhadds_8xi16
261 define <8 x i16> @vhadds_8xi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
262 %tmp1 = load <8 x i16>* %A
263 %tmp2 = load <8 x i16>* %B
264 ; CHECK: vhadd.s16 q8, q8, q9 @ encoding: [0xe2,0x00,0x50,0xf2]
265 %tmp3 = call <8 x i16> @llvm.arm.neon.vhadds.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
269 ; CHECK: vhadds_4xi32
270 define <4 x i32> @vhadds_4xi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
271 %tmp1 = load <4 x i32>* %A
272 %tmp2 = load <4 x i32>* %B
273 ; CHECK: vhadd.s32 q8, q8, q9 @ encoding: [0xe2,0x00,0x60,0xf2]
274 %tmp3 = call <4 x i32> @llvm.arm.neon.vhadds.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
278 declare <16 x i8> @llvm.arm.neon.vhaddu.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
279 declare <8 x i16> @llvm.arm.neon.vhaddu.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
280 declare <4 x i32> @llvm.arm.neon.vhaddu.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
282 ; CHECK: vhaddu_16xi8
283 define <16 x i8> @vhaddu_16xi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
284 %tmp1 = load <16 x i8>* %A
285 %tmp2 = load <16 x i8>* %B
286 ; CHECK: vhadd.u8 q8, q8, q9 @ encoding: [0xe2,0x00,0x40,0xf3]
287 %tmp3 = call <16 x i8> @llvm.arm.neon.vhaddu.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
291 ; CHECK: vhaddu_8xi16
292 define <8 x i16> @vhaddu_8xi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
293 %tmp1 = load <8 x i16>* %A
294 %tmp2 = load <8 x i16>* %B
295 ; CHECK: vhadd.u16 q8, q8, q9 @ encoding: [0xe2,0x00,0x50,0xf3]
296 %tmp3 = call <8 x i16> @llvm.arm.neon.vhaddu.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
300 ; CHECK: vhaddu_4xi32
301 define <4 x i32> @vhaddu_4xi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
302 %tmp1 = load <4 x i32>* %A
303 %tmp2 = load <4 x i32>* %B
304 ; CHECK: vhadd.u32 q8, q8, q9 @ encoding: [0xe2,0x00,0x60,0xf3]
305 %tmp3 = call <4 x i32> @llvm.arm.neon.vhaddu.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
309 declare <8 x i8> @llvm.arm.neon.vrhadds.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
310 declare <4 x i16> @llvm.arm.neon.vrhadds.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
311 declare <2 x i32> @llvm.arm.neon.vrhadds.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
313 ; CHECK: vrhadds_8xi8
314 define <8 x i8> @vrhadds_8xi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
315 %tmp1 = load <8 x i8>* %A
316 %tmp2 = load <8 x i8>* %B
317 ; CHECK: vrhadd.s8 d16, d16, d17 @ encoding: [0xa1,0x01,0x40,0xf2]
318 %tmp3 = call <8 x i8> @llvm.arm.neon.vrhadds.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
322 ; CHECK: vrhadds_4xi16
323 define <4 x i16> @vrhadds_4xi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
324 %tmp1 = load <4 x i16>* %A
325 %tmp2 = load <4 x i16>* %B
326 ; CHECK: vrhadd.s16 d16, d16, d17 @ encoding: [0xa1,0x01,0x50,0xf2]
327 %tmp3 = call <4 x i16> @llvm.arm.neon.vrhadds.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
331 ; CHECK: vrhadds_2xi32
332 define <2 x i32> @vrhadds_2xi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
333 %tmp1 = load <2 x i32>* %A
334 %tmp2 = load <2 x i32>* %B
335 ; CHECK: vrhadd.s32 d16, d16, d17 @ encoding: [0xa1,0x01,0x60,0xf2]
336 %tmp3 = call <2 x i32> @llvm.arm.neon.vrhadds.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
340 declare <8 x i8> @llvm.arm.neon.vrhaddu.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
341 declare <4 x i16> @llvm.arm.neon.vrhaddu.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
342 declare <2 x i32> @llvm.arm.neon.vrhaddu.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
344 ; CHECK: vrhaddu_8xi8
345 define <8 x i8> @vrhaddu_8xi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
346 %tmp1 = load <8 x i8>* %A
347 %tmp2 = load <8 x i8>* %B
348 ; CHECK: vrhadd.u8 d16, d16, d17 @ encoding: [0xa1,0x01,0x40,0xf3]
349 %tmp3 = call <8 x i8> @llvm.arm.neon.vrhaddu.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
353 ; CHECK: vrhaddu_4xi16
354 define <4 x i16> @vrhaddu_4xi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
355 %tmp1 = load <4 x i16>* %A
356 %tmp2 = load <4 x i16>* %B
357 ; CHECK: vrhadd.u16 d16, d16, d17 @ encoding: [0xa1,0x01,0x50,0xf3]
358 %tmp3 = call <4 x i16> @llvm.arm.neon.vrhaddu.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
362 ; CHECK: vrhaddu_2xi32
363 define <2 x i32> @vrhaddu_2xi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
364 %tmp1 = load <2 x i32>* %A
365 %tmp2 = load <2 x i32>* %B
366 ; CHECK: vrhadd.u32 d16, d16, d17 @ encoding: [0xa1,0x01,0x60,0xf3]
367 %tmp3 = call <2 x i32> @llvm.arm.neon.vrhaddu.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
371 declare <16 x i8> @llvm.arm.neon.vrhadds.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
372 declare <8 x i16> @llvm.arm.neon.vrhadds.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
373 declare <4 x i32> @llvm.arm.neon.vrhadds.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
375 ; CHECK: vrhadds_16xi8
376 define <16 x i8> @vrhadds_16xi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
377 %tmp1 = load <16 x i8>* %A
378 %tmp2 = load <16 x i8>* %B
379 ; CHECK: vrhadd.s8 q8, q8, q9 @ encoding: [0xe2,0x01,0x40,0xf2]
380 %tmp3 = call <16 x i8> @llvm.arm.neon.vrhadds.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
384 ; CHECK: vrhadds_8xi16
385 define <8 x i16> @vrhadds_8xi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
386 %tmp1 = load <8 x i16>* %A
387 %tmp2 = load <8 x i16>* %B
388 ; CHECK: vrhadd.s16 q8, q8, q9 @ encoding: [0xe2,0x01,0x50,0xf2]
389 %tmp3 = call <8 x i16> @llvm.arm.neon.vrhadds.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
393 ; CHECK: vrhadds_4xi32
394 define <4 x i32> @vrhadds_4xi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
395 %tmp1 = load <4 x i32>* %A
396 %tmp2 = load <4 x i32>* %B
397 ; CHECK: vrhadd.s32 q8, q8, q9 @ encoding: [0xe2,0x01,0x60,0xf2]
398 %tmp3 = call <4 x i32> @llvm.arm.neon.vrhadds.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
402 declare <16 x i8> @llvm.arm.neon.vrhaddu.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
403 declare <8 x i16> @llvm.arm.neon.vrhaddu.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
404 declare <4 x i32> @llvm.arm.neon.vrhaddu.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
406 ; CHECK: vrhaddu_16xi8
407 define <16 x i8> @vrhaddu_16xi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
408 %tmp1 = load <16 x i8>* %A
409 %tmp2 = load <16 x i8>* %B
410 ; CHECK: vrhadd.u8 q8, q8, q9 @ encoding: [0xe2,0x01,0x40,0xf3]
411 %tmp3 = call <16 x i8> @llvm.arm.neon.vrhaddu.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
415 ; CHECK: vrhaddu_8xi16
416 define <8 x i16> @vrhaddu_8xi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
417 %tmp1 = load <8 x i16>* %A
418 %tmp2 = load <8 x i16>* %B
419 ; CHECK: vrhadd.u16 q8, q8, q9 @ encoding: [0xe2,0x01,0x50,0xf3]
420 %tmp3 = call <8 x i16> @llvm.arm.neon.vrhaddu.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
424 ; CHECK: vrhaddu_4xi32
425 define <4 x i32> @vrhaddu_4xi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
426 %tmp1 = load <4 x i32>* %A
427 %tmp2 = load <4 x i32>* %B
428 ; CHECK: vrhadd.u32 q8, q8, q9 @ encoding: [0xe2,0x01,0x60,0xf3]
429 %tmp3 = call <4 x i32> @llvm.arm.neon.vrhaddu.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
433 declare <8 x i8> @llvm.arm.neon.vqadds.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
434 declare <4 x i16> @llvm.arm.neon.vqadds.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
435 declare <2 x i32> @llvm.arm.neon.vqadds.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
436 declare <1 x i64> @llvm.arm.neon.vqadds.v1i64(<1 x i64>, <1 x i64>) nounwind readnone
439 define <8 x i8> @vqadds_8xi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
440 %tmp1 = load <8 x i8>* %A
441 %tmp2 = load <8 x i8>* %B
442 ; CHECK: vqadd.s8 d16, d16, d17 @ encoding: [0xb1,0x00,0x40,0xf2]
443 %tmp3 = call <8 x i8> @llvm.arm.neon.vqadds.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
447 ; CHECK: vqadds_4xi16
448 define <4 x i16> @vqadds_4xi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
449 %tmp1 = load <4 x i16>* %A
450 %tmp2 = load <4 x i16>* %B
451 ; CHECK: vqadd.s16 d16, d16, d17 @ encoding: [0xb1,0x00,0x50,0xf2]
452 %tmp3 = call <4 x i16> @llvm.arm.neon.vqadds.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
456 ; CHECK: vqadds_2xi32
457 define <2 x i32> @vqadds_2xi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
458 %tmp1 = load <2 x i32>* %A
459 %tmp2 = load <2 x i32>* %B
460 ; CHECK: vqadd.s32 d16, d16, d17 @ encoding: [0xb1,0x00,0x60,0xf2]
461 %tmp3 = call <2 x i32> @llvm.arm.neon.vqadds.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
465 ; CHECK: vqadds_1xi64
466 define <1 x i64> @vqadds_1xi64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
467 %tmp1 = load <1 x i64>* %A
468 %tmp2 = load <1 x i64>* %B
469 ; CHECK: vqadd.s64 d16, d16, d17 @ encoding: [0xb1,0x00,0x70,0xf2]
470 %tmp3 = call <1 x i64> @llvm.arm.neon.vqadds.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2)
474 declare <8 x i8> @llvm.arm.neon.vqaddu.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
475 declare <4 x i16> @llvm.arm.neon.vqaddu.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
476 declare <2 x i32> @llvm.arm.neon.vqaddu.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
477 declare <1 x i64> @llvm.arm.neon.vqaddu.v1i64(<1 x i64>, <1 x i64>) nounwind readnone
480 define <8 x i8> @vqaddu_8xi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
481 %tmp1 = load <8 x i8>* %A
482 %tmp2 = load <8 x i8>* %B
483 ; CHECK: vqadd.u8 d16, d16, d17 @ encoding: [0xb1,0x00,0x40,0xf3]
484 %tmp3 = call <8 x i8> @llvm.arm.neon.vqaddu.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
488 ; CHECK: vqaddu_4xi16
489 define <4 x i16> @vqaddu_4xi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
490 %tmp1 = load <4 x i16>* %A
491 %tmp2 = load <4 x i16>* %B
492 ; CHECK: vqadd.u16 d16, d16, d17 @ encoding: [0xb1,0x00,0x50,0xf3]
493 %tmp3 = call <4 x i16> @llvm.arm.neon.vqaddu.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
497 ; CHECK: vqaddu_2xi32
498 define <2 x i32> @vqaddu_2xi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
499 %tmp1 = load <2 x i32>* %A
500 %tmp2 = load <2 x i32>* %B
501 ; CHECK: vqadd.u32 d16, d16, d17 @ encoding: [0xb1,0x00,0x60,0xf3]
502 %tmp3 = call <2 x i32> @llvm.arm.neon.vqaddu.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
506 ; CHECK: vqaddu_1xi64
507 define <1 x i64> @vqaddu_1xi64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
508 %tmp1 = load <1 x i64>* %A
509 %tmp2 = load <1 x i64>* %B
510 ; CHECK: vqadd.u64 d16, d16, d17 @ encoding: [0xb1,0x00,0x70,0xf3]
511 %tmp3 = call <1 x i64> @llvm.arm.neon.vqaddu.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2)
515 declare <16 x i8> @llvm.arm.neon.vqadds.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
516 declare <8 x i16> @llvm.arm.neon.vqadds.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
517 declare <4 x i32> @llvm.arm.neon.vqadds.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
518 declare <2 x i64> @llvm.arm.neon.vqadds.v2i64(<2 x i64>, <2 x i64>) nounwind readnone
520 ; CHECK: vqadds_16xi8
521 define <16 x i8> @vqadds_16xi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
522 %tmp1 = load <16 x i8>* %A
523 %tmp2 = load <16 x i8>* %B
524 ; CHECK: vqadd.s8 q8, q8, q9 @ encoding: [0xf2,0x00,0x40,0xf2]
525 %tmp3 = call <16 x i8> @llvm.arm.neon.vqadds.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
529 ; CHECK: vqadds_8xi16
530 define <8 x i16> @vqadds_8xi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
531 %tmp1 = load <8 x i16>* %A
532 %tmp2 = load <8 x i16>* %B
533 ; CHECK: vqadd.s16 q8, q8, q9 @ encoding: [0xf2,0x00,0x50,0xf2]
534 %tmp3 = call <8 x i16> @llvm.arm.neon.vqadds.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
538 ; CHECK: vqadds_4xi32
539 define <4 x i32> @vqadds_4xi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
540 %tmp1 = load <4 x i32>* %A
541 %tmp2 = load <4 x i32>* %B
542 ; CHECK: vqadd.s32 q8, q8, q9 @ encoding: [0xf2,0x00,0x60,0xf2]
543 %tmp3 = call <4 x i32> @llvm.arm.neon.vqadds.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
547 ; CHECK: vqadds_2xi64
548 define <2 x i64> @vqadds_2xi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
549 %tmp1 = load <2 x i64>* %A
550 %tmp2 = load <2 x i64>* %B
551 ; CHECK: vqadd.s64 q8, q8, q9 @ encoding: [0xf2,0x00,0x70,0xf2]
552 %tmp3 = call <2 x i64> @llvm.arm.neon.vqadds.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2)
556 declare <16 x i8> @llvm.arm.neon.vqaddu.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
557 declare <8 x i16> @llvm.arm.neon.vqaddu.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
558 declare <4 x i32> @llvm.arm.neon.vqaddu.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
559 declare <2 x i64> @llvm.arm.neon.vqaddu.v2i64(<2 x i64>, <2 x i64>) nounwind readnone
561 ; CHECK: vqaddu_16xi8
562 define <16 x i8> @vqaddu_16xi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
563 %tmp1 = load <16 x i8>* %A
564 %tmp2 = load <16 x i8>* %B
565 ; CHECK: vqadd.u8 q8, q8, q9 @ encoding: [0xf2,0x00,0x40,0xf3]
566 %tmp3 = call <16 x i8> @llvm.arm.neon.vqaddu.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
570 ; CHECK: vqaddu_8xi16
571 define <8 x i16> @vqaddu_8xi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
572 %tmp1 = load <8 x i16>* %A
573 %tmp2 = load <8 x i16>* %B
574 ; CHECK: vqadd.u16 q8, q8, q9 @ encoding: [0xf2,0x00,0x50,0xf3]
575 %tmp3 = call <8 x i16> @llvm.arm.neon.vqaddu.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
579 ; CHECK: vqaddu_4xi32
580 define <4 x i32> @vqaddu_4xi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
581 %tmp1 = load <4 x i32>* %A
582 %tmp2 = load <4 x i32>* %B
583 ; CHECK: vqadd.u32 q8, q8, q9 @ encoding: [0xf2,0x00,0x60,0xf3]
584 %tmp3 = call <4 x i32> @llvm.arm.neon.vqaddu.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
588 ; CHECK: vqaddu_2xi64
589 define <2 x i64> @vqaddu_2xi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
590 %tmp1 = load <2 x i64>* %A
591 %tmp2 = load <2 x i64>* %B
592 ; CHECK: vqadd.u64 q8, q8, q9 @ encoding: [0xf2,0x00,0x70,0xf3]
593 %tmp3 = call <2 x i64> @llvm.arm.neon.vqaddu.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2)
597 declare <8 x i8> @llvm.arm.neon.vaddhn.v8i8(<8 x i16>, <8 x i16>) nounwind readnone
598 declare <4 x i16> @llvm.arm.neon.vaddhn.v4i16(<4 x i32>, <4 x i32>) nounwind readnone
599 declare <2 x i32> @llvm.arm.neon.vaddhn.v2i32(<2 x i64>, <2 x i64>) nounwind readnone
601 ; CHECK: vaddhn_8xi16
602 define <8 x i8> @vaddhn_8xi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
603 %tmp1 = load <8 x i16>* %A
604 %tmp2 = load <8 x i16>* %B
605 ; CHECK: vaddhn.i16 d16, q8, q9 @ encoding: [0xa2,0x04,0xc0,0xf2]
606 %tmp3 = call <8 x i8> @llvm.arm.neon.vaddhn.v8i8(<8 x i16> %tmp1, <8 x i16> %tmp2)
610 ; CHECK: vaddhn_4xi32
611 define <4 x i16> @vaddhn_4xi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
612 %tmp1 = load <4 x i32>* %A
613 %tmp2 = load <4 x i32>* %B
614 ; CHECK: vaddhn.i32 d16, q8, q9 @ encoding: [0xa2,0x04,0xd0,0xf2]
615 %tmp3 = call <4 x i16> @llvm.arm.neon.vaddhn.v4i16(<4 x i32> %tmp1, <4 x i32> %tmp2)
619 ; CHECK: vaddhn_2xi64
620 define <2 x i32> @vaddhn_2xi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
621 %tmp1 = load <2 x i64>* %A
622 %tmp2 = load <2 x i64>* %B
623 ; CHECK: vaddhn.i64 d16, q8, q9 @ encoding: [0xa2,0x04,0xe0,0xf2]
624 %tmp3 = call <2 x i32> @llvm.arm.neon.vaddhn.v2i32(<2 x i64> %tmp1, <2 x i64> %tmp2)
628 declare <8 x i8> @llvm.arm.neon.vraddhn.v8i8(<8 x i16>, <8 x i16>) nounwind readnone
629 declare <4 x i16> @llvm.arm.neon.vraddhn.v4i16(<4 x i32>, <4 x i32>) nounwind readnone
630 declare <2 x i32> @llvm.arm.neon.vraddhn.v2i32(<2 x i64>, <2 x i64>) nounwind readnone
632 ; CHECK: vraddhn_8xi16
633 define <8 x i8> @vraddhn_8xi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
634 %tmp1 = load <8 x i16>* %A
635 %tmp2 = load <8 x i16>* %B
636 ; CHECK: vraddhn.i16 d16, q8, q9 @ encoding: [0xa2,0x04,0xc0,0xf3]
637 %tmp3 = call <8 x i8> @llvm.arm.neon.vraddhn.v8i8(<8 x i16> %tmp1, <8 x i16> %tmp2)
641 ; CHECK: vraddhn_4xi32
642 define <4 x i16> @vraddhn_4xi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
643 %tmp1 = load <4 x i32>* %A
644 %tmp2 = load <4 x i32>* %B
645 ; CHECK: vraddhn.i32 d16, q8, q9 @ encoding: [0xa2,0x04,0xd0,0xf3]
646 %tmp3 = call <4 x i16> @llvm.arm.neon.vraddhn.v4i16(<4 x i32> %tmp1, <4 x i32> %tmp2)
650 ; CHECK: vraddhn_2xi64
651 define <2 x i32> @vraddhn_2xi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
652 %tmp1 = load <2 x i64>* %A
653 %tmp2 = load <2 x i64>* %B
654 ; CHECK: vraddhn.i64 d16, q8, q9 @ encoding: [0xa2,0x04,0xe0,0xf3]
655 %tmp3 = call <2 x i32> @llvm.arm.neon.vraddhn.v2i32(<2 x i64> %tmp1, <2 x i64> %tmp2)