blob: 9a9cc5be09f7903a3c6fd4f263880cc84e1991f0 [file] [log] [blame]
Cameron Zwarichc0e6d782011-03-30 23:01:21 +00001; RUN: llc < %s -march=arm -mattr=+neon | FileCheck %s
2
3define <8 x i8> @v_bsli8(<8 x i8>* %A, <8 x i8>* %B, <8 x i8>* %C) nounwind {
4;CHECK: v_bsli8:
5;CHECK: vbsl
6 %tmp1 = load <8 x i8>* %A
7 %tmp2 = load <8 x i8>* %B
8 %tmp3 = load <8 x i8>* %C
9 %tmp4 = and <8 x i8> %tmp1, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
10 %tmp6 = and <8 x i8> %tmp3, <i8 -4, i8 -4, i8 -4, i8 -4, i8 -4, i8 -4, i8 -4, i8 -4>
11 %tmp7 = or <8 x i8> %tmp4, %tmp6
12 ret <8 x i8> %tmp7
13}
14
15define <4 x i16> @v_bsli16(<4 x i16>* %A, <4 x i16>* %B, <4 x i16>* %C) nounwind {
16;CHECK: v_bsli16:
17;CHECK: vbsl
18 %tmp1 = load <4 x i16>* %A
19 %tmp2 = load <4 x i16>* %B
20 %tmp3 = load <4 x i16>* %C
21 %tmp4 = and <4 x i16> %tmp1, <i16 3, i16 3, i16 3, i16 3>
22 %tmp6 = and <4 x i16> %tmp3, <i16 -4, i16 -4, i16 -4, i16 -4>
23 %tmp7 = or <4 x i16> %tmp4, %tmp6
24 ret <4 x i16> %tmp7
25}
26
27define <2 x i32> @v_bsli32(<2 x i32>* %A, <2 x i32>* %B, <2 x i32>* %C) nounwind {
28;CHECK: v_bsli32:
29;CHECK: vbsl
30 %tmp1 = load <2 x i32>* %A
31 %tmp2 = load <2 x i32>* %B
32 %tmp3 = load <2 x i32>* %C
33 %tmp4 = and <2 x i32> %tmp1, <i32 3, i32 3>
34 %tmp6 = and <2 x i32> %tmp3, <i32 -4, i32 -4>
35 %tmp7 = or <2 x i32> %tmp4, %tmp6
36 ret <2 x i32> %tmp7
37}
38
39define <1 x i64> @v_bsli64(<1 x i64>* %A, <1 x i64>* %B, <1 x i64>* %C) nounwind {
40;CHECK: v_bsli64:
41;CHECK: vbsl
42 %tmp1 = load <1 x i64>* %A
43 %tmp2 = load <1 x i64>* %B
44 %tmp3 = load <1 x i64>* %C
45 %tmp4 = and <1 x i64> %tmp1, <i64 3>
46 %tmp6 = and <1 x i64> %tmp3, <i64 -4>
47 %tmp7 = or <1 x i64> %tmp4, %tmp6
48 ret <1 x i64> %tmp7
49}
50
51define <16 x i8> @v_bslQi8(<16 x i8>* %A, <16 x i8>* %B, <16 x i8>* %C) nounwind {
52;CHECK: v_bslQi8:
53;CHECK: vbsl
54 %tmp1 = load <16 x i8>* %A
55 %tmp2 = load <16 x i8>* %B
56 %tmp3 = load <16 x i8>* %C
57 %tmp4 = and <16 x i8> %tmp1, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
58 %tmp6 = and <16 x i8> %tmp3, <i8 -4, i8 -4, i8 -4, i8 -4, i8 -4, i8 -4, i8 -4, i8 -4, i8 -4, i8 -4, i8 -4, i8 -4, i8 -4, i8 -4, i8 -4, i8 -4>
59 %tmp7 = or <16 x i8> %tmp4, %tmp6
60 ret <16 x i8> %tmp7
61}
62
63define <8 x i16> @v_bslQi16(<8 x i16>* %A, <8 x i16>* %B, <8 x i16>* %C) nounwind {
64;CHECK: v_bslQi16:
65;CHECK: vbsl
66 %tmp1 = load <8 x i16>* %A
67 %tmp2 = load <8 x i16>* %B
68 %tmp3 = load <8 x i16>* %C
69 %tmp4 = and <8 x i16> %tmp1, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
70 %tmp6 = and <8 x i16> %tmp3, <i16 -4, i16 -4, i16 -4, i16 -4, i16 -4, i16 -4, i16 -4, i16 -4>
71 %tmp7 = or <8 x i16> %tmp4, %tmp6
72 ret <8 x i16> %tmp7
73}
74
75define <4 x i32> @v_bslQi32(<4 x i32>* %A, <4 x i32>* %B, <4 x i32>* %C) nounwind {
76;CHECK: v_bslQi32:
77;CHECK: vbsl
78 %tmp1 = load <4 x i32>* %A
79 %tmp2 = load <4 x i32>* %B
80 %tmp3 = load <4 x i32>* %C
81 %tmp4 = and <4 x i32> %tmp1, <i32 3, i32 3, i32 3, i32 3>
82 %tmp6 = and <4 x i32> %tmp3, <i32 -4, i32 -4, i32 -4, i32 -4>
83 %tmp7 = or <4 x i32> %tmp4, %tmp6
84 ret <4 x i32> %tmp7
85}
86
87define <2 x i64> @v_bslQi64(<2 x i64>* %A, <2 x i64>* %B, <2 x i64>* %C) nounwind {
88;CHECK: v_bslQi64:
89;CHECK: vbsl
90 %tmp1 = load <2 x i64>* %A
91 %tmp2 = load <2 x i64>* %B
92 %tmp3 = load <2 x i64>* %C
93 %tmp4 = and <2 x i64> %tmp1, <i64 3, i64 3>
94 %tmp6 = and <2 x i64> %tmp3, <i64 -4, i64 -4>
95 %tmp7 = or <2 x i64> %tmp4, %tmp6
96 ret <2 x i64> %tmp7
97}