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