1*9880d681SAndroid Build Coastguard Worker; RUN: llc -O1 < %s -march=mips64 -mcpu=octeon | FileCheck %s -check-prefixes=ALL,OCTEON 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -O1 < %s -march=mips64 -mcpu=mips64 | FileCheck %s -check-prefixes=ALL,MIPS64 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine i64 @addi64(i64 %a, i64 %b) nounwind { 5*9880d681SAndroid Build Coastguard Workerentry: 6*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: addi64: 7*9880d681SAndroid Build Coastguard Worker; OCTEON: jr $ra 8*9880d681SAndroid Build Coastguard Worker; OCTEON: baddu $2, $4, $5 9*9880d681SAndroid Build Coastguard Worker; MIPS64: daddu $[[T0:[0-9]+]], $4, $5 10*9880d681SAndroid Build Coastguard Worker; MIPS64: jr $ra 11*9880d681SAndroid Build Coastguard Worker; MIPS64: andi $2, $[[T0]], 255 12*9880d681SAndroid Build Coastguard Worker %add = add i64 %a, %b 13*9880d681SAndroid Build Coastguard Worker %and = and i64 %add, 255 14*9880d681SAndroid Build Coastguard Worker ret i64 %and 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerdefine i64 @mul(i64 %a, i64 %b) nounwind { 18*9880d681SAndroid Build Coastguard Workerentry: 19*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: mul: 20*9880d681SAndroid Build Coastguard Worker; OCTEON: jr $ra 21*9880d681SAndroid Build Coastguard Worker; OCTEON: dmul $2, $4, $5 22*9880d681SAndroid Build Coastguard Worker; MIPS64: dmult $4, $5 23*9880d681SAndroid Build Coastguard Worker; MIPS64: jr $ra 24*9880d681SAndroid Build Coastguard Worker; MIPS64: mflo $2 25*9880d681SAndroid Build Coastguard Worker %res = mul i64 %a, %b 26*9880d681SAndroid Build Coastguard Worker ret i64 %res 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdefine i64 @cmpeq(i64 %a, i64 %b) nounwind { 30*9880d681SAndroid Build Coastguard Workerentry: 31*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cmpeq: 32*9880d681SAndroid Build Coastguard Worker; OCTEON: jr $ra 33*9880d681SAndroid Build Coastguard Worker; OCTEON: seq $2, $4, $5 34*9880d681SAndroid Build Coastguard Worker; MIPS64: xor $[[T0:[0-9]+]], $4, $5 35*9880d681SAndroid Build Coastguard Worker; MIPS64: sltiu $[[T1:[0-9]+]], $[[T0]], 1 36*9880d681SAndroid Build Coastguard Worker; MIPS64: dsll $[[T2:[0-9]+]], $[[T1]], 32 37*9880d681SAndroid Build Coastguard Worker; MIPS64: jr $ra 38*9880d681SAndroid Build Coastguard Worker; MIPS64: dsrl $2, $[[T2]], 32 39*9880d681SAndroid Build Coastguard Worker %res = icmp eq i64 %a, %b 40*9880d681SAndroid Build Coastguard Worker %res2 = zext i1 %res to i64 41*9880d681SAndroid Build Coastguard Worker ret i64 %res2 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine i64 @cmpeqi(i64 %a) nounwind { 45*9880d681SAndroid Build Coastguard Workerentry: 46*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cmpeqi: 47*9880d681SAndroid Build Coastguard Worker; OCTEON: jr $ra 48*9880d681SAndroid Build Coastguard Worker; OCTEON: seqi $2, $4, 42 49*9880d681SAndroid Build Coastguard Worker; MIPS64: daddiu $[[T0:[0-9]+]], $zero, 42 50*9880d681SAndroid Build Coastguard Worker; MIPS64: xor $[[T1:[0-9]+]], $4, $[[T0]] 51*9880d681SAndroid Build Coastguard Worker; MIPS64: sltiu $[[T2:[0-9]+]], $[[T1]], 1 52*9880d681SAndroid Build Coastguard Worker; MIPS64: dsll $[[T3:[0-9]+]], $[[T2]], 32 53*9880d681SAndroid Build Coastguard Worker; MIPS64: jr $ra 54*9880d681SAndroid Build Coastguard Worker; MIPS64: dsrl $2, $[[T3]], 32 55*9880d681SAndroid Build Coastguard Worker %res = icmp eq i64 %a, 42 56*9880d681SAndroid Build Coastguard Worker %res2 = zext i1 %res to i64 57*9880d681SAndroid Build Coastguard Worker ret i64 %res2 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine i64 @cmpne(i64 %a, i64 %b) nounwind { 61*9880d681SAndroid Build Coastguard Workerentry: 62*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cmpne: 63*9880d681SAndroid Build Coastguard Worker; OCTEON: jr $ra 64*9880d681SAndroid Build Coastguard Worker; OCTEON: sne $2, $4, $5 65*9880d681SAndroid Build Coastguard Worker; MIPS64: xor $[[T0:[0-9]+]], $4, $5 66*9880d681SAndroid Build Coastguard Worker; MIPS64: sltu $[[T1:[0-9]+]], $zero, $[[T0]] 67*9880d681SAndroid Build Coastguard Worker; MIPS64: dsll $[[T2:[0-9]+]], $[[T1]], 32 68*9880d681SAndroid Build Coastguard Worker; MIPS64: jr $ra 69*9880d681SAndroid Build Coastguard Worker; MIPS64: dsrl $2, $[[T2]], 32 70*9880d681SAndroid Build Coastguard Worker %res = icmp ne i64 %a, %b 71*9880d681SAndroid Build Coastguard Worker %res2 = zext i1 %res to i64 72*9880d681SAndroid Build Coastguard Worker ret i64 %res2 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workerdefine i64 @cmpnei(i64 %a) nounwind { 76*9880d681SAndroid Build Coastguard Workerentry: 77*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cmpnei: 78*9880d681SAndroid Build Coastguard Worker; OCTEON: jr $ra 79*9880d681SAndroid Build Coastguard Worker; OCTEON: snei $2, $4, 42 80*9880d681SAndroid Build Coastguard Worker; MIPS64: daddiu $[[T0:[0-9]+]], $zero, 42 81*9880d681SAndroid Build Coastguard Worker; MIPS64: xor $[[T1:[0-9]+]], $4, $[[T0]] 82*9880d681SAndroid Build Coastguard Worker; MIPS64: sltu $[[T2:[0-9]+]], $zero, $[[T1]] 83*9880d681SAndroid Build Coastguard Worker; MIPS64: dsll $[[T3:[0-9]+]], $[[T2]], 32 84*9880d681SAndroid Build Coastguard Worker; MIPS64: jr $ra 85*9880d681SAndroid Build Coastguard Worker; MIPS64: dsrl $2, $[[T3]], 32 86*9880d681SAndroid Build Coastguard Worker %res = icmp ne i64 %a, 42 87*9880d681SAndroid Build Coastguard Worker %res2 = zext i1 %res to i64 88*9880d681SAndroid Build Coastguard Worker ret i64 %res2 89*9880d681SAndroid Build Coastguard Worker} 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Workerdefine i64 @bbit0(i64 %a) nounwind { 92*9880d681SAndroid Build Coastguard Workerentry: 93*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: bbit0: 94*9880d681SAndroid Build Coastguard Worker; OCTEON: bbit0 $4, 3, $[[BB0:BB[0-9_]+]] 95*9880d681SAndroid Build Coastguard Worker; MIPS64: andi $[[T0:[0-9]+]], $4, 8 96*9880d681SAndroid Build Coastguard Worker; MIPS64: bnez $[[T0]], $[[BB0:BB[0-9_]+]] 97*9880d681SAndroid Build Coastguard Worker %bit = and i64 %a, 8 98*9880d681SAndroid Build Coastguard Worker %res = icmp eq i64 %bit, 0 99*9880d681SAndroid Build Coastguard Worker br i1 %res, label %endif, label %if 100*9880d681SAndroid Build Coastguard Workerif: 101*9880d681SAndroid Build Coastguard Worker ret i64 48 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerendif: 104*9880d681SAndroid Build Coastguard Worker ret i64 12 105*9880d681SAndroid Build Coastguard Worker} 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Workerdefine i64 @bbit032(i64 %a) nounwind { 108*9880d681SAndroid Build Coastguard Workerentry: 109*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: bbit032: 110*9880d681SAndroid Build Coastguard Worker; OCTEON: bbit032 $4, 3, $[[BB0:BB[0-9_]+]] 111*9880d681SAndroid Build Coastguard Worker; MIPS64: daddiu $[[T0:[0-9]+]], $zero, 1 112*9880d681SAndroid Build Coastguard Worker; MIPS64: dsll $[[T1:[0-9]+]], $[[T0]], 35 113*9880d681SAndroid Build Coastguard Worker; MIPS64: and $[[T2:[0-9]+]], $4, $[[T1]] 114*9880d681SAndroid Build Coastguard Worker; MIPS64: bnez $[[T2]], $[[BB0:BB[0-9_]+]] 115*9880d681SAndroid Build Coastguard Worker %bit = and i64 %a, 34359738368 116*9880d681SAndroid Build Coastguard Worker %res = icmp eq i64 %bit, 0 117*9880d681SAndroid Build Coastguard Worker br i1 %res, label %endif, label %if 118*9880d681SAndroid Build Coastguard Workerif: 119*9880d681SAndroid Build Coastguard Worker ret i64 48 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerendif: 122*9880d681SAndroid Build Coastguard Worker ret i64 12 123*9880d681SAndroid Build Coastguard Worker} 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Workerdefine i64 @bbit1(i64 %a) nounwind { 126*9880d681SAndroid Build Coastguard Workerentry: 127*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: bbit1: 128*9880d681SAndroid Build Coastguard Worker; OCTEON: bbit1 $4, 3, $[[BB0:BB[0-9_]+]] 129*9880d681SAndroid Build Coastguard Worker; MIPS64: andi $[[T0:[0-9]+]], $4, 8 130*9880d681SAndroid Build Coastguard Worker; MIPS64: beqz $[[T0]], $[[BB0:BB[0-9_]+]] 131*9880d681SAndroid Build Coastguard Worker %bit = and i64 %a, 8 132*9880d681SAndroid Build Coastguard Worker %res = icmp ne i64 %bit, 0 133*9880d681SAndroid Build Coastguard Worker br i1 %res, label %endif, label %if 134*9880d681SAndroid Build Coastguard Workerif: 135*9880d681SAndroid Build Coastguard Worker ret i64 48 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Workerendif: 138*9880d681SAndroid Build Coastguard Worker ret i64 12 139*9880d681SAndroid Build Coastguard Worker} 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Workerdefine i64 @bbit132(i64 %a) nounwind { 142*9880d681SAndroid Build Coastguard Workerentry: 143*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: bbit132: 144*9880d681SAndroid Build Coastguard Worker; OCTEON: bbit132 $4, 3, $[[BB0:BB[0-9_]+]] 145*9880d681SAndroid Build Coastguard Worker; MIPS64: daddiu $[[T0:[0-9]+]], $zero, 1 146*9880d681SAndroid Build Coastguard Worker; MIPS64: dsll $[[T1:[0-9]+]], $[[T0]], 35 147*9880d681SAndroid Build Coastguard Worker; MIPS64: and $[[T2:[0-9]+]], $4, $[[T1]] 148*9880d681SAndroid Build Coastguard Worker; MIPS64: beqz $[[T2]], $[[BB0:BB[0-9_]+]] 149*9880d681SAndroid Build Coastguard Worker %bit = and i64 %a, 34359738368 150*9880d681SAndroid Build Coastguard Worker %res = icmp ne i64 %bit, 0 151*9880d681SAndroid Build Coastguard Worker br i1 %res, label %endif, label %if 152*9880d681SAndroid Build Coastguard Workerif: 153*9880d681SAndroid Build Coastguard Worker ret i64 48 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Workerendif: 156*9880d681SAndroid Build Coastguard Worker ret i64 12 157*9880d681SAndroid Build Coastguard Worker} 158