xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/fast-isel-shift.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -fast-isel -fast-isel-abort=1 -mtriple=aarch64-apple-darwin -verify-machineinstrs < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asr_zext_i1_i16
4*9880d681SAndroid Build Coastguard Worker; CHECK:       uxth {{w[0-9]*}}, wzr
5*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @asr_zext_i1_i16(i1 %b) {
6*9880d681SAndroid Build Coastguard Worker  %1 = zext i1 %b to i16
7*9880d681SAndroid Build Coastguard Worker  %2 = ashr i16 %1, 1
8*9880d681SAndroid Build Coastguard Worker  ret i16 %2
9*9880d681SAndroid Build Coastguard Worker}
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asr_sext_i1_i16
12*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfx [[REG1:w[0-9]+]], {{w[0-9]*}}, #0, #1
13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  sxth {{w[0-9]*}}, [[REG1]]
14*9880d681SAndroid Build Coastguard Workerdefine signext i16 @asr_sext_i1_i16(i1 %b) {
15*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %b to i16
16*9880d681SAndroid Build Coastguard Worker  %2 = ashr i16 %1, 1
17*9880d681SAndroid Build Coastguard Worker  ret i16 %2
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asr_zext_i1_i32
21*9880d681SAndroid Build Coastguard Worker; CHECK:       mov {{w[0-9]*}}, wzr
22*9880d681SAndroid Build Coastguard Workerdefine i32 @asr_zext_i1_i32(i1 %b) {
23*9880d681SAndroid Build Coastguard Worker  %1 = zext i1 %b to i32
24*9880d681SAndroid Build Coastguard Worker  %2 = ashr i32 %1, 1
25*9880d681SAndroid Build Coastguard Worker  ret i32 %2
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asr_sext_i1_i32
29*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfx  {{w[0-9]*}}, {{w[0-9]*}}, #0, #1
30*9880d681SAndroid Build Coastguard Workerdefine i32 @asr_sext_i1_i32(i1 %b) {
31*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %b to i32
32*9880d681SAndroid Build Coastguard Worker  %2 = ashr i32 %1, 1
33*9880d681SAndroid Build Coastguard Worker  ret i32 %2
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asr_zext_i1_i64
37*9880d681SAndroid Build Coastguard Worker; CHECK:       mov {{x[0-9]*}}, xzr
38*9880d681SAndroid Build Coastguard Workerdefine i64 @asr_zext_i1_i64(i1 %b) {
39*9880d681SAndroid Build Coastguard Worker  %1 = zext i1 %b to i64
40*9880d681SAndroid Build Coastguard Worker  %2 = ashr i64 %1, 1
41*9880d681SAndroid Build Coastguard Worker  ret i64 %2
42*9880d681SAndroid Build Coastguard Worker}
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asr_sext_i1_i64
45*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfx {{x[0-9]*}}, {{x[0-9]*}}, #0, #1
46*9880d681SAndroid Build Coastguard Workerdefine i64 @asr_sext_i1_i64(i1 %b) {
47*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %b to i64
48*9880d681SAndroid Build Coastguard Worker  %2 = ashr i64 %1, 1
49*9880d681SAndroid Build Coastguard Worker  ret i64 %2
50*9880d681SAndroid Build Coastguard Worker}
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsr_zext_i1_i16
53*9880d681SAndroid Build Coastguard Worker; CHECK:       uxth {{w[0-9]*}}, wzr
54*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @lsr_zext_i1_i16(i1 %b) {
55*9880d681SAndroid Build Coastguard Worker  %1 = zext i1 %b to i16
56*9880d681SAndroid Build Coastguard Worker  %2 = lshr i16 %1, 1
57*9880d681SAndroid Build Coastguard Worker  ret i16 %2
58*9880d681SAndroid Build Coastguard Worker}
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsr_sext_i1_i16
61*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfx [[REG1:w[0-9]+]], {{w[0-9]*}}, #0, #1
62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  ubfx [[REG2:w[0-9]+]], [[REG1]], #1, #15
63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  sxth {{w[0-9]*}}, [[REG2]]
64*9880d681SAndroid Build Coastguard Workerdefine signext i16 @lsr_sext_i1_i16(i1 %b) {
65*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %b to i16
66*9880d681SAndroid Build Coastguard Worker  %2 = lshr i16 %1, 1
67*9880d681SAndroid Build Coastguard Worker  ret i16 %2
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsr_zext_i1_i32
71*9880d681SAndroid Build Coastguard Worker; CHECK:       mov {{w[0-9]*}}, wzr
72*9880d681SAndroid Build Coastguard Workerdefine i32 @lsr_zext_i1_i32(i1 %b) {
73*9880d681SAndroid Build Coastguard Worker  %1 = zext i1 %b to i32
74*9880d681SAndroid Build Coastguard Worker  %2 = lshr i32 %1, 1
75*9880d681SAndroid Build Coastguard Worker  ret i32 %2
76*9880d681SAndroid Build Coastguard Worker}
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsr_sext_i1_i32
79*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfx [[REG1:w[0-9]+]], {{w[0-9]*}}, #0, #1
80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  lsr {{w[0-9]*}}, [[REG1:w[0-9]+]], #1
81*9880d681SAndroid Build Coastguard Workerdefine i32 @lsr_sext_i1_i32(i1 %b) {
82*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %b to i32
83*9880d681SAndroid Build Coastguard Worker  %2 = lshr i32 %1, 1
84*9880d681SAndroid Build Coastguard Worker  ret i32 %2
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsr_zext_i1_i64
88*9880d681SAndroid Build Coastguard Worker; CHECK:       mov {{x[0-9]*}}, xzr
89*9880d681SAndroid Build Coastguard Workerdefine i64 @lsr_zext_i1_i64(i1 %b) {
90*9880d681SAndroid Build Coastguard Worker  %1 = zext i1 %b to i64
91*9880d681SAndroid Build Coastguard Worker  %2 = lshr i64 %1, 1
92*9880d681SAndroid Build Coastguard Worker  ret i64 %2
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_zext_i1_i16
96*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #1
97*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @lsl_zext_i1_i16(i1 %b) {
98*9880d681SAndroid Build Coastguard Worker  %1 = zext i1 %b to i16
99*9880d681SAndroid Build Coastguard Worker  %2 = shl i16 %1, 4
100*9880d681SAndroid Build Coastguard Worker  ret i16 %2
101*9880d681SAndroid Build Coastguard Worker}
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_sext_i1_i16
104*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #1
105*9880d681SAndroid Build Coastguard Workerdefine signext i16 @lsl_sext_i1_i16(i1 %b) {
106*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %b to i16
107*9880d681SAndroid Build Coastguard Worker  %2 = shl i16 %1, 4
108*9880d681SAndroid Build Coastguard Worker  ret i16 %2
109*9880d681SAndroid Build Coastguard Worker}
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_zext_i1_i32
112*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #1
113*9880d681SAndroid Build Coastguard Workerdefine i32 @lsl_zext_i1_i32(i1 %b) {
114*9880d681SAndroid Build Coastguard Worker  %1 = zext i1 %b to i32
115*9880d681SAndroid Build Coastguard Worker  %2 = shl i32 %1, 4
116*9880d681SAndroid Build Coastguard Worker  ret i32 %2
117*9880d681SAndroid Build Coastguard Worker}
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_sext_i1_i32
120*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #1
121*9880d681SAndroid Build Coastguard Workerdefine i32 @lsl_sext_i1_i32(i1 %b) {
122*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %b to i32
123*9880d681SAndroid Build Coastguard Worker  %2 = shl i32 %1, 4
124*9880d681SAndroid Build Coastguard Worker  ret i32 %2
125*9880d681SAndroid Build Coastguard Worker}
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_zext_i1_i64
128*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfiz {{x[0-9]*}}, {{x[0-9]*}}, #4, #1
129*9880d681SAndroid Build Coastguard Workerdefine i64 @lsl_zext_i1_i64(i1 %b) {
130*9880d681SAndroid Build Coastguard Worker  %1 = zext i1 %b to i64
131*9880d681SAndroid Build Coastguard Worker  %2 = shl i64 %1, 4
132*9880d681SAndroid Build Coastguard Worker  ret i64 %2
133*9880d681SAndroid Build Coastguard Worker}
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_sext_i1_i64
136*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfiz {{x[0-9]*}}, {{x[0-9]*}}, #4, #1
137*9880d681SAndroid Build Coastguard Workerdefine i64 @lsl_sext_i1_i64(i1 %b) {
138*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %b to i64
139*9880d681SAndroid Build Coastguard Worker  %2 = shl i64 %1, 4
140*9880d681SAndroid Build Coastguard Worker  ret i64 %2
141*9880d681SAndroid Build Coastguard Worker}
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lslv_i8
144*9880d681SAndroid Build Coastguard Worker; CHECK:       and [[REG1:w[0-9]+]], w1, #0xff
145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  lsl [[REG2:w[0-9]+]], w0, [[REG1]]
146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  and {{w[0-9]+}}, [[REG2]], #0xff
147*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @lslv_i8(i8 %a, i8 %b) {
148*9880d681SAndroid Build Coastguard Worker  %1 = shl i8 %a, %b
149*9880d681SAndroid Build Coastguard Worker  ret i8 %1
150*9880d681SAndroid Build Coastguard Worker}
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_i8
153*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
154*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @lsl_i8(i8 %a) {
155*9880d681SAndroid Build Coastguard Worker  %1 = shl i8 %a, 4
156*9880d681SAndroid Build Coastguard Worker  ret i8 %1
157*9880d681SAndroid Build Coastguard Worker}
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_zext_i8_i16
160*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #8
161*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @lsl_zext_i8_i16(i8 %b) {
162*9880d681SAndroid Build Coastguard Worker  %1 = zext i8 %b to i16
163*9880d681SAndroid Build Coastguard Worker  %2 = shl i16 %1, 4
164*9880d681SAndroid Build Coastguard Worker  ret i16 %2
165*9880d681SAndroid Build Coastguard Worker}
166*9880d681SAndroid Build Coastguard Worker
167*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_sext_i8_i16
168*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #8
169*9880d681SAndroid Build Coastguard Workerdefine signext i16 @lsl_sext_i8_i16(i8 %b) {
170*9880d681SAndroid Build Coastguard Worker  %1 = sext i8 %b to i16
171*9880d681SAndroid Build Coastguard Worker  %2 = shl i16 %1, 4
172*9880d681SAndroid Build Coastguard Worker  ret i16 %2
173*9880d681SAndroid Build Coastguard Worker}
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_zext_i8_i32
176*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #8
177*9880d681SAndroid Build Coastguard Workerdefine i32 @lsl_zext_i8_i32(i8 %b) {
178*9880d681SAndroid Build Coastguard Worker  %1 = zext i8 %b to i32
179*9880d681SAndroid Build Coastguard Worker  %2 = shl i32 %1, 4
180*9880d681SAndroid Build Coastguard Worker  ret i32 %2
181*9880d681SAndroid Build Coastguard Worker}
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_sext_i8_i32
184*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #8
185*9880d681SAndroid Build Coastguard Workerdefine i32 @lsl_sext_i8_i32(i8 %b) {
186*9880d681SAndroid Build Coastguard Worker  %1 = sext i8 %b to i32
187*9880d681SAndroid Build Coastguard Worker  %2 = shl i32 %1, 4
188*9880d681SAndroid Build Coastguard Worker  ret i32 %2
189*9880d681SAndroid Build Coastguard Worker}
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_zext_i8_i64
192*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfiz {{x[0-9]*}}, {{x[0-9]*}}, #4, #8
193*9880d681SAndroid Build Coastguard Workerdefine i64 @lsl_zext_i8_i64(i8 %b) {
194*9880d681SAndroid Build Coastguard Worker  %1 = zext i8 %b to i64
195*9880d681SAndroid Build Coastguard Worker  %2 = shl i64 %1, 4
196*9880d681SAndroid Build Coastguard Worker  ret i64 %2
197*9880d681SAndroid Build Coastguard Worker}
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_sext_i8_i64
200*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfiz {{x[0-9]*}}, {{x[0-9]*}}, #4, #8
201*9880d681SAndroid Build Coastguard Workerdefine i64 @lsl_sext_i8_i64(i8 %b) {
202*9880d681SAndroid Build Coastguard Worker  %1 = sext i8 %b to i64
203*9880d681SAndroid Build Coastguard Worker  %2 = shl i64 %1, 4
204*9880d681SAndroid Build Coastguard Worker  ret i64 %2
205*9880d681SAndroid Build Coastguard Worker}
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lslv_i16
208*9880d681SAndroid Build Coastguard Worker; CHECK:       and [[REG1:w[0-9]+]], w1, #0xffff
209*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  lsl [[REG2:w[0-9]+]], w0, [[REG1]]
210*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  and {{w[0-9]+}}, [[REG2]], #0xffff
211*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @lslv_i16(i16 %a, i16 %b) {
212*9880d681SAndroid Build Coastguard Worker  %1 = shl i16 %a, %b
213*9880d681SAndroid Build Coastguard Worker  ret i16 %1
214*9880d681SAndroid Build Coastguard Worker}
215*9880d681SAndroid Build Coastguard Worker
216*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_i16
217*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfiz {{w[0-9]*}}, {{w[0-9]*}}, #8, #8
218*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @lsl_i16(i16 %a) {
219*9880d681SAndroid Build Coastguard Worker  %1 = shl i16 %a, 8
220*9880d681SAndroid Build Coastguard Worker  ret i16 %1
221*9880d681SAndroid Build Coastguard Worker}
222*9880d681SAndroid Build Coastguard Worker
223*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_zext_i16_i32
224*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfiz {{w[0-9]*}}, {{w[0-9]*}}, #8, #16
225*9880d681SAndroid Build Coastguard Workerdefine i32 @lsl_zext_i16_i32(i16 %b) {
226*9880d681SAndroid Build Coastguard Worker  %1 = zext i16 %b to i32
227*9880d681SAndroid Build Coastguard Worker  %2 = shl i32 %1, 8
228*9880d681SAndroid Build Coastguard Worker  ret i32 %2
229*9880d681SAndroid Build Coastguard Worker}
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_sext_i16_i32
232*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfiz {{w[0-9]*}}, {{w[0-9]*}}, #8, #16
233*9880d681SAndroid Build Coastguard Workerdefine i32 @lsl_sext_i16_i32(i16 %b) {
234*9880d681SAndroid Build Coastguard Worker  %1 = sext i16 %b to i32
235*9880d681SAndroid Build Coastguard Worker  %2 = shl i32 %1, 8
236*9880d681SAndroid Build Coastguard Worker  ret i32 %2
237*9880d681SAndroid Build Coastguard Worker}
238*9880d681SAndroid Build Coastguard Worker
239*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_zext_i16_i64
240*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfiz {{x[0-9]*}}, {{x[0-9]*}}, #8, #16
241*9880d681SAndroid Build Coastguard Workerdefine i64 @lsl_zext_i16_i64(i16 %b) {
242*9880d681SAndroid Build Coastguard Worker  %1 = zext i16 %b to i64
243*9880d681SAndroid Build Coastguard Worker  %2 = shl i64 %1, 8
244*9880d681SAndroid Build Coastguard Worker  ret i64 %2
245*9880d681SAndroid Build Coastguard Worker}
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_sext_i16_i64
248*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfiz {{x[0-9]*}}, {{x[0-9]*}}, #8, #16
249*9880d681SAndroid Build Coastguard Workerdefine i64 @lsl_sext_i16_i64(i16 %b) {
250*9880d681SAndroid Build Coastguard Worker  %1 = sext i16 %b to i64
251*9880d681SAndroid Build Coastguard Worker  %2 = shl i64 %1, 8
252*9880d681SAndroid Build Coastguard Worker  ret i64 %2
253*9880d681SAndroid Build Coastguard Worker}
254*9880d681SAndroid Build Coastguard Worker
255*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lslv_i32
256*9880d681SAndroid Build Coastguard Worker; CHECK:       lsl {{w[0-9]*}}, w0, w1
257*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @lslv_i32(i32 %a, i32 %b) {
258*9880d681SAndroid Build Coastguard Worker  %1 = shl i32 %a, %b
259*9880d681SAndroid Build Coastguard Worker  ret i32 %1
260*9880d681SAndroid Build Coastguard Worker}
261*9880d681SAndroid Build Coastguard Worker
262*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_i32
263*9880d681SAndroid Build Coastguard Worker; CHECK:       lsl {{w[0-9]*}}, {{w[0-9]*}}, #16
264*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @lsl_i32(i32 %a) {
265*9880d681SAndroid Build Coastguard Worker  %1 = shl i32 %a, 16
266*9880d681SAndroid Build Coastguard Worker  ret i32 %1
267*9880d681SAndroid Build Coastguard Worker}
268*9880d681SAndroid Build Coastguard Worker
269*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_zext_i32_i64
270*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfiz {{x[0-9]+}}, {{x[0-9]+}}, #16, #32
271*9880d681SAndroid Build Coastguard Workerdefine i64 @lsl_zext_i32_i64(i32 %b) {
272*9880d681SAndroid Build Coastguard Worker  %1 = zext i32 %b to i64
273*9880d681SAndroid Build Coastguard Worker  %2 = shl i64 %1, 16
274*9880d681SAndroid Build Coastguard Worker  ret i64 %2
275*9880d681SAndroid Build Coastguard Worker}
276*9880d681SAndroid Build Coastguard Worker
277*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_sext_i32_i64
278*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfiz {{x[0-9]+}}, {{x[0-9]+}}, #16, #32
279*9880d681SAndroid Build Coastguard Workerdefine i64 @lsl_sext_i32_i64(i32 %b) {
280*9880d681SAndroid Build Coastguard Worker  %1 = sext i32 %b to i64
281*9880d681SAndroid Build Coastguard Worker  %2 = shl i64 %1, 16
282*9880d681SAndroid Build Coastguard Worker  ret i64 %2
283*9880d681SAndroid Build Coastguard Worker}
284*9880d681SAndroid Build Coastguard Worker
285*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lslv_i64
286*9880d681SAndroid Build Coastguard Worker; CHECK:       lsl {{x[0-9]*}}, x0, x1
287*9880d681SAndroid Build Coastguard Workerdefine i64 @lslv_i64(i64 %a, i64 %b) {
288*9880d681SAndroid Build Coastguard Worker  %1 = shl i64 %a, %b
289*9880d681SAndroid Build Coastguard Worker  ret i64 %1
290*9880d681SAndroid Build Coastguard Worker}
291*9880d681SAndroid Build Coastguard Worker
292*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsl_i64
293*9880d681SAndroid Build Coastguard Worker; CHECK:       lsl {{x[0-9]*}}, {{x[0-9]*}}, #32
294*9880d681SAndroid Build Coastguard Workerdefine i64 @lsl_i64(i64 %a) {
295*9880d681SAndroid Build Coastguard Worker  %1 = shl i64 %a, 32
296*9880d681SAndroid Build Coastguard Worker  ret i64 %1
297*9880d681SAndroid Build Coastguard Worker}
298*9880d681SAndroid Build Coastguard Worker
299*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsrv_i8
300*9880d681SAndroid Build Coastguard Worker; CHECK:       and [[REG1:w[0-9]+]], w0, #0xff
301*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  and [[REG2:w[0-9]+]], w1, #0xff
302*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  lsr [[REG3:w[0-9]+]], [[REG1]], [[REG2]]
303*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  and {{w[0-9]+}}, [[REG3]], #0xff
304*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @lsrv_i8(i8 %a, i8 %b) {
305*9880d681SAndroid Build Coastguard Worker  %1 = lshr i8 %a, %b
306*9880d681SAndroid Build Coastguard Worker  ret i8 %1
307*9880d681SAndroid Build Coastguard Worker}
308*9880d681SAndroid Build Coastguard Worker
309*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsr_i8
310*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfx {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
311*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @lsr_i8(i8 %a) {
312*9880d681SAndroid Build Coastguard Worker  %1 = lshr i8 %a, 4
313*9880d681SAndroid Build Coastguard Worker  ret i8 %1
314*9880d681SAndroid Build Coastguard Worker}
315*9880d681SAndroid Build Coastguard Worker
316*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsr_zext_i8_i16
317*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfx {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
318*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @lsr_zext_i8_i16(i8 %b) {
319*9880d681SAndroid Build Coastguard Worker  %1 = zext i8 %b to i16
320*9880d681SAndroid Build Coastguard Worker  %2 = lshr i16 %1, 4
321*9880d681SAndroid Build Coastguard Worker  ret i16 %2
322*9880d681SAndroid Build Coastguard Worker}
323*9880d681SAndroid Build Coastguard Worker
324*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsr_sext_i8_i16
325*9880d681SAndroid Build Coastguard Worker; CHECK:       sxtb [[REG:w[0-9]+]], w0
326*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  ubfx {{w[0-9]*}}, [[REG]], #4, #12
327*9880d681SAndroid Build Coastguard Workerdefine signext i16 @lsr_sext_i8_i16(i8 %b) {
328*9880d681SAndroid Build Coastguard Worker  %1 = sext i8 %b to i16
329*9880d681SAndroid Build Coastguard Worker  %2 = lshr i16 %1, 4
330*9880d681SAndroid Build Coastguard Worker  ret i16 %2
331*9880d681SAndroid Build Coastguard Worker}
332*9880d681SAndroid Build Coastguard Worker
333*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsr_zext_i8_i32
334*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfx {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
335*9880d681SAndroid Build Coastguard Workerdefine i32 @lsr_zext_i8_i32(i8 %b) {
336*9880d681SAndroid Build Coastguard Worker  %1 = zext i8 %b to i32
337*9880d681SAndroid Build Coastguard Worker  %2 = lshr i32 %1, 4
338*9880d681SAndroid Build Coastguard Worker  ret i32 %2
339*9880d681SAndroid Build Coastguard Worker}
340*9880d681SAndroid Build Coastguard Worker
341*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsr_sext_i8_i32
342*9880d681SAndroid Build Coastguard Worker; CHECK:       sxtb [[REG:w[0-9]+]], w0
343*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  lsr {{w[0-9]*}}, [[REG]], #4
344*9880d681SAndroid Build Coastguard Workerdefine i32 @lsr_sext_i8_i32(i8 %b) {
345*9880d681SAndroid Build Coastguard Worker  %1 = sext i8 %b to i32
346*9880d681SAndroid Build Coastguard Worker  %2 = lshr i32 %1, 4
347*9880d681SAndroid Build Coastguard Worker  ret i32 %2
348*9880d681SAndroid Build Coastguard Worker}
349*9880d681SAndroid Build Coastguard Worker
350*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsrv_i16
351*9880d681SAndroid Build Coastguard Worker; CHECK:       and [[REG1:w[0-9]+]], w0, #0xffff
352*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  and [[REG2:w[0-9]+]], w1, #0xffff
353*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  lsr [[REG3:w[0-9]+]], [[REG1]], [[REG2]]
354*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  and {{w[0-9]+}}, [[REG3]], #0xffff
355*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @lsrv_i16(i16 %a, i16 %b) {
356*9880d681SAndroid Build Coastguard Worker  %1 = lshr i16 %a, %b
357*9880d681SAndroid Build Coastguard Worker  ret i16 %1
358*9880d681SAndroid Build Coastguard Worker}
359*9880d681SAndroid Build Coastguard Worker
360*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsr_i16
361*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfx {{w[0-9]*}}, {{w[0-9]*}}, #8, #8
362*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @lsr_i16(i16 %a) {
363*9880d681SAndroid Build Coastguard Worker  %1 = lshr i16 %a, 8
364*9880d681SAndroid Build Coastguard Worker  ret i16 %1
365*9880d681SAndroid Build Coastguard Worker}
366*9880d681SAndroid Build Coastguard Worker
367*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsrv_i32
368*9880d681SAndroid Build Coastguard Worker; CHECK:       lsr {{w[0-9]*}}, w0, w1
369*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @lsrv_i32(i32 %a, i32 %b) {
370*9880d681SAndroid Build Coastguard Worker  %1 = lshr i32 %a, %b
371*9880d681SAndroid Build Coastguard Worker  ret i32 %1
372*9880d681SAndroid Build Coastguard Worker}
373*9880d681SAndroid Build Coastguard Worker
374*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsr_i32
375*9880d681SAndroid Build Coastguard Worker; CHECK:       lsr {{w[0-9]*}}, {{w[0-9]*}}, #16
376*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @lsr_i32(i32 %a) {
377*9880d681SAndroid Build Coastguard Worker  %1 = lshr i32 %a, 16
378*9880d681SAndroid Build Coastguard Worker  ret i32 %1
379*9880d681SAndroid Build Coastguard Worker}
380*9880d681SAndroid Build Coastguard Worker
381*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsrv_i64
382*9880d681SAndroid Build Coastguard Worker; CHECK:       lsr {{x[0-9]*}}, x0, x1
383*9880d681SAndroid Build Coastguard Workerdefine i64 @lsrv_i64(i64 %a, i64 %b) {
384*9880d681SAndroid Build Coastguard Worker  %1 = lshr i64 %a, %b
385*9880d681SAndroid Build Coastguard Worker  ret i64 %1
386*9880d681SAndroid Build Coastguard Worker}
387*9880d681SAndroid Build Coastguard Worker
388*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lsr_i64
389*9880d681SAndroid Build Coastguard Worker; CHECK:       lsr {{x[0-9]*}}, {{x[0-9]*}}, #32
390*9880d681SAndroid Build Coastguard Workerdefine i64 @lsr_i64(i64 %a) {
391*9880d681SAndroid Build Coastguard Worker  %1 = lshr i64 %a, 32
392*9880d681SAndroid Build Coastguard Worker  ret i64 %1
393*9880d681SAndroid Build Coastguard Worker}
394*9880d681SAndroid Build Coastguard Worker
395*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asrv_i8
396*9880d681SAndroid Build Coastguard Worker; CHECK:       sxtb [[REG1:w[0-9]+]], w0
397*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  and  [[REG2:w[0-9]+]], w1, #0xff
398*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  asr  [[REG3:w[0-9]+]], [[REG1]], [[REG2]]
399*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  and  {{w[0-9]+}}, [[REG3]], #0xff
400*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @asrv_i8(i8 %a, i8 %b) {
401*9880d681SAndroid Build Coastguard Worker  %1 = ashr i8 %a, %b
402*9880d681SAndroid Build Coastguard Worker  ret i8 %1
403*9880d681SAndroid Build Coastguard Worker}
404*9880d681SAndroid Build Coastguard Worker
405*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asr_i8
406*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfx {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
407*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @asr_i8(i8 %a) {
408*9880d681SAndroid Build Coastguard Worker  %1 = ashr i8 %a, 4
409*9880d681SAndroid Build Coastguard Worker  ret i8 %1
410*9880d681SAndroid Build Coastguard Worker}
411*9880d681SAndroid Build Coastguard Worker
412*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asr_zext_i8_i16
413*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfx {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
414*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @asr_zext_i8_i16(i8 %b) {
415*9880d681SAndroid Build Coastguard Worker  %1 = zext i8 %b to i16
416*9880d681SAndroid Build Coastguard Worker  %2 = ashr i16 %1, 4
417*9880d681SAndroid Build Coastguard Worker  ret i16 %2
418*9880d681SAndroid Build Coastguard Worker}
419*9880d681SAndroid Build Coastguard Worker
420*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asr_sext_i8_i16
421*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfx {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
422*9880d681SAndroid Build Coastguard Workerdefine signext i16 @asr_sext_i8_i16(i8 %b) {
423*9880d681SAndroid Build Coastguard Worker  %1 = sext i8 %b to i16
424*9880d681SAndroid Build Coastguard Worker  %2 = ashr i16 %1, 4
425*9880d681SAndroid Build Coastguard Worker  ret i16 %2
426*9880d681SAndroid Build Coastguard Worker}
427*9880d681SAndroid Build Coastguard Worker
428*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asr_zext_i8_i32
429*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfx {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
430*9880d681SAndroid Build Coastguard Workerdefine i32 @asr_zext_i8_i32(i8 %b) {
431*9880d681SAndroid Build Coastguard Worker  %1 = zext i8 %b to i32
432*9880d681SAndroid Build Coastguard Worker  %2 = ashr i32 %1, 4
433*9880d681SAndroid Build Coastguard Worker  ret i32 %2
434*9880d681SAndroid Build Coastguard Worker}
435*9880d681SAndroid Build Coastguard Worker
436*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asr_sext_i8_i32
437*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfx {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
438*9880d681SAndroid Build Coastguard Workerdefine i32 @asr_sext_i8_i32(i8 %b) {
439*9880d681SAndroid Build Coastguard Worker  %1 = sext i8 %b to i32
440*9880d681SAndroid Build Coastguard Worker  %2 = ashr i32 %1, 4
441*9880d681SAndroid Build Coastguard Worker  ret i32 %2
442*9880d681SAndroid Build Coastguard Worker}
443*9880d681SAndroid Build Coastguard Worker
444*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asrv_i16
445*9880d681SAndroid Build Coastguard Worker; CHECK:       sxth [[REG1:w[0-9]+]], w0
446*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  and  [[REG2:w[0-9]+]], w1, #0xffff
447*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  asr  [[REG3:w[0-9]+]], [[REG1]], [[REG2]]
448*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  and  {{w[0-9]+}}, [[REG3]], #0xffff
449*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @asrv_i16(i16 %a, i16 %b) {
450*9880d681SAndroid Build Coastguard Worker  %1 = ashr i16 %a, %b
451*9880d681SAndroid Build Coastguard Worker  ret i16 %1
452*9880d681SAndroid Build Coastguard Worker}
453*9880d681SAndroid Build Coastguard Worker
454*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asr_i16
455*9880d681SAndroid Build Coastguard Worker; CHECK:       sbfx {{w[0-9]*}}, {{w[0-9]*}}, #8, #8
456*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @asr_i16(i16 %a) {
457*9880d681SAndroid Build Coastguard Worker  %1 = ashr i16 %a, 8
458*9880d681SAndroid Build Coastguard Worker  ret i16 %1
459*9880d681SAndroid Build Coastguard Worker}
460*9880d681SAndroid Build Coastguard Worker
461*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asrv_i32
462*9880d681SAndroid Build Coastguard Worker; CHECK:       asr {{w[0-9]*}}, w0, w1
463*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @asrv_i32(i32 %a, i32 %b) {
464*9880d681SAndroid Build Coastguard Worker  %1 = ashr i32 %a, %b
465*9880d681SAndroid Build Coastguard Worker  ret i32 %1
466*9880d681SAndroid Build Coastguard Worker}
467*9880d681SAndroid Build Coastguard Worker
468*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asr_i32
469*9880d681SAndroid Build Coastguard Worker; CHECK:       asr {{w[0-9]*}}, {{w[0-9]*}}, #16
470*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @asr_i32(i32 %a) {
471*9880d681SAndroid Build Coastguard Worker  %1 = ashr i32 %a, 16
472*9880d681SAndroid Build Coastguard Worker  ret i32 %1
473*9880d681SAndroid Build Coastguard Worker}
474*9880d681SAndroid Build Coastguard Worker
475*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asrv_i64
476*9880d681SAndroid Build Coastguard Worker; CHECK:       asr {{x[0-9]*}}, x0, x1
477*9880d681SAndroid Build Coastguard Workerdefine i64 @asrv_i64(i64 %a, i64 %b) {
478*9880d681SAndroid Build Coastguard Worker  %1 = ashr i64 %a, %b
479*9880d681SAndroid Build Coastguard Worker  ret i64 %1
480*9880d681SAndroid Build Coastguard Worker}
481*9880d681SAndroid Build Coastguard Worker
482*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: asr_i64
483*9880d681SAndroid Build Coastguard Worker; CHECK:       asr {{x[0-9]*}}, {{x[0-9]*}}, #32
484*9880d681SAndroid Build Coastguard Workerdefine i64 @asr_i64(i64 %a) {
485*9880d681SAndroid Build Coastguard Worker  %1 = ashr i64 %a, 32
486*9880d681SAndroid Build Coastguard Worker  ret i64 %1
487*9880d681SAndroid Build Coastguard Worker}
488*9880d681SAndroid Build Coastguard Worker
489*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shift_test1
490*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
491*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  sbfx  {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
492*9880d681SAndroid Build Coastguard Workerdefine i32 @shift_test1(i8 %a) {
493*9880d681SAndroid Build Coastguard Worker  %1 = shl i8 %a, 4
494*9880d681SAndroid Build Coastguard Worker  %2 = ashr i8 %1, 4
495*9880d681SAndroid Build Coastguard Worker  %3 = sext i8 %2 to i32
496*9880d681SAndroid Build Coastguard Worker  ret i32 %3
497*9880d681SAndroid Build Coastguard Worker}
498*9880d681SAndroid Build Coastguard Worker
499*9880d681SAndroid Build Coastguard Worker; Test zero shifts
500*9880d681SAndroid Build Coastguard Worker
501*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl_zero
502*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:   lsl
503*9880d681SAndroid Build Coastguard Workerdefine i32 @shl_zero(i32 %a) {
504*9880d681SAndroid Build Coastguard Worker  %1 = shl i32 %a, 0
505*9880d681SAndroid Build Coastguard Worker  ret i32 %1
506*9880d681SAndroid Build Coastguard Worker}
507*9880d681SAndroid Build Coastguard Worker
508*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lshr_zero
509*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:   lsr
510*9880d681SAndroid Build Coastguard Workerdefine i32 @lshr_zero(i32 %a) {
511*9880d681SAndroid Build Coastguard Worker  %1 = lshr i32 %a, 0
512*9880d681SAndroid Build Coastguard Worker  ret i32 %1
513*9880d681SAndroid Build Coastguard Worker}
514*9880d681SAndroid Build Coastguard Worker
515*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ashr_zero
516*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:   asr
517*9880d681SAndroid Build Coastguard Workerdefine i32 @ashr_zero(i32 %a) {
518*9880d681SAndroid Build Coastguard Worker  %1 = ashr i32 %a, 0
519*9880d681SAndroid Build Coastguard Worker  ret i32 %1
520*9880d681SAndroid Build Coastguard Worker}
521*9880d681SAndroid Build Coastguard Worker
522*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl_zext_zero
523*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfx x0, x0, #0, #32
524*9880d681SAndroid Build Coastguard Workerdefine i64 @shl_zext_zero(i32 %a) {
525*9880d681SAndroid Build Coastguard Worker  %1 = zext i32 %a to i64
526*9880d681SAndroid Build Coastguard Worker  %2 = shl i64 %1, 0
527*9880d681SAndroid Build Coastguard Worker  ret i64 %2
528*9880d681SAndroid Build Coastguard Worker}
529*9880d681SAndroid Build Coastguard Worker
530*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lshr_zext_zero
531*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfx x0, x0, #0, #32
532*9880d681SAndroid Build Coastguard Workerdefine i64 @lshr_zext_zero(i32 %a) {
533*9880d681SAndroid Build Coastguard Worker  %1 = zext i32 %a to i64
534*9880d681SAndroid Build Coastguard Worker  %2 = lshr i64 %1, 0
535*9880d681SAndroid Build Coastguard Worker  ret i64 %2
536*9880d681SAndroid Build Coastguard Worker}
537*9880d681SAndroid Build Coastguard Worker
538*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ashr_zext_zero
539*9880d681SAndroid Build Coastguard Worker; CHECK:       ubfx x0, x0, #0, #32
540*9880d681SAndroid Build Coastguard Workerdefine i64 @ashr_zext_zero(i32 %a) {
541*9880d681SAndroid Build Coastguard Worker  %1 = zext i32 %a to i64
542*9880d681SAndroid Build Coastguard Worker  %2 = ashr i64 %1, 0
543*9880d681SAndroid Build Coastguard Worker  ret i64 %2
544*9880d681SAndroid Build Coastguard Worker}
545*9880d681SAndroid Build Coastguard Worker
546