xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/cgp-bitfield-extract.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -mtriple=amdgcn-- -codegenprepare < %s | FileCheck -check-prefix=OPT %s
2*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -mtriple=amdgcn-- -mcpu=tonga -codegenprepare < %s | FileCheck -check-prefix=OPT %s
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=SI %s
4*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VI %s
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; This particular case will actually be worse in terms of code size
7*9880d681SAndroid Build Coastguard Worker; from sinking into both.
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @sink_ubfe_i32(
10*9880d681SAndroid Build Coastguard Worker; OPT: entry:
11*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: br i1
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker; OPT: bb0:
14*9880d681SAndroid Build Coastguard Worker; OPT: %0 = lshr i32 %arg1, 8
15*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: %val0 = and i32 %0, 255
16*9880d681SAndroid Build Coastguard Worker; OPT: br label
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker; OPT: bb1:
19*9880d681SAndroid Build Coastguard Worker; OPT: %1 = lshr i32 %arg1, 8
20*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: %val1 = and i32 %1, 127
21*9880d681SAndroid Build Coastguard Worker; OPT: br label
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker; OPT: ret:
24*9880d681SAndroid Build Coastguard Worker; OPT: store
25*9880d681SAndroid Build Coastguard Worker; OPT: ret
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}sink_ubfe_i32:
29*9880d681SAndroid Build Coastguard Worker; GCN-NOT: lshr
30*9880d681SAndroid Build Coastguard Worker; GCN: s_cbranch_vccnz
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker; GCN: s_bfe_u32 s{{[0-9]+}}, s{{[0-9]+}}, 0x80008
33*9880d681SAndroid Build Coastguard Worker; GCN: BB0_2:
34*9880d681SAndroid Build Coastguard Worker; GCN: s_bfe_u32 s{{[0-9]+}}, s{{[0-9]+}}, 0x70008
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker; GCN: BB0_3:
37*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword
38*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
39*9880d681SAndroid Build Coastguard Workerdefine void @sink_ubfe_i32(i32 addrspace(1)* %out, i32 %arg1) #0 {
40*9880d681SAndroid Build Coastguard Workerentry:
41*9880d681SAndroid Build Coastguard Worker  %shr = lshr i32 %arg1, 8
42*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %bb0, label %bb1
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerbb0:
45*9880d681SAndroid Build Coastguard Worker  %val0 = and i32 %shr, 255
46*9880d681SAndroid Build Coastguard Worker  store volatile i32 0, i32 addrspace(1)* undef
47*9880d681SAndroid Build Coastguard Worker  br label %ret
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Workerbb1:
50*9880d681SAndroid Build Coastguard Worker  %val1 = and i32 %shr, 127
51*9880d681SAndroid Build Coastguard Worker  store volatile i32 0, i32 addrspace(1)* undef
52*9880d681SAndroid Build Coastguard Worker  br label %ret
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerret:
55*9880d681SAndroid Build Coastguard Worker  %phi = phi i32 [ %val0, %bb0 ], [ %val1, %bb1 ]
56*9880d681SAndroid Build Coastguard Worker  store i32 %phi, i32 addrspace(1)* %out
57*9880d681SAndroid Build Coastguard Worker  ret void
58*9880d681SAndroid Build Coastguard Worker}
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @sink_sbfe_i32(
61*9880d681SAndroid Build Coastguard Worker; OPT: entry:
62*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: br i1
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker; OPT: bb0:
65*9880d681SAndroid Build Coastguard Worker; OPT: %0 = ashr i32 %arg1, 8
66*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: %val0 = and i32 %0, 255
67*9880d681SAndroid Build Coastguard Worker; OPT: br label
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker; OPT: bb1:
70*9880d681SAndroid Build Coastguard Worker; OPT: %1 = ashr i32 %arg1, 8
71*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: %val1 = and i32 %1, 127
72*9880d681SAndroid Build Coastguard Worker; OPT: br label
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Worker; OPT: ret:
75*9880d681SAndroid Build Coastguard Worker; OPT: store
76*9880d681SAndroid Build Coastguard Worker; OPT: ret
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}sink_sbfe_i32:
79*9880d681SAndroid Build Coastguard Workerdefine void @sink_sbfe_i32(i32 addrspace(1)* %out, i32 %arg1) #0 {
80*9880d681SAndroid Build Coastguard Workerentry:
81*9880d681SAndroid Build Coastguard Worker  %shr = ashr i32 %arg1, 8
82*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %bb0, label %bb1
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Workerbb0:
85*9880d681SAndroid Build Coastguard Worker  %val0 = and i32 %shr, 255
86*9880d681SAndroid Build Coastguard Worker  store volatile i32 0, i32 addrspace(1)* undef
87*9880d681SAndroid Build Coastguard Worker  br label %ret
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Workerbb1:
90*9880d681SAndroid Build Coastguard Worker  %val1 = and i32 %shr, 127
91*9880d681SAndroid Build Coastguard Worker  store volatile i32 0, i32 addrspace(1)* undef
92*9880d681SAndroid Build Coastguard Worker  br label %ret
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Workerret:
95*9880d681SAndroid Build Coastguard Worker  %phi = phi i32 [ %val0, %bb0 ], [ %val1, %bb1 ]
96*9880d681SAndroid Build Coastguard Worker  store i32 %phi, i32 addrspace(1)* %out
97*9880d681SAndroid Build Coastguard Worker  ret void
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @sink_ubfe_i16(
102*9880d681SAndroid Build Coastguard Worker; OPT: entry:
103*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: br i1
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Worker; OPT: bb0:
106*9880d681SAndroid Build Coastguard Worker; OPT: %0 = lshr i16 %arg1, 4
107*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: %val0 = and i16 %0, 255
108*9880d681SAndroid Build Coastguard Worker; OPT: br label
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Worker; OPT: bb1:
111*9880d681SAndroid Build Coastguard Worker; OPT: %1 = lshr i16 %arg1, 4
112*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: %val1 = and i16 %1, 127
113*9880d681SAndroid Build Coastguard Worker; OPT: br label
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Worker; OPT: ret:
116*9880d681SAndroid Build Coastguard Worker; OPT: store
117*9880d681SAndroid Build Coastguard Worker; OPT: ret
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}sink_ubfe_i16:
121*9880d681SAndroid Build Coastguard Worker; GCN-NOT: lshr
122*9880d681SAndroid Build Coastguard Worker; GCN: s_cbranch_vccnz
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Worker; GCN: s_bfe_u32 s{{[0-9]+}}, s{{[0-9]+}}, 0x80004
125*9880d681SAndroid Build Coastguard Worker; GCN: BB2_2:
126*9880d681SAndroid Build Coastguard Worker; GCN: s_bfe_u32 s{{[0-9]+}}, s{{[0-9]+}}, 0x70004
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Worker; GCN: BB2_3:
129*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_short
130*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
131*9880d681SAndroid Build Coastguard Workerdefine void @sink_ubfe_i16(i16 addrspace(1)* %out, i16 %arg1) #0 {
132*9880d681SAndroid Build Coastguard Workerentry:
133*9880d681SAndroid Build Coastguard Worker  %shr = lshr i16 %arg1, 4
134*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %bb0, label %bb1
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Workerbb0:
137*9880d681SAndroid Build Coastguard Worker  %val0 = and i16 %shr, 255
138*9880d681SAndroid Build Coastguard Worker  store volatile i16 0, i16 addrspace(1)* undef
139*9880d681SAndroid Build Coastguard Worker  br label %ret
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Workerbb1:
142*9880d681SAndroid Build Coastguard Worker  %val1 = and i16 %shr, 127
143*9880d681SAndroid Build Coastguard Worker  store volatile i16 0, i16 addrspace(1)* undef
144*9880d681SAndroid Build Coastguard Worker  br label %ret
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Workerret:
147*9880d681SAndroid Build Coastguard Worker  %phi = phi i16 [ %val0, %bb0 ], [ %val1, %bb1 ]
148*9880d681SAndroid Build Coastguard Worker  store i16 %phi, i16 addrspace(1)* %out
149*9880d681SAndroid Build Coastguard Worker  ret void
150*9880d681SAndroid Build Coastguard Worker}
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Worker; We don't really want to sink this one since it isn't reducible to a
153*9880d681SAndroid Build Coastguard Worker; 32-bit BFE on one half of the integer.
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @sink_ubfe_i64_span_midpoint(
156*9880d681SAndroid Build Coastguard Worker; OPT: entry:
157*9880d681SAndroid Build Coastguard Worker; OPT-NOT: lshr
158*9880d681SAndroid Build Coastguard Worker; OPT: br i1
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Worker; OPT: bb0:
161*9880d681SAndroid Build Coastguard Worker; OPT: %0 = lshr i64 %arg1, 30
162*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: %val0 = and i64 %0, 255
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Worker; OPT: bb1:
165*9880d681SAndroid Build Coastguard Worker; OPT: %1 = lshr i64 %arg1, 30
166*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: %val1 = and i64 %1, 127
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Worker; OPT: ret:
169*9880d681SAndroid Build Coastguard Worker; OPT: store
170*9880d681SAndroid Build Coastguard Worker; OPT: ret
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}sink_ubfe_i64_span_midpoint:
173*9880d681SAndroid Build Coastguard Worker; GCN: s_cbranch_vccnz BB3_2
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Worker; GCN: s_lshr_b64 s{{\[}}[[LO:[0-9]+]]:{{[0-9]+}}], s{{\[[0-9]+:[0-9]+\]}}, 30
176*9880d681SAndroid Build Coastguard Worker; GCN: s_and_b32 s{{[0-9]+}}, s[[LO]], 0xff
177*9880d681SAndroid Build Coastguard Worker
178*9880d681SAndroid Build Coastguard Worker; GCN: BB3_2:
179*9880d681SAndroid Build Coastguard Worker; GCN: s_lshr_b64 s{{\[}}[[LO:[0-9]+]]:{{[0-9]+}}], s{{\[[0-9]+:[0-9]+\]}}, 30
180*9880d681SAndroid Build Coastguard Worker; GCN: s_and_b32 s{{[0-9]+}}, s[[LO]], 0x7f
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Worker; GCN: BB3_3:
183*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2
184*9880d681SAndroid Build Coastguard Workerdefine void @sink_ubfe_i64_span_midpoint(i64 addrspace(1)* %out, i64 %arg1) #0 {
185*9880d681SAndroid Build Coastguard Workerentry:
186*9880d681SAndroid Build Coastguard Worker  %shr = lshr i64 %arg1, 30
187*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %bb0, label %bb1
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Workerbb0:
190*9880d681SAndroid Build Coastguard Worker  %val0 = and i64 %shr, 255
191*9880d681SAndroid Build Coastguard Worker  store volatile i32 0, i32 addrspace(1)* undef
192*9880d681SAndroid Build Coastguard Worker  br label %ret
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Workerbb1:
195*9880d681SAndroid Build Coastguard Worker  %val1 = and i64 %shr, 127
196*9880d681SAndroid Build Coastguard Worker  store volatile i32 0, i32 addrspace(1)* undef
197*9880d681SAndroid Build Coastguard Worker  br label %ret
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Workerret:
200*9880d681SAndroid Build Coastguard Worker  %phi = phi i64 [ %val0, %bb0 ], [ %val1, %bb1 ]
201*9880d681SAndroid Build Coastguard Worker  store i64 %phi, i64 addrspace(1)* %out
202*9880d681SAndroid Build Coastguard Worker  ret void
203*9880d681SAndroid Build Coastguard Worker}
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @sink_ubfe_i64_low32(
206*9880d681SAndroid Build Coastguard Worker; OPT: entry:
207*9880d681SAndroid Build Coastguard Worker; OPT-NOT: lshr
208*9880d681SAndroid Build Coastguard Worker; OPT: br i1
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Worker; OPT: bb0:
211*9880d681SAndroid Build Coastguard Worker; OPT: %0 = lshr i64 %arg1, 15
212*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: %val0 = and i64 %0, 255
213*9880d681SAndroid Build Coastguard Worker
214*9880d681SAndroid Build Coastguard Worker; OPT: bb1:
215*9880d681SAndroid Build Coastguard Worker; OPT: %1 = lshr i64 %arg1, 15
216*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: %val1 = and i64 %1, 127
217*9880d681SAndroid Build Coastguard Worker
218*9880d681SAndroid Build Coastguard Worker; OPT: ret:
219*9880d681SAndroid Build Coastguard Worker; OPT: store
220*9880d681SAndroid Build Coastguard Worker; OPT: ret
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}sink_ubfe_i64_low32:
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Worker; GCN: s_cbranch_vccnz BB4_2
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Worker; GCN: s_bfe_u32 s{{[0-9]+}}, s{{[0-9]+}}, 0x8000f
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Worker; GCN: BB4_2:
229*9880d681SAndroid Build Coastguard Worker; GCN: s_bfe_u32 s{{[0-9]+}}, s{{[0-9]+}}, 0x7000f
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Worker; GCN: BB4_3:
232*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2
233*9880d681SAndroid Build Coastguard Workerdefine void @sink_ubfe_i64_low32(i64 addrspace(1)* %out, i64 %arg1) #0 {
234*9880d681SAndroid Build Coastguard Workerentry:
235*9880d681SAndroid Build Coastguard Worker  %shr = lshr i64 %arg1, 15
236*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %bb0, label %bb1
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Workerbb0:
239*9880d681SAndroid Build Coastguard Worker  %val0 = and i64 %shr, 255
240*9880d681SAndroid Build Coastguard Worker  store volatile i32 0, i32 addrspace(1)* undef
241*9880d681SAndroid Build Coastguard Worker  br label %ret
242*9880d681SAndroid Build Coastguard Worker
243*9880d681SAndroid Build Coastguard Workerbb1:
244*9880d681SAndroid Build Coastguard Worker  %val1 = and i64 %shr, 127
245*9880d681SAndroid Build Coastguard Worker  store volatile i32 0, i32 addrspace(1)* undef
246*9880d681SAndroid Build Coastguard Worker  br label %ret
247*9880d681SAndroid Build Coastguard Worker
248*9880d681SAndroid Build Coastguard Workerret:
249*9880d681SAndroid Build Coastguard Worker  %phi = phi i64 [ %val0, %bb0 ], [ %val1, %bb1 ]
250*9880d681SAndroid Build Coastguard Worker  store i64 %phi, i64 addrspace(1)* %out
251*9880d681SAndroid Build Coastguard Worker  ret void
252*9880d681SAndroid Build Coastguard Worker}
253*9880d681SAndroid Build Coastguard Worker
254*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: @sink_ubfe_i64_high32(
255*9880d681SAndroid Build Coastguard Worker; OPT: entry:
256*9880d681SAndroid Build Coastguard Worker; OPT-NOT: lshr
257*9880d681SAndroid Build Coastguard Worker; OPT: br i1
258*9880d681SAndroid Build Coastguard Worker
259*9880d681SAndroid Build Coastguard Worker; OPT: bb0:
260*9880d681SAndroid Build Coastguard Worker; OPT: %0 = lshr i64 %arg1, 35
261*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: %val0 = and i64 %0, 255
262*9880d681SAndroid Build Coastguard Worker
263*9880d681SAndroid Build Coastguard Worker; OPT: bb1:
264*9880d681SAndroid Build Coastguard Worker; OPT: %1 = lshr i64 %arg1, 35
265*9880d681SAndroid Build Coastguard Worker; OPT-NEXT: %val1 = and i64 %1, 127
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Worker; OPT: ret:
268*9880d681SAndroid Build Coastguard Worker; OPT: store
269*9880d681SAndroid Build Coastguard Worker; OPT: ret
270*9880d681SAndroid Build Coastguard Worker
271*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}sink_ubfe_i64_high32:
272*9880d681SAndroid Build Coastguard Worker; GCN: s_cbranch_vccnz BB5_2
273*9880d681SAndroid Build Coastguard Worker; GCN: s_bfe_u32 s{{[0-9]+}}, s{{[0-9]+}}, 0x80003
274*9880d681SAndroid Build Coastguard Worker
275*9880d681SAndroid Build Coastguard Worker; GCN: BB5_2:
276*9880d681SAndroid Build Coastguard Worker; GCN: s_bfe_u32 s{{[0-9]+}}, s{{[0-9]+}}, 0x70003
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Worker; GCN: BB5_3:
279*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2
280*9880d681SAndroid Build Coastguard Workerdefine void @sink_ubfe_i64_high32(i64 addrspace(1)* %out, i64 %arg1) #0 {
281*9880d681SAndroid Build Coastguard Workerentry:
282*9880d681SAndroid Build Coastguard Worker  %shr = lshr i64 %arg1, 35
283*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %bb0, label %bb1
284*9880d681SAndroid Build Coastguard Worker
285*9880d681SAndroid Build Coastguard Workerbb0:
286*9880d681SAndroid Build Coastguard Worker  %val0 = and i64 %shr, 255
287*9880d681SAndroid Build Coastguard Worker  store volatile i32 0, i32 addrspace(1)* undef
288*9880d681SAndroid Build Coastguard Worker  br label %ret
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Workerbb1:
291*9880d681SAndroid Build Coastguard Worker  %val1 = and i64 %shr, 127
292*9880d681SAndroid Build Coastguard Worker  store volatile i32 0, i32 addrspace(1)* undef
293*9880d681SAndroid Build Coastguard Worker  br label %ret
294*9880d681SAndroid Build Coastguard Worker
295*9880d681SAndroid Build Coastguard Workerret:
296*9880d681SAndroid Build Coastguard Worker  %phi = phi i64 [ %val0, %bb0 ], [ %val1, %bb1 ]
297*9880d681SAndroid Build Coastguard Worker  store i64 %phi, i64 addrspace(1)* %out
298*9880d681SAndroid Build Coastguard Worker  ret void
299*9880d681SAndroid Build Coastguard Worker}
300*9880d681SAndroid Build Coastguard Worker
301*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind }
302