1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mcpu=mips32 < %s | FileCheck %s -check-prefixes=ALL,32 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mcpu=mips32r2 < %s | FileCheck %s -check-prefixes=ALL,32 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mcpu=mips32r6 < %s | FileCheck %s -check-prefixes=ALL,32R6 4*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mcpu=mips32 -mattr=dsp < %s | FileCheck %s -check-prefix=DSP 5*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mcpu=mips64 -target-abi n64 < %s | FileCheck %s -check-prefixes=ALL,64 6*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mcpu=mips64r2 -target-abi n64 < %s | FileCheck %s -check-prefixes=ALL,64 7*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mcpu=mips64r6 -target-abi n64 < %s | FileCheck %s -check-prefixes=ALL,64R6 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker; FIXME: The MIPS16 test should check its output 10*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mattr=mips16 < %s 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: madd1: 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker; 32-DAG: sra $[[T0:[0-9]+]], $6, 31 15*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtlo $6 16*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m:m]]add ${{[45]}}, ${{[45]}} 17*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m]]fhi $2 18*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m]]flo $3 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; DSP-DAG: sra $[[T0:[0-9]+]], $6, 31 21*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mtlo $6, $[[AC:ac[0-3]+]] 22*9880d681SAndroid Build Coastguard Worker; DSP-DAG: madd $[[AC]], ${{[45]}}, ${{[45]}} 23*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mfhi $2, $[[AC]] 24*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mflo $3, $[[AC]] 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mul $[[T0:[0-9]+]], ${{[45]}}, ${{[45]}} 27*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: addu $[[T1:[0-9]+]], $[[T0]], $6 28*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: sltu $[[T2:[0-9]+]], $[[T1]], $6 29*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: sra $[[T3:[0-9]+]], $6, 31 30*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: addu $[[T4:[0-9]+]], $[[T2]], $[[T3]] 31*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: muh $[[T5:[0-9]+]], ${{[45]}}, ${{[45]}} 32*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: addu $2, $[[T5]], $[[T4]] 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker; 64-DAG: sll $[[T0:[0-9]+]], $4, 0 35*9880d681SAndroid Build Coastguard Worker; 64-DAG: sll $[[T1:[0-9]+]], $5, 0 36*9880d681SAndroid Build Coastguard Worker; 64-DAG: d[[m:m]]ult $[[T1]], $[[T0]] 37*9880d681SAndroid Build Coastguard Worker; 64-DAG: [[m]]flo $[[T2:[0-9]+]] 38*9880d681SAndroid Build Coastguard Worker; 64-DAG: sll $[[T3:[0-9]+]], $6, 0 39*9880d681SAndroid Build Coastguard Worker; 64-DAG: daddu $2, $[[T2]], $[[T3]] 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sll $[[T0:[0-9]+]], $4, 0 42*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sll $[[T1:[0-9]+]], $5, 0 43*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: dmul $[[T2:[0-9]+]], $[[T1]], $[[T0]] 44*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sll $[[T3:[0-9]+]], $6, 0 45*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: daddu $2, $[[T2]], $[[T3]] 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine i64 @madd1(i32 %a, i32 %b, i32 %c) nounwind readnone { 48*9880d681SAndroid Build Coastguard Workerentry: 49*9880d681SAndroid Build Coastguard Worker %conv = sext i32 %a to i64 50*9880d681SAndroid Build Coastguard Worker %conv2 = sext i32 %b to i64 51*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i64 %conv2, %conv 52*9880d681SAndroid Build Coastguard Worker %conv4 = sext i32 %c to i64 53*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %mul, %conv4 54*9880d681SAndroid Build Coastguard Worker ret i64 %add 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: madd2: 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker; FIXME: We don't really need this instruction 60*9880d681SAndroid Build Coastguard Worker; 32-DAG: addiu $[[T0:[0-9]+]], $zero, 0 61*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtlo $6 62*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m:m]]addu ${{[45]}}, ${{[45]}} 63*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m]]fhi $2 64*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m]]flo $3 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker; DSP-DAG: addiu $[[T0:[0-9]+]], $zero, 0 67*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mtlo $6, $[[AC:ac[0-3]+]] 68*9880d681SAndroid Build Coastguard Worker; DSP-DAG: maddu $[[AC]], ${{[45]}}, ${{[45]}} 69*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mfhi $2, $[[AC]] 70*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mflo $3, $[[AC]] 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mul $[[T0:[0-9]+]], ${{[45]}}, ${{[45]}} 73*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: addu $[[T1:[0-9]+]], $[[T0]], $6 74*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: sltu $[[T2:[0-9]+]], $[[T1]], $6 75*9880d681SAndroid Build Coastguard Worker; FIXME: There's a redundant move here. We should remove it 76*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: muhu $[[T3:[0-9]+]], ${{[45]}}, ${{[45]}} 77*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: addu $2, $[[T3]], $[[T2]] 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker; 64-DAG: d[[m:m]]ult $5, $4 80*9880d681SAndroid Build Coastguard Worker; 64-DAG: [[m]]flo $[[T0:[0-9]+]] 81*9880d681SAndroid Build Coastguard Worker; 64-DAG: daddu $2, $[[T0]], $6 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: dmul $[[T0:[0-9]+]], $5, $4 84*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: daddu $2, $[[T0]], $6 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Workerdefine i64 @madd2(i32 zeroext %a, i32 zeroext %b, i32 zeroext %c) nounwind readnone { 87*9880d681SAndroid Build Coastguard Workerentry: 88*9880d681SAndroid Build Coastguard Worker %conv = zext i32 %a to i64 89*9880d681SAndroid Build Coastguard Worker %conv2 = zext i32 %b to i64 90*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i64 %conv2, %conv 91*9880d681SAndroid Build Coastguard Worker %conv4 = zext i32 %c to i64 92*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %mul, %conv4 93*9880d681SAndroid Build Coastguard Worker ret i64 %add 94*9880d681SAndroid Build Coastguard Worker} 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: madd3: 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Worker; 32-DAG: mthi $6 99*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtlo $7 100*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m:m]]add ${{[45]}}, ${{[45]}} 101*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m]]fhi $2 102*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m]]flo $3 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mthi $6, $[[AC:ac[0-3]+]] 105*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mtlo $7, $[[AC]] 106*9880d681SAndroid Build Coastguard Worker; DSP-DAG: madd $[[AC]], ${{[45]}}, ${{[45]}} 107*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mfhi $2, $[[AC]] 108*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mflo $3, $[[AC]] 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mul $[[T0:[0-9]+]], ${{[45]}}, ${{[45]}} 111*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: addu $[[T1:[0-9]+]], $[[T0]], $7 112*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: sltu $[[T2:[0-9]+]], $[[T1]], $7 113*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: addu $[[T4:[0-9]+]], $[[T2]], $6 114*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: muh $[[T5:[0-9]+]], ${{[45]}}, ${{[45]}} 115*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: addu $2, $[[T5]], $[[T4]] 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Worker; 64-DAG: sll $[[T0:[0-9]+]], $4, 0 118*9880d681SAndroid Build Coastguard Worker; 64-DAG: sll $[[T1:[0-9]+]], $5, 0 119*9880d681SAndroid Build Coastguard Worker; 64-DAG: d[[m:m]]ult $[[T1]], $[[T0]] 120*9880d681SAndroid Build Coastguard Worker; 64-DAG: [[m]]flo $[[T2:[0-9]+]] 121*9880d681SAndroid Build Coastguard Worker; 64-DAG: daddu $2, $[[T2]], $6 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sll $[[T0:[0-9]+]], $4, 0 124*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sll $[[T1:[0-9]+]], $5, 0 125*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: dmul $[[T2:[0-9]+]], $[[T1]], $[[T0]] 126*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: daddu $2, $[[T2]], $6 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Workerdefine i64 @madd3(i32 %a, i32 %b, i64 %c) nounwind readnone { 129*9880d681SAndroid Build Coastguard Workerentry: 130*9880d681SAndroid Build Coastguard Worker %conv = sext i32 %a to i64 131*9880d681SAndroid Build Coastguard Worker %conv2 = sext i32 %b to i64 132*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i64 %conv2, %conv 133*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %mul, %c 134*9880d681SAndroid Build Coastguard Worker ret i64 %add 135*9880d681SAndroid Build Coastguard Worker} 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: msub1: 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Worker; 32-DAG: sra $[[T0:[0-9]+]], $6, 31 140*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtlo $6 141*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m:m]]sub ${{[45]}}, ${{[45]}} 142*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m]]fhi $2 143*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m]]flo $3 144*9880d681SAndroid Build Coastguard Worker 145*9880d681SAndroid Build Coastguard Worker; DSP-DAG: sra $[[T0:[0-9]+]], $6, 31 146*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mtlo $6, $[[AC:ac[0-3]+]] 147*9880d681SAndroid Build Coastguard Worker; DSP-DAG: msub $[[AC]], ${{[45]}}, ${{[45]}} 148*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mfhi $2, $[[AC]] 149*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mflo $3, $[[AC]] 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: muh $[[T0:[0-9]+]], ${{[45]}}, ${{[45]}} 152*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mul $[[T1:[0-9]+]], ${{[45]}}, ${{[45]}} 153*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: sltu $[[T3:[0-9]+]], $6, $[[T1]] 154*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: addu $[[T4:[0-9]+]], $[[T3]], $[[T0]] 155*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: sra $[[T5:[0-9]+]], $6, 31 156*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: subu $2, $[[T5]], $[[T4]] 157*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: subu $3, $6, $[[T1]] 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Worker; 64-DAG: sll $[[T0:[0-9]+]], $4, 0 160*9880d681SAndroid Build Coastguard Worker; 64-DAG: sll $[[T1:[0-9]+]], $5, 0 161*9880d681SAndroid Build Coastguard Worker; 64-DAG: d[[m:m]]ult $[[T1]], $[[T0]] 162*9880d681SAndroid Build Coastguard Worker; 64-DAG: [[m]]flo $[[T2:[0-9]+]] 163*9880d681SAndroid Build Coastguard Worker; 64-DAG: sll $[[T3:[0-9]+]], $6, 0 164*9880d681SAndroid Build Coastguard Worker; 64-DAG: dsubu $2, $[[T3]], $[[T2]] 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sll $[[T0:[0-9]+]], $4, 0 167*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sll $[[T1:[0-9]+]], $5, 0 168*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: dmul $[[T2:[0-9]+]], $[[T1]], $[[T0]] 169*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sll $[[T3:[0-9]+]], $6, 0 170*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: dsubu $2, $[[T3]], $[[T2]] 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Workerdefine i64 @msub1(i32 %a, i32 %b, i32 %c) nounwind readnone { 173*9880d681SAndroid Build Coastguard Workerentry: 174*9880d681SAndroid Build Coastguard Worker %conv = sext i32 %c to i64 175*9880d681SAndroid Build Coastguard Worker %conv2 = sext i32 %a to i64 176*9880d681SAndroid Build Coastguard Worker %conv4 = sext i32 %b to i64 177*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i64 %conv4, %conv2 178*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i64 %conv, %mul 179*9880d681SAndroid Build Coastguard Worker ret i64 %sub 180*9880d681SAndroid Build Coastguard Worker} 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: msub2: 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Worker; FIXME: We don't really need this instruction 185*9880d681SAndroid Build Coastguard Worker; 32-DAG: addiu $[[T0:[0-9]+]], $zero, 0 186*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtlo $6 187*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m:m]]subu ${{[45]}}, ${{[45]}} 188*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m]]fhi $2 189*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m]]flo $3 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Worker; DSP-DAG: addiu $[[T0:[0-9]+]], $zero, 0 192*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mtlo $6, $[[AC:ac[0-3]+]] 193*9880d681SAndroid Build Coastguard Worker; DSP-DAG: msubu $[[AC]], ${{[45]}}, ${{[45]}} 194*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mfhi $2, $[[AC]] 195*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mflo $3, $[[AC]] 196*9880d681SAndroid Build Coastguard Worker 197*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: muhu $[[T0:[0-9]+]], ${{[45]}}, ${{[45]}} 198*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mul $[[T1:[0-9]+]], ${{[45]}}, ${{[45]}} 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: sltu $[[T2:[0-9]+]], $6, $[[T1]] 201*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: addu $[[T3:[0-9]+]], $[[T2]], $[[T0]] 202*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: negu $2, $[[T3]] 203*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: subu $3, $6, $[[T1]] 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Worker; 64-DAG: d[[m:m]]ult $5, $4 206*9880d681SAndroid Build Coastguard Worker; 64-DAG: [[m]]flo $[[T0:[0-9]+]] 207*9880d681SAndroid Build Coastguard Worker; 64-DAG: dsubu $2, $6, $[[T0]] 208*9880d681SAndroid Build Coastguard Worker 209*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: dmul $[[T0:[0-9]+]], $5, $4 210*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: dsubu $2, $6, $[[T0]] 211*9880d681SAndroid Build Coastguard Worker 212*9880d681SAndroid Build Coastguard Workerdefine i64 @msub2(i32 zeroext %a, i32 zeroext %b, i32 zeroext %c) nounwind readnone { 213*9880d681SAndroid Build Coastguard Workerentry: 214*9880d681SAndroid Build Coastguard Worker %conv = zext i32 %c to i64 215*9880d681SAndroid Build Coastguard Worker %conv2 = zext i32 %a to i64 216*9880d681SAndroid Build Coastguard Worker %conv4 = zext i32 %b to i64 217*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i64 %conv4, %conv2 218*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i64 %conv, %mul 219*9880d681SAndroid Build Coastguard Worker ret i64 %sub 220*9880d681SAndroid Build Coastguard Worker} 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: msub3: 223*9880d681SAndroid Build Coastguard Worker 224*9880d681SAndroid Build Coastguard Worker; FIXME: We don't really need this instruction 225*9880d681SAndroid Build Coastguard Worker; 32-DAG: mthi $6 226*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtlo $7 227*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m:m]]sub ${{[45]}}, ${{[45]}} 228*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m]]fhi $2 229*9880d681SAndroid Build Coastguard Worker; 32-DAG: [[m]]flo $3 230*9880d681SAndroid Build Coastguard Worker 231*9880d681SAndroid Build Coastguard Worker; DSP-DAG: addiu $[[T0:[0-9]+]], $zero, 0 232*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mtlo $6, $[[AC:ac[0-3]+]] 233*9880d681SAndroid Build Coastguard Worker; DSP-DAG: msub $[[AC]], ${{[45]}}, ${{[45]}} 234*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mfhi $2, $[[AC]] 235*9880d681SAndroid Build Coastguard Worker; DSP-DAG: mflo $3, $[[AC]] 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: muh $[[T0:[0-9]+]], ${{[45]}}, ${{[45]}} 238*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mul $[[T1:[0-9]+]], ${{[45]}}, ${{[45]}} 239*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: sltu $[[T2:[0-9]+]], $7, $[[T1]] 240*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: addu $[[T3:[0-9]+]], $[[T2]], $[[T0]] 241*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: subu $2, $6, $[[T3]] 242*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: subu $3, $7, $[[T1]] 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Worker; 64-DAG: sll $[[T0:[0-9]+]], $4, 0 245*9880d681SAndroid Build Coastguard Worker; 64-DAG: sll $[[T1:[0-9]+]], $5, 0 246*9880d681SAndroid Build Coastguard Worker; 64-DAG: d[[m:m]]ult $[[T1]], $[[T0]] 247*9880d681SAndroid Build Coastguard Worker; 64-DAG: [[m]]flo $[[T2:[0-9]+]] 248*9880d681SAndroid Build Coastguard Worker; 64-DAG: dsubu $2, $6, $[[T2]] 249*9880d681SAndroid Build Coastguard Worker 250*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sll $[[T0:[0-9]+]], $4, 0 251*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sll $[[T1:[0-9]+]], $5, 0 252*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: dmul $[[T2:[0-9]+]], $[[T1]], $[[T0]] 253*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: dsubu $2, $6, $[[T2]] 254*9880d681SAndroid Build Coastguard Worker 255*9880d681SAndroid Build Coastguard Workerdefine i64 @msub3(i32 %a, i32 %b, i64 %c) nounwind readnone { 256*9880d681SAndroid Build Coastguard Workerentry: 257*9880d681SAndroid Build Coastguard Worker %conv = sext i32 %a to i64 258*9880d681SAndroid Build Coastguard Worker %conv3 = sext i32 %b to i64 259*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i64 %conv3, %conv 260*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i64 %c, %mul 261*9880d681SAndroid Build Coastguard Worker ret i64 %sub 262*9880d681SAndroid Build Coastguard Worker} 263