blob: 880495dd7fb8d08a131ff032d2eb63f40c52c095 [file] [log] [blame]
Owen Anderson60f48702010-11-03 23:15:26 +00001; RUN: llc < %s -march=arm -mattr=+neon -mcpu=cortex-a8 | FileCheck %s
Bob Wilson83815ae2009-10-09 20:20:54 +00002
3define <8 x i8> @v_andi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
4;CHECK: v_andi8:
5;CHECK: vand
6 %tmp1 = load <8 x i8>* %A
7 %tmp2 = load <8 x i8>* %B
8 %tmp3 = and <8 x i8> %tmp1, %tmp2
9 ret <8 x i8> %tmp3
10}
11
12define <4 x i16> @v_andi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
13;CHECK: v_andi16:
14;CHECK: vand
15 %tmp1 = load <4 x i16>* %A
16 %tmp2 = load <4 x i16>* %B
17 %tmp3 = and <4 x i16> %tmp1, %tmp2
18 ret <4 x i16> %tmp3
19}
20
21define <2 x i32> @v_andi32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
22;CHECK: v_andi32:
23;CHECK: vand
24 %tmp1 = load <2 x i32>* %A
25 %tmp2 = load <2 x i32>* %B
26 %tmp3 = and <2 x i32> %tmp1, %tmp2
27 ret <2 x i32> %tmp3
28}
29
30define <1 x i64> @v_andi64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
31;CHECK: v_andi64:
32;CHECK: vand
33 %tmp1 = load <1 x i64>* %A
34 %tmp2 = load <1 x i64>* %B
35 %tmp3 = and <1 x i64> %tmp1, %tmp2
36 ret <1 x i64> %tmp3
37}
38
39define <16 x i8> @v_andQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
40;CHECK: v_andQi8:
41;CHECK: vand
42 %tmp1 = load <16 x i8>* %A
43 %tmp2 = load <16 x i8>* %B
44 %tmp3 = and <16 x i8> %tmp1, %tmp2
45 ret <16 x i8> %tmp3
46}
47
48define <8 x i16> @v_andQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
49;CHECK: v_andQi16:
50;CHECK: vand
51 %tmp1 = load <8 x i16>* %A
52 %tmp2 = load <8 x i16>* %B
53 %tmp3 = and <8 x i16> %tmp1, %tmp2
54 ret <8 x i16> %tmp3
55}
56
57define <4 x i32> @v_andQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
58;CHECK: v_andQi32:
59;CHECK: vand
60 %tmp1 = load <4 x i32>* %A
61 %tmp2 = load <4 x i32>* %B
62 %tmp3 = and <4 x i32> %tmp1, %tmp2
63 ret <4 x i32> %tmp3
64}
65
66define <2 x i64> @v_andQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
67;CHECK: v_andQi64:
68;CHECK: vand
69 %tmp1 = load <2 x i64>* %A
70 %tmp2 = load <2 x i64>* %B
71 %tmp3 = and <2 x i64> %tmp1, %tmp2
72 ret <2 x i64> %tmp3
73}
74
75define <8 x i8> @v_bici8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
76;CHECK: v_bici8:
77;CHECK: vbic
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
82 ret <8 x i8> %tmp4
83}
84
85define <4 x i16> @v_bici16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
86;CHECK: v_bici16:
87;CHECK: vbic
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
92 ret <4 x i16> %tmp4
93}
94
95define <2 x i32> @v_bici32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
96;CHECK: v_bici32:
97;CHECK: vbic
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
102 ret <2 x i32> %tmp4
103}
104
105define <1 x i64> @v_bici64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
106;CHECK: v_bici64:
107;CHECK: vbic
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
112 ret <1 x i64> %tmp4
113}
114
115define <16 x i8> @v_bicQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
116;CHECK: v_bicQi8:
117;CHECK: vbic
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
122 ret <16 x i8> %tmp4
123}
124
125define <8 x i16> @v_bicQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
126;CHECK: v_bicQi16:
127;CHECK: vbic
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
132 ret <8 x i16> %tmp4
133}
134
135define <4 x i32> @v_bicQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
136;CHECK: v_bicQi32:
137;CHECK: vbic
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
142 ret <4 x i32> %tmp4
143}
144
145define <2 x i64> @v_bicQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
146;CHECK: v_bicQi64:
147;CHECK: vbic
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
152 ret <2 x i64> %tmp4
153}
154
155define <8 x i8> @v_eori8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
156;CHECK: v_eori8:
157;CHECK: veor
158 %tmp1 = load <8 x i8>* %A
159 %tmp2 = load <8 x i8>* %B
160 %tmp3 = xor <8 x i8> %tmp1, %tmp2
161 ret <8 x i8> %tmp3
162}
163
164define <4 x i16> @v_eori16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
165;CHECK: v_eori16:
166;CHECK: veor
167 %tmp1 = load <4 x i16>* %A
168 %tmp2 = load <4 x i16>* %B
169 %tmp3 = xor <4 x i16> %tmp1, %tmp2
170 ret <4 x i16> %tmp3
171}
172
173define <2 x i32> @v_eori32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
174;CHECK: v_eori32:
175;CHECK: veor
176 %tmp1 = load <2 x i32>* %A
177 %tmp2 = load <2 x i32>* %B
178 %tmp3 = xor <2 x i32> %tmp1, %tmp2
179 ret <2 x i32> %tmp3
180}
181
182define <1 x i64> @v_eori64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
183;CHECK: v_eori64:
184;CHECK: veor
185 %tmp1 = load <1 x i64>* %A
186 %tmp2 = load <1 x i64>* %B
187 %tmp3 = xor <1 x i64> %tmp1, %tmp2
188 ret <1 x i64> %tmp3
189}
190
191define <16 x i8> @v_eorQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
192;CHECK: v_eorQi8:
193;CHECK: veor
194 %tmp1 = load <16 x i8>* %A
195 %tmp2 = load <16 x i8>* %B
196 %tmp3 = xor <16 x i8> %tmp1, %tmp2
197 ret <16 x i8> %tmp3
198}
199
200define <8 x i16> @v_eorQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
201;CHECK: v_eorQi16:
202;CHECK: veor
203 %tmp1 = load <8 x i16>* %A
204 %tmp2 = load <8 x i16>* %B
205 %tmp3 = xor <8 x i16> %tmp1, %tmp2
206 ret <8 x i16> %tmp3
207}
208
209define <4 x i32> @v_eorQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
210;CHECK: v_eorQi32:
211;CHECK: veor
212 %tmp1 = load <4 x i32>* %A
213 %tmp2 = load <4 x i32>* %B
214 %tmp3 = xor <4 x i32> %tmp1, %tmp2
215 ret <4 x i32> %tmp3
216}
217
218define <2 x i64> @v_eorQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
219;CHECK: v_eorQi64:
220;CHECK: veor
221 %tmp1 = load <2 x i64>* %A
222 %tmp2 = load <2 x i64>* %B
223 %tmp3 = xor <2 x i64> %tmp1, %tmp2
224 ret <2 x i64> %tmp3
225}
226
227define <8 x i8> @v_mvni8(<8 x i8>* %A) nounwind {
228;CHECK: v_mvni8:
229;CHECK: vmvn
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 >
232 ret <8 x i8> %tmp2
233}
234
235define <4 x i16> @v_mvni16(<4 x i16>* %A) nounwind {
236;CHECK: v_mvni16:
237;CHECK: vmvn
238 %tmp1 = load <4 x i16>* %A
239 %tmp2 = xor <4 x i16> %tmp1, < i16 -1, i16 -1, i16 -1, i16 -1 >
240 ret <4 x i16> %tmp2
241}
242
243define <2 x i32> @v_mvni32(<2 x i32>* %A) nounwind {
244;CHECK: v_mvni32:
245;CHECK: vmvn
246 %tmp1 = load <2 x i32>* %A
247 %tmp2 = xor <2 x i32> %tmp1, < i32 -1, i32 -1 >
248 ret <2 x i32> %tmp2
249}
250
251define <1 x i64> @v_mvni64(<1 x i64>* %A) nounwind {
252;CHECK: v_mvni64:
253;CHECK: vmvn
254 %tmp1 = load <1 x i64>* %A
255 %tmp2 = xor <1 x i64> %tmp1, < i64 -1 >
256 ret <1 x i64> %tmp2
257}
258
259define <16 x i8> @v_mvnQi8(<16 x i8>* %A) nounwind {
260;CHECK: v_mvnQi8:
261;CHECK: vmvn
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 >
264 ret <16 x i8> %tmp2
265}
266
267define <8 x i16> @v_mvnQi16(<8 x i16>* %A) nounwind {
268;CHECK: v_mvnQi16:
269;CHECK: vmvn
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 >
272 ret <8 x i16> %tmp2
273}
274
275define <4 x i32> @v_mvnQi32(<4 x i32>* %A) nounwind {
276;CHECK: v_mvnQi32:
277;CHECK: vmvn
278 %tmp1 = load <4 x i32>* %A
279 %tmp2 = xor <4 x i32> %tmp1, < i32 -1, i32 -1, i32 -1, i32 -1 >
280 ret <4 x i32> %tmp2
281}
282
283define <2 x i64> @v_mvnQi64(<2 x i64>* %A) nounwind {
284;CHECK: v_mvnQi64:
285;CHECK: vmvn
286 %tmp1 = load <2 x i64>* %A
287 %tmp2 = xor <2 x i64> %tmp1, < i64 -1, i64 -1 >
288 ret <2 x i64> %tmp2
289}
290
291define <8 x i8> @v_orri8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
292;CHECK: v_orri8:
293;CHECK: vorr
294 %tmp1 = load <8 x i8>* %A
295 %tmp2 = load <8 x i8>* %B
296 %tmp3 = or <8 x i8> %tmp1, %tmp2
297 ret <8 x i8> %tmp3
298}
299
300define <4 x i16> @v_orri16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
301;CHECK: v_orri16:
302;CHECK: vorr
303 %tmp1 = load <4 x i16>* %A
304 %tmp2 = load <4 x i16>* %B
305 %tmp3 = or <4 x i16> %tmp1, %tmp2
306 ret <4 x i16> %tmp3
307}
308
309define <2 x i32> @v_orri32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
310;CHECK: v_orri32:
311;CHECK: vorr
312 %tmp1 = load <2 x i32>* %A
313 %tmp2 = load <2 x i32>* %B
314 %tmp3 = or <2 x i32> %tmp1, %tmp2
315 ret <2 x i32> %tmp3
316}
317
318define <1 x i64> @v_orri64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
319;CHECK: v_orri64:
320;CHECK: vorr
321 %tmp1 = load <1 x i64>* %A
322 %tmp2 = load <1 x i64>* %B
323 %tmp3 = or <1 x i64> %tmp1, %tmp2
324 ret <1 x i64> %tmp3
325}
326
327define <16 x i8> @v_orrQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
328;CHECK: v_orrQi8:
329;CHECK: vorr
330 %tmp1 = load <16 x i8>* %A
331 %tmp2 = load <16 x i8>* %B
332 %tmp3 = or <16 x i8> %tmp1, %tmp2
333 ret <16 x i8> %tmp3
334}
335
336define <8 x i16> @v_orrQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
337;CHECK: v_orrQi16:
338;CHECK: vorr
339 %tmp1 = load <8 x i16>* %A
340 %tmp2 = load <8 x i16>* %B
341 %tmp3 = or <8 x i16> %tmp1, %tmp2
342 ret <8 x i16> %tmp3
343}
344
345define <4 x i32> @v_orrQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
346;CHECK: v_orrQi32:
347;CHECK: vorr
348 %tmp1 = load <4 x i32>* %A
349 %tmp2 = load <4 x i32>* %B
350 %tmp3 = or <4 x i32> %tmp1, %tmp2
351 ret <4 x i32> %tmp3
352}
353
354define <2 x i64> @v_orrQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
355;CHECK: v_orrQi64:
356;CHECK: vorr
357 %tmp1 = load <2 x i64>* %A
358 %tmp2 = load <2 x i64>* %B
359 %tmp3 = or <2 x i64> %tmp1, %tmp2
360 ret <2 x i64> %tmp3
361}
362
363define <8 x i8> @v_orni8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
364;CHECK: v_orni8:
365;CHECK: vorn
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
370 ret <8 x i8> %tmp4
371}
372
373define <4 x i16> @v_orni16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
374;CHECK: v_orni16:
375;CHECK: vorn
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
380 ret <4 x i16> %tmp4
381}
382
383define <2 x i32> @v_orni32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
384;CHECK: v_orni32:
385;CHECK: vorn
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
390 ret <2 x i32> %tmp4
391}
392
393define <1 x i64> @v_orni64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
394;CHECK: v_orni64:
395;CHECK: vorn
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
400 ret <1 x i64> %tmp4
401}
402
403define <16 x i8> @v_ornQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
404;CHECK: v_ornQi8:
405;CHECK: vorn
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
410 ret <16 x i8> %tmp4
411}
412
413define <8 x i16> @v_ornQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
414;CHECK: v_ornQi16:
415;CHECK: vorn
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
420 ret <8 x i16> %tmp4
421}
422
423define <4 x i32> @v_ornQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
424;CHECK: v_ornQi32:
425;CHECK: vorn
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
430 ret <4 x i32> %tmp4
431}
432
433define <2 x i64> @v_ornQi64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
434;CHECK: v_ornQi64:
435;CHECK: vorn
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
440 ret <2 x i64> %tmp4
441}
442
443define <8 x i8> @vtsti8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
444;CHECK: vtsti8:
Bob Wilson3a4a8322010-01-17 06:35:17 +0000445;CHECK: vtst.8
Bob Wilson83815ae2009-10-09 20:20:54 +0000446 %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>
451 ret <8 x i8> %tmp5
452}
453
454define <4 x i16> @vtsti16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
455;CHECK: vtsti16:
Bob Wilson3a4a8322010-01-17 06:35:17 +0000456;CHECK: vtst.16
Bob Wilson83815ae2009-10-09 20:20:54 +0000457 %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>
462 ret <4 x i16> %tmp5
463}
464
465define <2 x i32> @vtsti32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
466;CHECK: vtsti32:
Bob Wilson3a4a8322010-01-17 06:35:17 +0000467;CHECK: vtst.32
Bob Wilson83815ae2009-10-09 20:20:54 +0000468 %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>
473 ret <2 x i32> %tmp5
474}
475
476define <16 x i8> @vtstQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
477;CHECK: vtstQi8:
Bob Wilson3a4a8322010-01-17 06:35:17 +0000478;CHECK: vtst.8
Bob Wilson83815ae2009-10-09 20:20:54 +0000479 %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>
484 ret <16 x i8> %tmp5
485}
486
487define <8 x i16> @vtstQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
488;CHECK: vtstQi16:
Bob Wilson3a4a8322010-01-17 06:35:17 +0000489;CHECK: vtst.16
Bob Wilson83815ae2009-10-09 20:20:54 +0000490 %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>
495 ret <8 x i16> %tmp5
496}
497
498define <4 x i32> @vtstQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
499;CHECK: vtstQi32:
Bob Wilson3a4a8322010-01-17 06:35:17 +0000500;CHECK: vtst.32
Bob Wilson83815ae2009-10-09 20:20:54 +0000501 %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>
506 ret <4 x i32> %tmp5
507}
Owen Andersond9668172010-11-03 22:44:51 +0000508
509define <8 x i8> @v_orrimm(<8 x i8>* %A) nounwind {
510; CHECK: v_orrimm:
511; CHECK-NOT: vmov
512; CHECK-NOT: vmvn
513; CHECK: vorr
514 %tmp1 = load <8 x i8>* %A
515 %tmp3 = or <8 x i8> %tmp1, <i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1>
516 ret <8 x i8> %tmp3
517}
518
519define <16 x i8> @v_orrimmQ(<16 x i8>* %A) nounwind {
520; CHECK: v_orrimmQ
521; CHECK-NOT: vmov
522; CHECK-NOT: vmvn
523; CHECK: vorr
524 %tmp1 = load <16 x i8>* %A
525 %tmp3 = or <16 x i8> %tmp1, <i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1>
526 ret <16 x i8> %tmp3
527}
Owen Anderson080c0922010-11-05 19:27:46 +0000528
529define <8 x i8> @v_bicimm(<8 x i8>* %A) nounwind {
530; CHECK: v_bicimm:
531; CHECK-NOT: vmov
532; CHECK-NOT vmvn
533; CHECK: vbic
534 %tmp1 = load <8 x i8>* %A
535 %tmp3 = and <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0 >
536 ret <8 x i8> %tmp3
537}
538
539define <16 x i8> @v_bicimmQ(<16 x i8>* %A) nounwind {
540; CHECK: v_bicimmQ:
541; CHECK-NOT: vmov
542; CHECK-NOT: vmvn
543; CHECK: vbic
544 %tmp1 = load <16 x i8>* %A
545 %tmp3 = and <16 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0 >
546 ret <16 x i8> %tmp3
547}