1
; RUN: llc < %s -march=arm -mattr=+neon | FileCheck %s
3
define <8 x i8> @v_andi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
6
%tmp1 = load <8 x i8>* %A
7
%tmp2 = load <8 x i8>* %B
8
%tmp3 = and <8 x i8> %tmp1, %tmp2
12
define <4 x i16> @v_andi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
15
%tmp1 = load <4 x i16>* %A
16
%tmp2 = load <4 x i16>* %B
17
%tmp3 = and <4 x i16> %tmp1, %tmp2
21
define <2 x i32> @v_andi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
24
%tmp1 = load <2 x i32>* %A
25
%tmp2 = load <2 x i32>* %B
26
%tmp3 = and <2 x i32> %tmp1, %tmp2
30
define <1 x i64> @v_andi64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
33
%tmp1 = load <1 x i64>* %A
34
%tmp2 = load <1 x i64>* %B
35
%tmp3 = and <1 x i64> %tmp1, %tmp2
39
define <16 x i8> @v_andQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
42
%tmp1 = load <16 x i8>* %A
43
%tmp2 = load <16 x i8>* %B
44
%tmp3 = and <16 x i8> %tmp1, %tmp2
48
define <8 x i16> @v_andQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
51
%tmp1 = load <8 x i16>* %A
52
%tmp2 = load <8 x i16>* %B
53
%tmp3 = and <8 x i16> %tmp1, %tmp2
57
define <4 x i32> @v_andQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
60
%tmp1 = load <4 x i32>* %A
61
%tmp2 = load <4 x i32>* %B
62
%tmp3 = and <4 x i32> %tmp1, %tmp2
66
define <2 x i64> @v_andQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
69
%tmp1 = load <2 x i64>* %A
70
%tmp2 = load <2 x i64>* %B
71
%tmp3 = and <2 x i64> %tmp1, %tmp2
75
define <8 x i8> @v_bici8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
78
%tmp1 = load <8 x i8>* %A
79
%tmp2 = load <8 x i8>* %B
80
%tmp3 = xor <8 x i8> %tmp2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
81
%tmp4 = and <8 x i8> %tmp1, %tmp3
85
define <4 x i16> @v_bici16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
88
%tmp1 = load <4 x i16>* %A
89
%tmp2 = load <4 x i16>* %B
90
%tmp3 = xor <4 x i16> %tmp2, < i16 -1, i16 -1, i16 -1, i16 -1 >
91
%tmp4 = and <4 x i16> %tmp1, %tmp3
95
define <2 x i32> @v_bici32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
98
%tmp1 = load <2 x i32>* %A
99
%tmp2 = load <2 x i32>* %B
100
%tmp3 = xor <2 x i32> %tmp2, < i32 -1, i32 -1 >
101
%tmp4 = and <2 x i32> %tmp1, %tmp3
105
define <1 x i64> @v_bici64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
108
%tmp1 = load <1 x i64>* %A
109
%tmp2 = load <1 x i64>* %B
110
%tmp3 = xor <1 x i64> %tmp2, < i64 -1 >
111
%tmp4 = and <1 x i64> %tmp1, %tmp3
115
define <16 x i8> @v_bicQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
118
%tmp1 = load <16 x i8>* %A
119
%tmp2 = load <16 x i8>* %B
120
%tmp3 = xor <16 x i8> %tmp2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
121
%tmp4 = and <16 x i8> %tmp1, %tmp3
125
define <8 x i16> @v_bicQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
128
%tmp1 = load <8 x i16>* %A
129
%tmp2 = load <8 x i16>* %B
130
%tmp3 = xor <8 x i16> %tmp2, < i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1 >
131
%tmp4 = and <8 x i16> %tmp1, %tmp3
135
define <4 x i32> @v_bicQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
138
%tmp1 = load <4 x i32>* %A
139
%tmp2 = load <4 x i32>* %B
140
%tmp3 = xor <4 x i32> %tmp2, < i32 -1, i32 -1, i32 -1, i32 -1 >
141
%tmp4 = and <4 x i32> %tmp1, %tmp3
145
define <2 x i64> @v_bicQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
148
%tmp1 = load <2 x i64>* %A
149
%tmp2 = load <2 x i64>* %B
150
%tmp3 = xor <2 x i64> %tmp2, < i64 -1, i64 -1 >
151
%tmp4 = and <2 x i64> %tmp1, %tmp3
155
define <8 x i8> @v_eori8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
158
%tmp1 = load <8 x i8>* %A
159
%tmp2 = load <8 x i8>* %B
160
%tmp3 = xor <8 x i8> %tmp1, %tmp2
164
define <4 x i16> @v_eori16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
167
%tmp1 = load <4 x i16>* %A
168
%tmp2 = load <4 x i16>* %B
169
%tmp3 = xor <4 x i16> %tmp1, %tmp2
173
define <2 x i32> @v_eori32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
176
%tmp1 = load <2 x i32>* %A
177
%tmp2 = load <2 x i32>* %B
178
%tmp3 = xor <2 x i32> %tmp1, %tmp2
182
define <1 x i64> @v_eori64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
185
%tmp1 = load <1 x i64>* %A
186
%tmp2 = load <1 x i64>* %B
187
%tmp3 = xor <1 x i64> %tmp1, %tmp2
191
define <16 x i8> @v_eorQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
194
%tmp1 = load <16 x i8>* %A
195
%tmp2 = load <16 x i8>* %B
196
%tmp3 = xor <16 x i8> %tmp1, %tmp2
200
define <8 x i16> @v_eorQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
203
%tmp1 = load <8 x i16>* %A
204
%tmp2 = load <8 x i16>* %B
205
%tmp3 = xor <8 x i16> %tmp1, %tmp2
209
define <4 x i32> @v_eorQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
212
%tmp1 = load <4 x i32>* %A
213
%tmp2 = load <4 x i32>* %B
214
%tmp3 = xor <4 x i32> %tmp1, %tmp2
218
define <2 x i64> @v_eorQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
221
%tmp1 = load <2 x i64>* %A
222
%tmp2 = load <2 x i64>* %B
223
%tmp3 = xor <2 x i64> %tmp1, %tmp2
227
define <8 x i8> @v_mvni8(<8 x i8>* %A) nounwind {
230
%tmp1 = load <8 x i8>* %A
231
%tmp2 = xor <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
235
define <4 x i16> @v_mvni16(<4 x i16>* %A) nounwind {
238
%tmp1 = load <4 x i16>* %A
239
%tmp2 = xor <4 x i16> %tmp1, < i16 -1, i16 -1, i16 -1, i16 -1 >
243
define <2 x i32> @v_mvni32(<2 x i32>* %A) nounwind {
246
%tmp1 = load <2 x i32>* %A
247
%tmp2 = xor <2 x i32> %tmp1, < i32 -1, i32 -1 >
251
define <1 x i64> @v_mvni64(<1 x i64>* %A) nounwind {
254
%tmp1 = load <1 x i64>* %A
255
%tmp2 = xor <1 x i64> %tmp1, < i64 -1 >
259
define <16 x i8> @v_mvnQi8(<16 x i8>* %A) nounwind {
262
%tmp1 = load <16 x i8>* %A
263
%tmp2 = xor <16 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
267
define <8 x i16> @v_mvnQi16(<8 x i16>* %A) nounwind {
270
%tmp1 = load <8 x i16>* %A
271
%tmp2 = xor <8 x i16> %tmp1, < i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1 >
275
define <4 x i32> @v_mvnQi32(<4 x i32>* %A) nounwind {
278
%tmp1 = load <4 x i32>* %A
279
%tmp2 = xor <4 x i32> %tmp1, < i32 -1, i32 -1, i32 -1, i32 -1 >
283
define <2 x i64> @v_mvnQi64(<2 x i64>* %A) nounwind {
286
%tmp1 = load <2 x i64>* %A
287
%tmp2 = xor <2 x i64> %tmp1, < i64 -1, i64 -1 >
291
define <8 x i8> @v_orri8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
294
%tmp1 = load <8 x i8>* %A
295
%tmp2 = load <8 x i8>* %B
296
%tmp3 = or <8 x i8> %tmp1, %tmp2
300
define <4 x i16> @v_orri16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
303
%tmp1 = load <4 x i16>* %A
304
%tmp2 = load <4 x i16>* %B
305
%tmp3 = or <4 x i16> %tmp1, %tmp2
309
define <2 x i32> @v_orri32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
312
%tmp1 = load <2 x i32>* %A
313
%tmp2 = load <2 x i32>* %B
314
%tmp3 = or <2 x i32> %tmp1, %tmp2
318
define <1 x i64> @v_orri64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
321
%tmp1 = load <1 x i64>* %A
322
%tmp2 = load <1 x i64>* %B
323
%tmp3 = or <1 x i64> %tmp1, %tmp2
327
define <16 x i8> @v_orrQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
330
%tmp1 = load <16 x i8>* %A
331
%tmp2 = load <16 x i8>* %B
332
%tmp3 = or <16 x i8> %tmp1, %tmp2
336
define <8 x i16> @v_orrQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
339
%tmp1 = load <8 x i16>* %A
340
%tmp2 = load <8 x i16>* %B
341
%tmp3 = or <8 x i16> %tmp1, %tmp2
345
define <4 x i32> @v_orrQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
348
%tmp1 = load <4 x i32>* %A
349
%tmp2 = load <4 x i32>* %B
350
%tmp3 = or <4 x i32> %tmp1, %tmp2
354
define <2 x i64> @v_orrQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
357
%tmp1 = load <2 x i64>* %A
358
%tmp2 = load <2 x i64>* %B
359
%tmp3 = or <2 x i64> %tmp1, %tmp2
363
define <8 x i8> @v_orni8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
366
%tmp1 = load <8 x i8>* %A
367
%tmp2 = load <8 x i8>* %B
368
%tmp3 = xor <8 x i8> %tmp2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
369
%tmp4 = or <8 x i8> %tmp1, %tmp3
373
define <4 x i16> @v_orni16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
376
%tmp1 = load <4 x i16>* %A
377
%tmp2 = load <4 x i16>* %B
378
%tmp3 = xor <4 x i16> %tmp2, < i16 -1, i16 -1, i16 -1, i16 -1 >
379
%tmp4 = or <4 x i16> %tmp1, %tmp3
383
define <2 x i32> @v_orni32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
386
%tmp1 = load <2 x i32>* %A
387
%tmp2 = load <2 x i32>* %B
388
%tmp3 = xor <2 x i32> %tmp2, < i32 -1, i32 -1 >
389
%tmp4 = or <2 x i32> %tmp1, %tmp3
393
define <1 x i64> @v_orni64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
396
%tmp1 = load <1 x i64>* %A
397
%tmp2 = load <1 x i64>* %B
398
%tmp3 = xor <1 x i64> %tmp2, < i64 -1 >
399
%tmp4 = or <1 x i64> %tmp1, %tmp3
403
define <16 x i8> @v_ornQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
406
%tmp1 = load <16 x i8>* %A
407
%tmp2 = load <16 x i8>* %B
408
%tmp3 = xor <16 x i8> %tmp2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
409
%tmp4 = or <16 x i8> %tmp1, %tmp3
413
define <8 x i16> @v_ornQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
416
%tmp1 = load <8 x i16>* %A
417
%tmp2 = load <8 x i16>* %B
418
%tmp3 = xor <8 x i16> %tmp2, < i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1 >
419
%tmp4 = or <8 x i16> %tmp1, %tmp3
423
define <4 x i32> @v_ornQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
426
%tmp1 = load <4 x i32>* %A
427
%tmp2 = load <4 x i32>* %B
428
%tmp3 = xor <4 x i32> %tmp2, < i32 -1, i32 -1, i32 -1, i32 -1 >
429
%tmp4 = or <4 x i32> %tmp1, %tmp3
433
define <2 x i64> @v_ornQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
436
%tmp1 = load <2 x i64>* %A
437
%tmp2 = load <2 x i64>* %B
438
%tmp3 = xor <2 x i64> %tmp2, < i64 -1, i64 -1 >
439
%tmp4 = or <2 x i64> %tmp1, %tmp3
443
define <8 x i8> @vtsti8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
446
%tmp1 = load <8 x i8>* %A
447
%tmp2 = load <8 x i8>* %B
448
%tmp3 = and <8 x i8> %tmp1, %tmp2
449
%tmp4 = icmp ne <8 x i8> %tmp3, zeroinitializer
450
%tmp5 = sext <8 x i1> %tmp4 to <8 x i8>
454
define <4 x i16> @vtsti16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
457
%tmp1 = load <4 x i16>* %A
458
%tmp2 = load <4 x i16>* %B
459
%tmp3 = and <4 x i16> %tmp1, %tmp2
460
%tmp4 = icmp ne <4 x i16> %tmp3, zeroinitializer
461
%tmp5 = sext <4 x i1> %tmp4 to <4 x i16>
465
define <2 x i32> @vtsti32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
468
%tmp1 = load <2 x i32>* %A
469
%tmp2 = load <2 x i32>* %B
470
%tmp3 = and <2 x i32> %tmp1, %tmp2
471
%tmp4 = icmp ne <2 x i32> %tmp3, zeroinitializer
472
%tmp5 = sext <2 x i1> %tmp4 to <2 x i32>
476
define <16 x i8> @vtstQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
479
%tmp1 = load <16 x i8>* %A
480
%tmp2 = load <16 x i8>* %B
481
%tmp3 = and <16 x i8> %tmp1, %tmp2
482
%tmp4 = icmp ne <16 x i8> %tmp3, zeroinitializer
483
%tmp5 = sext <16 x i1> %tmp4 to <16 x i8>
487
define <8 x i16> @vtstQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
490
%tmp1 = load <8 x i16>* %A
491
%tmp2 = load <8 x i16>* %B
492
%tmp3 = and <8 x i16> %tmp1, %tmp2
493
%tmp4 = icmp ne <8 x i16> %tmp3, zeroinitializer
494
%tmp5 = sext <8 x i1> %tmp4 to <8 x i16>
498
define <4 x i32> @vtstQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
501
%tmp1 = load <4 x i32>* %A
502
%tmp2 = load <4 x i32>* %B
503
%tmp3 = and <4 x i32> %tmp1, %tmp2
504
%tmp4 = icmp ne <4 x i32> %tmp3, zeroinitializer
505
%tmp5 = sext <4 x i1> %tmp4 to <4 x i32>