xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/vshift.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm-eabi -mattr=+neon %s -o - | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vshls8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
4*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshls8:
5*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u8
6*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <8 x i8>, <8 x i8>* %A
7*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <8 x i8>, <8 x i8>* %B
8*9880d681SAndroid Build Coastguard Worker	%tmp3 = shl <8 x i8> %tmp1, %tmp2
9*9880d681SAndroid Build Coastguard Worker	ret <8 x i8> %tmp3
10*9880d681SAndroid Build Coastguard Worker}
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vshls16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
13*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshls16:
14*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u16
15*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <4 x i16>, <4 x i16>* %A
16*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <4 x i16>, <4 x i16>* %B
17*9880d681SAndroid Build Coastguard Worker	%tmp3 = shl <4 x i16> %tmp1, %tmp2
18*9880d681SAndroid Build Coastguard Worker	ret <4 x i16> %tmp3
19*9880d681SAndroid Build Coastguard Worker}
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vshls32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
22*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshls32:
23*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u32
24*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <2 x i32>, <2 x i32>* %A
25*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <2 x i32>, <2 x i32>* %B
26*9880d681SAndroid Build Coastguard Worker	%tmp3 = shl <2 x i32> %tmp1, %tmp2
27*9880d681SAndroid Build Coastguard Worker	ret <2 x i32> %tmp3
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @vshls64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
31*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshls64:
32*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u64
33*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <1 x i64>, <1 x i64>* %A
34*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <1 x i64>, <1 x i64>* %B
35*9880d681SAndroid Build Coastguard Worker	%tmp3 = shl <1 x i64> %tmp1, %tmp2
36*9880d681SAndroid Build Coastguard Worker	ret <1 x i64> %tmp3
37*9880d681SAndroid Build Coastguard Worker}
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vshli8(<8 x i8>* %A) nounwind {
40*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshli8:
41*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i8
42*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <8 x i8>, <8 x i8>* %A
43*9880d681SAndroid Build Coastguard Worker	%tmp2 = shl <8 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >
44*9880d681SAndroid Build Coastguard Worker	ret <8 x i8> %tmp2
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vshli16(<4 x i16>* %A) nounwind {
48*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshli16:
49*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i16
50*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <4 x i16>, <4 x i16>* %A
51*9880d681SAndroid Build Coastguard Worker	%tmp2 = shl <4 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15 >
52*9880d681SAndroid Build Coastguard Worker	ret <4 x i16> %tmp2
53*9880d681SAndroid Build Coastguard Worker}
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vshli32(<2 x i32>* %A) nounwind {
56*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshli32:
57*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i32
58*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <2 x i32>, <2 x i32>* %A
59*9880d681SAndroid Build Coastguard Worker	%tmp2 = shl <2 x i32> %tmp1, < i32 31, i32 31 >
60*9880d681SAndroid Build Coastguard Worker	ret <2 x i32> %tmp2
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @vshli64(<1 x i64>* %A) nounwind {
64*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshli64:
65*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i64
66*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <1 x i64>, <1 x i64>* %A
67*9880d681SAndroid Build Coastguard Worker	%tmp2 = shl <1 x i64> %tmp1, < i64 63 >
68*9880d681SAndroid Build Coastguard Worker	ret <1 x i64> %tmp2
69*9880d681SAndroid Build Coastguard Worker}
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vshlQs8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
72*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQs8:
73*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u8
74*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <16 x i8>, <16 x i8>* %A
75*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <16 x i8>, <16 x i8>* %B
76*9880d681SAndroid Build Coastguard Worker	%tmp3 = shl <16 x i8> %tmp1, %tmp2
77*9880d681SAndroid Build Coastguard Worker	ret <16 x i8> %tmp3
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vshlQs16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
81*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQs16:
82*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u16
83*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <8 x i16>, <8 x i16>* %A
84*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <8 x i16>, <8 x i16>* %B
85*9880d681SAndroid Build Coastguard Worker	%tmp3 = shl <8 x i16> %tmp1, %tmp2
86*9880d681SAndroid Build Coastguard Worker	ret <8 x i16> %tmp3
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vshlQs32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
90*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQs32:
91*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u32
92*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <4 x i32>, <4 x i32>* %A
93*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <4 x i32>, <4 x i32>* %B
94*9880d681SAndroid Build Coastguard Worker	%tmp3 = shl <4 x i32> %tmp1, %tmp2
95*9880d681SAndroid Build Coastguard Worker	ret <4 x i32> %tmp3
96*9880d681SAndroid Build Coastguard Worker}
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vshlQs64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
99*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQs64:
100*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u64
101*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <2 x i64>, <2 x i64>* %A
102*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <2 x i64>, <2 x i64>* %B
103*9880d681SAndroid Build Coastguard Worker	%tmp3 = shl <2 x i64> %tmp1, %tmp2
104*9880d681SAndroid Build Coastguard Worker	ret <2 x i64> %tmp3
105*9880d681SAndroid Build Coastguard Worker}
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vshlQi8(<16 x i8>* %A) nounwind {
108*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQi8:
109*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i8
110*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <16 x i8>, <16 x i8>* %A
111*9880d681SAndroid Build Coastguard Worker	%tmp2 = shl <16 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >
112*9880d681SAndroid Build Coastguard Worker	ret <16 x i8> %tmp2
113*9880d681SAndroid Build Coastguard Worker}
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vshlQi16(<8 x i16>* %A) nounwind {
116*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQi16:
117*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i16
118*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <8 x i16>, <8 x i16>* %A
119*9880d681SAndroid Build Coastguard Worker	%tmp2 = shl <8 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15 >
120*9880d681SAndroid Build Coastguard Worker	ret <8 x i16> %tmp2
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vshlQi32(<4 x i32>* %A) nounwind {
124*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQi32:
125*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i32
126*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <4 x i32>, <4 x i32>* %A
127*9880d681SAndroid Build Coastguard Worker	%tmp2 = shl <4 x i32> %tmp1, < i32 31, i32 31, i32 31, i32 31 >
128*9880d681SAndroid Build Coastguard Worker	ret <4 x i32> %tmp2
129*9880d681SAndroid Build Coastguard Worker}
130*9880d681SAndroid Build Coastguard Worker
131*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vshlQi64(<2 x i64>* %A) nounwind {
132*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQi64:
133*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i64
134*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <2 x i64>, <2 x i64>* %A
135*9880d681SAndroid Build Coastguard Worker	%tmp2 = shl <2 x i64> %tmp1, < i64 63, i64 63 >
136*9880d681SAndroid Build Coastguard Worker	ret <2 x i64> %tmp2
137*9880d681SAndroid Build Coastguard Worker}
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vlshru8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
140*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshru8:
141*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s8
142*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u8
143*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <8 x i8>, <8 x i8>* %A
144*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <8 x i8>, <8 x i8>* %B
145*9880d681SAndroid Build Coastguard Worker	%tmp3 = lshr <8 x i8> %tmp1, %tmp2
146*9880d681SAndroid Build Coastguard Worker	ret <8 x i8> %tmp3
147*9880d681SAndroid Build Coastguard Worker}
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vlshru16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
150*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshru16:
151*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s16
152*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u16
153*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <4 x i16>, <4 x i16>* %A
154*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <4 x i16>, <4 x i16>* %B
155*9880d681SAndroid Build Coastguard Worker	%tmp3 = lshr <4 x i16> %tmp1, %tmp2
156*9880d681SAndroid Build Coastguard Worker	ret <4 x i16> %tmp3
157*9880d681SAndroid Build Coastguard Worker}
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vlshru32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
160*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshru32:
161*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s32
162*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u32
163*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <2 x i32>, <2 x i32>* %A
164*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <2 x i32>, <2 x i32>* %B
165*9880d681SAndroid Build Coastguard Worker	%tmp3 = lshr <2 x i32> %tmp1, %tmp2
166*9880d681SAndroid Build Coastguard Worker	ret <2 x i32> %tmp3
167*9880d681SAndroid Build Coastguard Worker}
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @vlshru64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
170*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshru64:
171*9880d681SAndroid Build Coastguard Worker;CHECK: vsub.i64
172*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u64
173*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <1 x i64>, <1 x i64>* %A
174*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <1 x i64>, <1 x i64>* %B
175*9880d681SAndroid Build Coastguard Worker	%tmp3 = lshr <1 x i64> %tmp1, %tmp2
176*9880d681SAndroid Build Coastguard Worker	ret <1 x i64> %tmp3
177*9880d681SAndroid Build Coastguard Worker}
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vlshri8(<8 x i8>* %A) nounwind {
180*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshri8:
181*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u8
182*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <8 x i8>, <8 x i8>* %A
183*9880d681SAndroid Build Coastguard Worker	%tmp2 = lshr <8 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >
184*9880d681SAndroid Build Coastguard Worker	ret <8 x i8> %tmp2
185*9880d681SAndroid Build Coastguard Worker}
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vlshri16(<4 x i16>* %A) nounwind {
188*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshri16:
189*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u16
190*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <4 x i16>, <4 x i16>* %A
191*9880d681SAndroid Build Coastguard Worker	%tmp2 = lshr <4 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15 >
192*9880d681SAndroid Build Coastguard Worker	ret <4 x i16> %tmp2
193*9880d681SAndroid Build Coastguard Worker}
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vlshri32(<2 x i32>* %A) nounwind {
196*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshri32:
197*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u32
198*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <2 x i32>, <2 x i32>* %A
199*9880d681SAndroid Build Coastguard Worker	%tmp2 = lshr <2 x i32> %tmp1, < i32 31, i32 31 >
200*9880d681SAndroid Build Coastguard Worker	ret <2 x i32> %tmp2
201*9880d681SAndroid Build Coastguard Worker}
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @vlshri64(<1 x i64>* %A) nounwind {
204*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshri64:
205*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u64
206*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <1 x i64>, <1 x i64>* %A
207*9880d681SAndroid Build Coastguard Worker	%tmp2 = lshr <1 x i64> %tmp1, < i64 63 >
208*9880d681SAndroid Build Coastguard Worker	ret <1 x i64> %tmp2
209*9880d681SAndroid Build Coastguard Worker}
210*9880d681SAndroid Build Coastguard Worker
211*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vlshrQu8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
212*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQu8:
213*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s8
214*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u8
215*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <16 x i8>, <16 x i8>* %A
216*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <16 x i8>, <16 x i8>* %B
217*9880d681SAndroid Build Coastguard Worker	%tmp3 = lshr <16 x i8> %tmp1, %tmp2
218*9880d681SAndroid Build Coastguard Worker	ret <16 x i8> %tmp3
219*9880d681SAndroid Build Coastguard Worker}
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vlshrQu16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
222*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQu16:
223*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s16
224*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u16
225*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <8 x i16>, <8 x i16>* %A
226*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <8 x i16>, <8 x i16>* %B
227*9880d681SAndroid Build Coastguard Worker	%tmp3 = lshr <8 x i16> %tmp1, %tmp2
228*9880d681SAndroid Build Coastguard Worker	ret <8 x i16> %tmp3
229*9880d681SAndroid Build Coastguard Worker}
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vlshrQu32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
232*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQu32:
233*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s32
234*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u32
235*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <4 x i32>, <4 x i32>* %A
236*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <4 x i32>, <4 x i32>* %B
237*9880d681SAndroid Build Coastguard Worker	%tmp3 = lshr <4 x i32> %tmp1, %tmp2
238*9880d681SAndroid Build Coastguard Worker	ret <4 x i32> %tmp3
239*9880d681SAndroid Build Coastguard Worker}
240*9880d681SAndroid Build Coastguard Worker
241*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vlshrQu64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
242*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQu64:
243*9880d681SAndroid Build Coastguard Worker;CHECK: vsub.i64
244*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u64
245*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <2 x i64>, <2 x i64>* %A
246*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <2 x i64>, <2 x i64>* %B
247*9880d681SAndroid Build Coastguard Worker	%tmp3 = lshr <2 x i64> %tmp1, %tmp2
248*9880d681SAndroid Build Coastguard Worker	ret <2 x i64> %tmp3
249*9880d681SAndroid Build Coastguard Worker}
250*9880d681SAndroid Build Coastguard Worker
251*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vlshrQi8(<16 x i8>* %A) nounwind {
252*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQi8:
253*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u8
254*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <16 x i8>, <16 x i8>* %A
255*9880d681SAndroid Build Coastguard Worker	%tmp2 = lshr <16 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >
256*9880d681SAndroid Build Coastguard Worker	ret <16 x i8> %tmp2
257*9880d681SAndroid Build Coastguard Worker}
258*9880d681SAndroid Build Coastguard Worker
259*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vlshrQi16(<8 x i16>* %A) nounwind {
260*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQi16:
261*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u16
262*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <8 x i16>, <8 x i16>* %A
263*9880d681SAndroid Build Coastguard Worker	%tmp2 = lshr <8 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15 >
264*9880d681SAndroid Build Coastguard Worker	ret <8 x i16> %tmp2
265*9880d681SAndroid Build Coastguard Worker}
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vlshrQi32(<4 x i32>* %A) nounwind {
268*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQi32:
269*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u32
270*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <4 x i32>, <4 x i32>* %A
271*9880d681SAndroid Build Coastguard Worker	%tmp2 = lshr <4 x i32> %tmp1, < i32 31, i32 31, i32 31, i32 31 >
272*9880d681SAndroid Build Coastguard Worker	ret <4 x i32> %tmp2
273*9880d681SAndroid Build Coastguard Worker}
274*9880d681SAndroid Build Coastguard Worker
275*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vlshrQi64(<2 x i64>* %A) nounwind {
276*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQi64:
277*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u64
278*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <2 x i64>, <2 x i64>* %A
279*9880d681SAndroid Build Coastguard Worker	%tmp2 = lshr <2 x i64> %tmp1, < i64 63, i64 63 >
280*9880d681SAndroid Build Coastguard Worker	ret <2 x i64> %tmp2
281*9880d681SAndroid Build Coastguard Worker}
282*9880d681SAndroid Build Coastguard Worker
283*9880d681SAndroid Build Coastguard Worker; Example that requires splitting and expanding a vector shift.
284*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @update(<2 x i64> %val) nounwind readnone {
285*9880d681SAndroid Build Coastguard Workerentry:
286*9880d681SAndroid Build Coastguard Worker	%shr = lshr <2 x i64> %val, < i64 2, i64 2 >		; <<2 x i64>> [#uses=1]
287*9880d681SAndroid Build Coastguard Worker	ret <2 x i64> %shr
288*9880d681SAndroid Build Coastguard Worker}
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vashrs8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
291*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrs8:
292*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s8
293*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s8
294*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <8 x i8>, <8 x i8>* %A
295*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <8 x i8>, <8 x i8>* %B
296*9880d681SAndroid Build Coastguard Worker	%tmp3 = ashr <8 x i8> %tmp1, %tmp2
297*9880d681SAndroid Build Coastguard Worker	ret <8 x i8> %tmp3
298*9880d681SAndroid Build Coastguard Worker}
299*9880d681SAndroid Build Coastguard Worker
300*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vashrs16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
301*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrs16:
302*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s16
303*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s16
304*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <4 x i16>, <4 x i16>* %A
305*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <4 x i16>, <4 x i16>* %B
306*9880d681SAndroid Build Coastguard Worker	%tmp3 = ashr <4 x i16> %tmp1, %tmp2
307*9880d681SAndroid Build Coastguard Worker	ret <4 x i16> %tmp3
308*9880d681SAndroid Build Coastguard Worker}
309*9880d681SAndroid Build Coastguard Worker
310*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vashrs32(<2 x i32>* %A, <2 x i32>* %B) nounwind {
311*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrs32:
312*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s32
313*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s32
314*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <2 x i32>, <2 x i32>* %A
315*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <2 x i32>, <2 x i32>* %B
316*9880d681SAndroid Build Coastguard Worker	%tmp3 = ashr <2 x i32> %tmp1, %tmp2
317*9880d681SAndroid Build Coastguard Worker	ret <2 x i32> %tmp3
318*9880d681SAndroid Build Coastguard Worker}
319*9880d681SAndroid Build Coastguard Worker
320*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @vashrs64(<1 x i64>* %A, <1 x i64>* %B) nounwind {
321*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrs64:
322*9880d681SAndroid Build Coastguard Worker;CHECK: vsub.i64
323*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s64
324*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <1 x i64>, <1 x i64>* %A
325*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <1 x i64>, <1 x i64>* %B
326*9880d681SAndroid Build Coastguard Worker	%tmp3 = ashr <1 x i64> %tmp1, %tmp2
327*9880d681SAndroid Build Coastguard Worker	ret <1 x i64> %tmp3
328*9880d681SAndroid Build Coastguard Worker}
329*9880d681SAndroid Build Coastguard Worker
330*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vashri8(<8 x i8>* %A) nounwind {
331*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashri8:
332*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s8
333*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <8 x i8>, <8 x i8>* %A
334*9880d681SAndroid Build Coastguard Worker	%tmp2 = ashr <8 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >
335*9880d681SAndroid Build Coastguard Worker	ret <8 x i8> %tmp2
336*9880d681SAndroid Build Coastguard Worker}
337*9880d681SAndroid Build Coastguard Worker
338*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vashri16(<4 x i16>* %A) nounwind {
339*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashri16:
340*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s16
341*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <4 x i16>, <4 x i16>* %A
342*9880d681SAndroid Build Coastguard Worker	%tmp2 = ashr <4 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15 >
343*9880d681SAndroid Build Coastguard Worker	ret <4 x i16> %tmp2
344*9880d681SAndroid Build Coastguard Worker}
345*9880d681SAndroid Build Coastguard Worker
346*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vashri32(<2 x i32>* %A) nounwind {
347*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashri32:
348*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s32
349*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <2 x i32>, <2 x i32>* %A
350*9880d681SAndroid Build Coastguard Worker	%tmp2 = ashr <2 x i32> %tmp1, < i32 31, i32 31 >
351*9880d681SAndroid Build Coastguard Worker	ret <2 x i32> %tmp2
352*9880d681SAndroid Build Coastguard Worker}
353*9880d681SAndroid Build Coastguard Worker
354*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @vashri64(<1 x i64>* %A) nounwind {
355*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashri64:
356*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s64
357*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <1 x i64>, <1 x i64>* %A
358*9880d681SAndroid Build Coastguard Worker	%tmp2 = ashr <1 x i64> %tmp1, < i64 63 >
359*9880d681SAndroid Build Coastguard Worker	ret <1 x i64> %tmp2
360*9880d681SAndroid Build Coastguard Worker}
361*9880d681SAndroid Build Coastguard Worker
362*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vashrQs8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
363*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQs8:
364*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s8
365*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s8
366*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <16 x i8>, <16 x i8>* %A
367*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <16 x i8>, <16 x i8>* %B
368*9880d681SAndroid Build Coastguard Worker	%tmp3 = ashr <16 x i8> %tmp1, %tmp2
369*9880d681SAndroid Build Coastguard Worker	ret <16 x i8> %tmp3
370*9880d681SAndroid Build Coastguard Worker}
371*9880d681SAndroid Build Coastguard Worker
372*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vashrQs16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
373*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQs16:
374*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s16
375*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s16
376*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <8 x i16>, <8 x i16>* %A
377*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <8 x i16>, <8 x i16>* %B
378*9880d681SAndroid Build Coastguard Worker	%tmp3 = ashr <8 x i16> %tmp1, %tmp2
379*9880d681SAndroid Build Coastguard Worker	ret <8 x i16> %tmp3
380*9880d681SAndroid Build Coastguard Worker}
381*9880d681SAndroid Build Coastguard Worker
382*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vashrQs32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
383*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQs32:
384*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s32
385*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s32
386*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <4 x i32>, <4 x i32>* %A
387*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <4 x i32>, <4 x i32>* %B
388*9880d681SAndroid Build Coastguard Worker	%tmp3 = ashr <4 x i32> %tmp1, %tmp2
389*9880d681SAndroid Build Coastguard Worker	ret <4 x i32> %tmp3
390*9880d681SAndroid Build Coastguard Worker}
391*9880d681SAndroid Build Coastguard Worker
392*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vashrQs64(<2 x i64>* %A, <2 x i64>* %B) nounwind {
393*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQs64:
394*9880d681SAndroid Build Coastguard Worker;CHECK: vsub.i64
395*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s64
396*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <2 x i64>, <2 x i64>* %A
397*9880d681SAndroid Build Coastguard Worker	%tmp2 = load <2 x i64>, <2 x i64>* %B
398*9880d681SAndroid Build Coastguard Worker	%tmp3 = ashr <2 x i64> %tmp1, %tmp2
399*9880d681SAndroid Build Coastguard Worker	ret <2 x i64> %tmp3
400*9880d681SAndroid Build Coastguard Worker}
401*9880d681SAndroid Build Coastguard Worker
402*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vashrQi8(<16 x i8>* %A) nounwind {
403*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQi8:
404*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s8
405*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <16 x i8>, <16 x i8>* %A
406*9880d681SAndroid Build Coastguard Worker	%tmp2 = ashr <16 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >
407*9880d681SAndroid Build Coastguard Worker	ret <16 x i8> %tmp2
408*9880d681SAndroid Build Coastguard Worker}
409*9880d681SAndroid Build Coastguard Worker
410*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vashrQi16(<8 x i16>* %A) nounwind {
411*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQi16:
412*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s16
413*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <8 x i16>, <8 x i16>* %A
414*9880d681SAndroid Build Coastguard Worker	%tmp2 = ashr <8 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15 >
415*9880d681SAndroid Build Coastguard Worker	ret <8 x i16> %tmp2
416*9880d681SAndroid Build Coastguard Worker}
417*9880d681SAndroid Build Coastguard Worker
418*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vashrQi32(<4 x i32>* %A) nounwind {
419*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQi32:
420*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s32
421*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <4 x i32>, <4 x i32>* %A
422*9880d681SAndroid Build Coastguard Worker	%tmp2 = ashr <4 x i32> %tmp1, < i32 31, i32 31, i32 31, i32 31 >
423*9880d681SAndroid Build Coastguard Worker	ret <4 x i32> %tmp2
424*9880d681SAndroid Build Coastguard Worker}
425*9880d681SAndroid Build Coastguard Worker
426*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vashrQi64(<2 x i64>* %A) nounwind {
427*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQi64:
428*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s64
429*9880d681SAndroid Build Coastguard Worker	%tmp1 = load <2 x i64>, <2 x i64>* %A
430*9880d681SAndroid Build Coastguard Worker	%tmp2 = ashr <2 x i64> %tmp1, < i64 63, i64 63 >
431*9880d681SAndroid Build Coastguard Worker	ret <2 x i64> %tmp2
432*9880d681SAndroid Build Coastguard Worker}
433