xref: /aosp_15_r20/external/llvm/test/CodeGen/SPARC/64bit.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=sparcv9 -mattr=+popc -disable-sparc-delay-filler -disable-sparc-leaf-proc | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=sparcv9 -mattr=+popc | FileCheck %s -check-prefix=OPT
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ret2:
5*9880d681SAndroid Build Coastguard Worker; CHECK: mov %i1, %i0
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: ret2:
8*9880d681SAndroid Build Coastguard Worker; OPT: retl
9*9880d681SAndroid Build Coastguard Worker; OPT: mov %o1, %o0
10*9880d681SAndroid Build Coastguard Workerdefine i64 @ret2(i64 %a, i64 %b) {
11*9880d681SAndroid Build Coastguard Worker  ret i64 %b
12*9880d681SAndroid Build Coastguard Worker}
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker; CHECK: shl_imm
15*9880d681SAndroid Build Coastguard Worker; CHECK: sllx %i0, 7, %i0
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: shl_imm:
18*9880d681SAndroid Build Coastguard Worker; OPT: retl
19*9880d681SAndroid Build Coastguard Worker; OPT: sllx %o0, 7, %o0
20*9880d681SAndroid Build Coastguard Workerdefine i64 @shl_imm(i64 %a) {
21*9880d681SAndroid Build Coastguard Worker  %x = shl i64 %a, 7
22*9880d681SAndroid Build Coastguard Worker  ret i64 %x
23*9880d681SAndroid Build Coastguard Worker}
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker; CHECK: sra_reg
26*9880d681SAndroid Build Coastguard Worker; CHECK: srax %i0, %i1, %i0
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: sra_reg:
29*9880d681SAndroid Build Coastguard Worker; OPT: retl
30*9880d681SAndroid Build Coastguard Worker; OPT: srax %o0, %o1, %o0
31*9880d681SAndroid Build Coastguard Workerdefine i64 @sra_reg(i64 %a, i64 %b) {
32*9880d681SAndroid Build Coastguard Worker  %x = ashr i64 %a, %b
33*9880d681SAndroid Build Coastguard Worker  ret i64 %x
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker; Immediate materialization. Many of these patterns could actually be merged
37*9880d681SAndroid Build Coastguard Worker; into the restore instruction:
38*9880d681SAndroid Build Coastguard Worker;
39*9880d681SAndroid Build Coastguard Worker;     restore %g0, %g0, %o0
40*9880d681SAndroid Build Coastguard Worker;
41*9880d681SAndroid Build Coastguard Worker; CHECK: ret_imm0
42*9880d681SAndroid Build Coastguard Worker; CHECK: mov 0, %i0
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker; OPT: ret_imm0
45*9880d681SAndroid Build Coastguard Worker; OPT: retl
46*9880d681SAndroid Build Coastguard Worker; OPT: mov 0, %o0
47*9880d681SAndroid Build Coastguard Workerdefine i64 @ret_imm0() {
48*9880d681SAndroid Build Coastguard Worker  ret i64 0
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker; CHECK: ret_simm13
52*9880d681SAndroid Build Coastguard Worker; CHECK: mov -4096, %i0
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Worker; OPT:   ret_simm13
55*9880d681SAndroid Build Coastguard Worker; OPT:   retl
56*9880d681SAndroid Build Coastguard Worker; OPT:   mov -4096, %o0
57*9880d681SAndroid Build Coastguard Workerdefine i64 @ret_simm13() {
58*9880d681SAndroid Build Coastguard Worker  ret i64 -4096
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker; CHECK: ret_sethi
62*9880d681SAndroid Build Coastguard Worker; CHECK: sethi 4, %i0
63*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: or
64*9880d681SAndroid Build Coastguard Worker; CHECK: restore
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker; OPT:  ret_sethi
67*9880d681SAndroid Build Coastguard Worker; OPT:  retl
68*9880d681SAndroid Build Coastguard Worker; OPT:  sethi 4, %o0
69*9880d681SAndroid Build Coastguard Workerdefine i64 @ret_sethi() {
70*9880d681SAndroid Build Coastguard Worker  ret i64 4096
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Worker; CHECK: ret_sethi_or
74*9880d681SAndroid Build Coastguard Worker; CHECK: sethi 4, [[R:%[goli][0-7]]]
75*9880d681SAndroid Build Coastguard Worker; CHECK: or [[R]], 1, %i0
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker; OPT: ret_sethi_or
78*9880d681SAndroid Build Coastguard Worker; OPT: sethi 4, [[R:%[go][0-7]]]
79*9880d681SAndroid Build Coastguard Worker; OPT: retl
80*9880d681SAndroid Build Coastguard Worker; OPT: or [[R]], 1, %o0
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Workerdefine i64 @ret_sethi_or() {
83*9880d681SAndroid Build Coastguard Worker  ret i64 4097
84*9880d681SAndroid Build Coastguard Worker}
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Worker; CHECK: ret_nimm33
87*9880d681SAndroid Build Coastguard Worker; CHECK: sethi 4, [[R:%[goli][0-7]]]
88*9880d681SAndroid Build Coastguard Worker; CHECK: xor [[R]], -4, %i0
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker; OPT: ret_nimm33
91*9880d681SAndroid Build Coastguard Worker; OPT: sethi 4, [[R:%[go][0-7]]]
92*9880d681SAndroid Build Coastguard Worker; OPT: retl
93*9880d681SAndroid Build Coastguard Worker; OPT: xor [[R]], -4, %o0
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workerdefine i64 @ret_nimm33() {
96*9880d681SAndroid Build Coastguard Worker  ret i64 -4100
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Worker; CHECK: ret_bigimm
100*9880d681SAndroid Build Coastguard Worker; CHECK: sethi
101*9880d681SAndroid Build Coastguard Worker; CHECK: sethi
102*9880d681SAndroid Build Coastguard Workerdefine i64 @ret_bigimm() {
103*9880d681SAndroid Build Coastguard Worker  ret i64 6800754272627607872
104*9880d681SAndroid Build Coastguard Worker}
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Worker; CHECK: ret_bigimm2
107*9880d681SAndroid Build Coastguard Worker; CHECK: sethi 1048576
108*9880d681SAndroid Build Coastguard Workerdefine i64 @ret_bigimm2() {
109*9880d681SAndroid Build Coastguard Worker  ret i64 4611686018427387904 ; 0x4000000000000000
110*9880d681SAndroid Build Coastguard Worker}
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Worker; CHECK: reg_reg_alu
113*9880d681SAndroid Build Coastguard Worker; CHECK: add %i0, %i1, [[R0:%[goli][0-7]]]
114*9880d681SAndroid Build Coastguard Worker; CHECK: sub [[R0]], %i2, [[R1:%[goli][0-7]]]
115*9880d681SAndroid Build Coastguard Worker; CHECK: andn [[R1]], %i0, %i0
116*9880d681SAndroid Build Coastguard Workerdefine i64 @reg_reg_alu(i64 %x, i64 %y, i64 %z) {
117*9880d681SAndroid Build Coastguard Worker  %a = add i64 %x, %y
118*9880d681SAndroid Build Coastguard Worker  %b = sub i64 %a, %z
119*9880d681SAndroid Build Coastguard Worker  %c = xor i64 %x, -1
120*9880d681SAndroid Build Coastguard Worker  %d = and i64 %b, %c
121*9880d681SAndroid Build Coastguard Worker  ret i64 %d
122*9880d681SAndroid Build Coastguard Worker}
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Worker; CHECK: reg_imm_alu
125*9880d681SAndroid Build Coastguard Worker; CHECK: add %i0, -5, [[R0:%[goli][0-7]]]
126*9880d681SAndroid Build Coastguard Worker; CHECK: xor [[R0]], 2, %i0
127*9880d681SAndroid Build Coastguard Workerdefine i64 @reg_imm_alu(i64 %x, i64 %y, i64 %z) {
128*9880d681SAndroid Build Coastguard Worker  %a = add i64 %x, -5
129*9880d681SAndroid Build Coastguard Worker  %b = xor i64 %a, 2
130*9880d681SAndroid Build Coastguard Worker  ret i64 %b
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Worker; CHECK: loads
134*9880d681SAndroid Build Coastguard Worker; CHECK: ldx [%i0]
135*9880d681SAndroid Build Coastguard Worker; CHECK: stx %
136*9880d681SAndroid Build Coastguard Worker; CHECK: ld [%i1]
137*9880d681SAndroid Build Coastguard Worker; CHECK: st %
138*9880d681SAndroid Build Coastguard Worker; CHECK: ldsw [%i2]
139*9880d681SAndroid Build Coastguard Worker; CHECK: stx %
140*9880d681SAndroid Build Coastguard Worker; CHECK: ldsh [%i3]
141*9880d681SAndroid Build Coastguard Worker; CHECK: sth %
142*9880d681SAndroid Build Coastguard Workerdefine i64 @loads(i64* %p, i32* %q, i32* %r, i16* %s) {
143*9880d681SAndroid Build Coastguard Worker  %a = load i64, i64* %p
144*9880d681SAndroid Build Coastguard Worker  %ai = add i64 1, %a
145*9880d681SAndroid Build Coastguard Worker  store i64 %ai, i64* %p
146*9880d681SAndroid Build Coastguard Worker  %b = load i32, i32* %q
147*9880d681SAndroid Build Coastguard Worker  %b2 = zext i32 %b to i64
148*9880d681SAndroid Build Coastguard Worker  %bi = trunc i64 %ai to i32
149*9880d681SAndroid Build Coastguard Worker  store i32 %bi, i32* %q
150*9880d681SAndroid Build Coastguard Worker  %c = load i32, i32* %r
151*9880d681SAndroid Build Coastguard Worker  %c2 = sext i32 %c to i64
152*9880d681SAndroid Build Coastguard Worker  store i64 %ai, i64* %p
153*9880d681SAndroid Build Coastguard Worker  %d = load i16, i16* %s
154*9880d681SAndroid Build Coastguard Worker  %d2 = sext i16 %d to i64
155*9880d681SAndroid Build Coastguard Worker  %di = trunc i64 %ai to i16
156*9880d681SAndroid Build Coastguard Worker  store i16 %di, i16* %s
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Worker  %x1 = add i64 %a, %b2
159*9880d681SAndroid Build Coastguard Worker  %x2 = add i64 %c2, %d2
160*9880d681SAndroid Build Coastguard Worker  %x3 = add i64 %x1, %x2
161*9880d681SAndroid Build Coastguard Worker  ret i64 %x3
162*9880d681SAndroid Build Coastguard Worker}
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Worker; CHECK: load_bool
165*9880d681SAndroid Build Coastguard Worker; CHECK: ldub [%i0], %i0
166*9880d681SAndroid Build Coastguard Workerdefine i64 @load_bool(i1* %p) {
167*9880d681SAndroid Build Coastguard Worker  %a = load i1, i1* %p
168*9880d681SAndroid Build Coastguard Worker  %b = zext i1 %a to i64
169*9880d681SAndroid Build Coastguard Worker  ret i64 %b
170*9880d681SAndroid Build Coastguard Worker}
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Worker; CHECK: stores
173*9880d681SAndroid Build Coastguard Worker; CHECK: ldx [%i0+8], [[R:%[goli][0-7]]]
174*9880d681SAndroid Build Coastguard Worker; CHECK: stx [[R]], [%i0+16]
175*9880d681SAndroid Build Coastguard Worker; CHECK: st [[R]], [%i1+-8]
176*9880d681SAndroid Build Coastguard Worker; CHECK: sth [[R]], [%i2+40]
177*9880d681SAndroid Build Coastguard Worker; CHECK: stb [[R]], [%i3+-20]
178*9880d681SAndroid Build Coastguard Workerdefine void @stores(i64* %p, i32* %q, i16* %r, i8* %s) {
179*9880d681SAndroid Build Coastguard Worker  %p1 = getelementptr i64, i64* %p, i64 1
180*9880d681SAndroid Build Coastguard Worker  %p2 = getelementptr i64, i64* %p, i64 2
181*9880d681SAndroid Build Coastguard Worker  %pv = load i64, i64* %p1
182*9880d681SAndroid Build Coastguard Worker  store i64 %pv, i64* %p2
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Worker  %q2 = getelementptr i32, i32* %q, i32 -2
185*9880d681SAndroid Build Coastguard Worker  %qv = trunc i64 %pv to i32
186*9880d681SAndroid Build Coastguard Worker  store i32 %qv, i32* %q2
187*9880d681SAndroid Build Coastguard Worker
188*9880d681SAndroid Build Coastguard Worker  %r2 = getelementptr i16, i16* %r, i16 20
189*9880d681SAndroid Build Coastguard Worker  %rv = trunc i64 %pv to i16
190*9880d681SAndroid Build Coastguard Worker  store i16 %rv, i16* %r2
191*9880d681SAndroid Build Coastguard Worker
192*9880d681SAndroid Build Coastguard Worker  %s2 = getelementptr i8, i8* %s, i8 -20
193*9880d681SAndroid Build Coastguard Worker  %sv = trunc i64 %pv to i8
194*9880d681SAndroid Build Coastguard Worker  store i8 %sv, i8* %s2
195*9880d681SAndroid Build Coastguard Worker
196*9880d681SAndroid Build Coastguard Worker  ret void
197*9880d681SAndroid Build Coastguard Worker}
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Worker; CHECK: promote_shifts
200*9880d681SAndroid Build Coastguard Worker; CHECK: ldub [%i0], [[R:%[goli][0-7]]]
201*9880d681SAndroid Build Coastguard Worker; CHECK: sll [[R]], [[R]], %i0
202*9880d681SAndroid Build Coastguard Workerdefine i8 @promote_shifts(i8* %p) {
203*9880d681SAndroid Build Coastguard Worker  %L24 = load i8, i8* %p
204*9880d681SAndroid Build Coastguard Worker  %L32 = load i8, i8* %p
205*9880d681SAndroid Build Coastguard Worker  %B36 = shl i8 %L24, %L32
206*9880d681SAndroid Build Coastguard Worker  ret i8 %B36
207*9880d681SAndroid Build Coastguard Worker}
208*9880d681SAndroid Build Coastguard Worker
209*9880d681SAndroid Build Coastguard Worker; CHECK: multiply
210*9880d681SAndroid Build Coastguard Worker; CHECK: mulx %i0, %i1, %i0
211*9880d681SAndroid Build Coastguard Workerdefine i64 @multiply(i64 %a, i64 %b) {
212*9880d681SAndroid Build Coastguard Worker  %r = mul i64 %a, %b
213*9880d681SAndroid Build Coastguard Worker  ret i64 %r
214*9880d681SAndroid Build Coastguard Worker}
215*9880d681SAndroid Build Coastguard Worker
216*9880d681SAndroid Build Coastguard Worker; CHECK: signed_divide
217*9880d681SAndroid Build Coastguard Worker; CHECK: sdivx %i0, %i1, %i0
218*9880d681SAndroid Build Coastguard Workerdefine i64 @signed_divide(i64 %a, i64 %b) {
219*9880d681SAndroid Build Coastguard Worker  %r = sdiv i64 %a, %b
220*9880d681SAndroid Build Coastguard Worker  ret i64 %r
221*9880d681SAndroid Build Coastguard Worker}
222*9880d681SAndroid Build Coastguard Worker
223*9880d681SAndroid Build Coastguard Worker; CHECK: unsigned_divide
224*9880d681SAndroid Build Coastguard Worker; CHECK: udivx %i0, %i1, %i0
225*9880d681SAndroid Build Coastguard Workerdefine i64 @unsigned_divide(i64 %a, i64 %b) {
226*9880d681SAndroid Build Coastguard Worker  %r = udiv i64 %a, %b
227*9880d681SAndroid Build Coastguard Worker  ret i64 %r
228*9880d681SAndroid Build Coastguard Worker}
229*9880d681SAndroid Build Coastguard Worker
230*9880d681SAndroid Build Coastguard Workerdefine void @access_fi() {
231*9880d681SAndroid Build Coastguard Workerentry:
232*9880d681SAndroid Build Coastguard Worker  %b = alloca [32 x i8], align 1
233*9880d681SAndroid Build Coastguard Worker  %arraydecay = getelementptr inbounds [32 x i8], [32 x i8]* %b, i64 0, i64 0
234*9880d681SAndroid Build Coastguard Worker  call void @g(i8* %arraydecay) #2
235*9880d681SAndroid Build Coastguard Worker  ret void
236*9880d681SAndroid Build Coastguard Worker}
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Workerdeclare void @g(i8*)
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker; CHECK: expand_setcc
241*9880d681SAndroid Build Coastguard Worker; CHECK: cmp %i0, 1
242*9880d681SAndroid Build Coastguard Worker; CHECK: movl %xcc, 1,
243*9880d681SAndroid Build Coastguard Workerdefine i32 @expand_setcc(i64 %a) {
244*9880d681SAndroid Build Coastguard Worker  %cond = icmp sle i64 %a, 0
245*9880d681SAndroid Build Coastguard Worker  %cast2 = zext i1 %cond to i32
246*9880d681SAndroid Build Coastguard Worker  %RV = sub i32 1, %cast2
247*9880d681SAndroid Build Coastguard Worker  ret i32 %RV
248*9880d681SAndroid Build Coastguard Worker}
249*9880d681SAndroid Build Coastguard Worker
250*9880d681SAndroid Build Coastguard Worker; CHECK: spill_i64
251*9880d681SAndroid Build Coastguard Worker; CHECK: stx
252*9880d681SAndroid Build Coastguard Worker; CHECK: ldx
253*9880d681SAndroid Build Coastguard Workerdefine i64 @spill_i64(i64 %x) {
254*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "", "~{i0},~{i1},~{i2},~{i3},~{i4},~{i5},~{o0},~{o1},~{o2},~{o3},~{o4},~{o5},~{o7},~{l0},~{l1},~{l2},~{l3},~{l4},~{l5},~{l6},~{l7},~{g1},~{g2},~{g3},~{g4},~{g5},~{g6},~{g7}"()
255*9880d681SAndroid Build Coastguard Worker  ret i64 %x
256*9880d681SAndroid Build Coastguard Worker}
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Worker; CHECK: bitcast_i64_f64
259*9880d681SAndroid Build Coastguard Worker; CHECK: std
260*9880d681SAndroid Build Coastguard Worker; CHECK: ldx
261*9880d681SAndroid Build Coastguard Workerdefine i64 @bitcast_i64_f64(double %x) {
262*9880d681SAndroid Build Coastguard Worker  %y = bitcast double %x to i64
263*9880d681SAndroid Build Coastguard Worker  ret i64 %y
264*9880d681SAndroid Build Coastguard Worker}
265*9880d681SAndroid Build Coastguard Worker
266*9880d681SAndroid Build Coastguard Worker; CHECK: bitcast_f64_i64
267*9880d681SAndroid Build Coastguard Worker; CHECK: stx
268*9880d681SAndroid Build Coastguard Worker; CHECK: ldd
269*9880d681SAndroid Build Coastguard Workerdefine double @bitcast_f64_i64(i64 %x) {
270*9880d681SAndroid Build Coastguard Worker  %y = bitcast i64 %x to double
271*9880d681SAndroid Build Coastguard Worker  ret double %y
272*9880d681SAndroid Build Coastguard Worker}
273*9880d681SAndroid Build Coastguard Worker
274*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_zero:
275*9880d681SAndroid Build Coastguard Worker; CHECK: stx %g0, [%i0]
276*9880d681SAndroid Build Coastguard Worker; CHECK: stx %g0, [%i1+8]
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Worker; OPT-LABEL:  store_zero:
279*9880d681SAndroid Build Coastguard Worker; OPT:  stx %g0, [%o0]
280*9880d681SAndroid Build Coastguard Worker; OPT:  stx %g0, [%o1+8]
281*9880d681SAndroid Build Coastguard Workerdefine i64 @store_zero(i64* nocapture %a, i64* nocapture %b) {
282*9880d681SAndroid Build Coastguard Workerentry:
283*9880d681SAndroid Build Coastguard Worker  store i64 0, i64* %a, align 8
284*9880d681SAndroid Build Coastguard Worker  %0 = getelementptr inbounds i64, i64* %b, i32 1
285*9880d681SAndroid Build Coastguard Worker  store i64 0, i64* %0, align 8
286*9880d681SAndroid Build Coastguard Worker  ret i64 0
287*9880d681SAndroid Build Coastguard Worker}
288*9880d681SAndroid Build Coastguard Worker
289*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bit_ops
290*9880d681SAndroid Build Coastguard Worker; CHECK:       popc
291*9880d681SAndroid Build Coastguard Worker
292*9880d681SAndroid Build Coastguard Worker; OPT-LABEL: bit_ops
293*9880d681SAndroid Build Coastguard Worker; OPT:       popc
294*9880d681SAndroid Build Coastguard Worker
295*9880d681SAndroid Build Coastguard Workerdefine i64 @bit_ops(i64 %arg) {
296*9880d681SAndroid Build Coastguard Workerentry:
297*9880d681SAndroid Build Coastguard Worker  %0 = tail call i64 @llvm.ctpop.i64(i64 %arg)
298*9880d681SAndroid Build Coastguard Worker  %1 = tail call i64 @llvm.ctlz.i64(i64 %arg, i1 true)
299*9880d681SAndroid Build Coastguard Worker  %2 = tail call i64 @llvm.cttz.i64(i64 %arg, i1 true)
300*9880d681SAndroid Build Coastguard Worker  %3 = tail call i64 @llvm.bswap.i64(i64 %arg)
301*9880d681SAndroid Build Coastguard Worker  %4 = add i64 %0, %1
302*9880d681SAndroid Build Coastguard Worker  %5 = add i64 %2, %3
303*9880d681SAndroid Build Coastguard Worker  %6 = add i64 %4, %5
304*9880d681SAndroid Build Coastguard Worker  ret i64 %6
305*9880d681SAndroid Build Coastguard Worker}
306*9880d681SAndroid Build Coastguard Worker
307*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.ctpop.i64(i64) nounwind readnone
308*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.ctlz.i64(i64, i1) nounwind readnone
309*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.cttz.i64(i64, i1) nounwind readnone
310*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.bswap.i64(i64) nounwind readnone
311