1*9880d681SAndroid Build Coastguard Worker; Check that madd.[ds], msub.[ds], nmadd.[ds], and nmsub.[ds] are supported 2*9880d681SAndroid Build Coastguard Worker; correctly. 3*9880d681SAndroid Build Coastguard Worker; The spec for nmadd.[ds], and nmsub.[ds] does not state that they obey the 4*9880d681SAndroid Build Coastguard Worker; the Has2008 and ABS2008 configuration bits which govern the conformance to 5*9880d681SAndroid Build Coastguard Worker; IEEE 754 (1985) and IEEE 754 (2008). These instructions are therefore only 6*9880d681SAndroid Build Coastguard Worker; available when -enable-no-nans-fp-math is given. 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mipsel -mcpu=mips32 -enable-no-nans-fp-math | FileCheck %s -check-prefixes=ALL,32,32-NONAN 9*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mipsel -mcpu=mips32r2 -enable-no-nans-fp-math | FileCheck %s -check-prefixes=ALL,32R2,32R2-NONAN 10*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mipsel -mcpu=mips32r6 -enable-no-nans-fp-math | FileCheck %s -check-prefixes=ALL,32R6,32R6-NONAN 11*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64el -mcpu=mips64 -target-abi=n64 -enable-no-nans-fp-math | FileCheck %s -check-prefixes=ALL,64,64-NONAN 12*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64el -mcpu=mips64r2 -target-abi=n64 -enable-no-nans-fp-math | FileCheck %s -check-prefixes=ALL,64R2,64R2-NONAN 13*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64el -mcpu=mips64r6 -target-abi=n64 -enable-no-nans-fp-math | FileCheck %s -check-prefixes=ALL,64R6,64R6-NONAN 14*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mipsel -mcpu=mips32 | FileCheck %s -check-prefixes=ALL,32,32-NAN 15*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mipsel -mcpu=mips32r2 | FileCheck %s -check-prefixes=ALL,32R2,32R2-NAN 16*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mipsel -mcpu=mips32r6 | FileCheck %s -check-prefixes=ALL,32R6,32R6-NAN 17*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64el -mcpu=mips64 -target-abi=n64 | FileCheck %s -check-prefixes=ALL,64,64-NAN 18*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64el -mcpu=mips64r2 -target-abi=n64 | FileCheck %s -check-prefixes=ALL,64R2,64R2-NAN 19*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64el -mcpu=mips64r6 -target-abi=n64 | FileCheck %s -check-prefixes=ALL,64R6,64R6-NAN 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine float @FOO0float(float %a, float %b, float %c) nounwind readnone { 22*9880d681SAndroid Build Coastguard Workerentry: 23*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: FOO0float: 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtc1 $6, $[[T0:f[0-9]+]] 26*9880d681SAndroid Build Coastguard Worker; 32-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f14 27*9880d681SAndroid Build Coastguard Worker; 32-DAG: add.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 28*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 29*9880d681SAndroid Build Coastguard Worker; 32-DAG: add.s $f0, $[[T1]], $[[T2]] 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker; 32R2: mtc1 $6, $[[T0:f[0-9]+]] 32*9880d681SAndroid Build Coastguard Worker; 32R2: madd.s $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 33*9880d681SAndroid Build Coastguard Worker; 32R2: mtc1 $zero, $[[T2:f[0-9]+]] 34*9880d681SAndroid Build Coastguard Worker; 32R2: add.s $f0, $[[T1]], $[[T2]] 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mtc1 $6, $[[T0:f[0-9]+]] 37*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f14 38*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: add.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 39*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 40*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: add.s $f0, $[[T1]], $[[T2]] 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker; 64-DAG: madd.s $[[T0:f[0-9]+]], $f14, $f12, $f13 43*9880d681SAndroid Build Coastguard Worker; 64-DAG: mtc1 $zero, $[[T1:f[0-9]+]] 44*9880d681SAndroid Build Coastguard Worker; 64-DAG: add.s $f0, $[[T0]], $[[T1]] 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Worker; 64R2: madd.s $[[T0:f[0-9]+]], $f14, $f12, $f13 47*9880d681SAndroid Build Coastguard Worker; 64R2: mtc1 $zero, $[[T1:f[0-9]+]] 48*9880d681SAndroid Build Coastguard Worker; 64R2: add.s $f0, $[[T0]], $[[T1]] 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: mul.s $[[T0:f[0-9]+]], $f12, $f13 51*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: add.s $[[T1:f[0-9]+]], $[[T0]], $f14 52*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 53*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: add.s $f0, $[[T1]], $[[T2]] 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker %mul = fmul float %a, %b 56*9880d681SAndroid Build Coastguard Worker %add = fadd float %mul, %c 57*9880d681SAndroid Build Coastguard Worker %add1 = fadd float %add, 0.000000e+00 58*9880d681SAndroid Build Coastguard Worker ret float %add1 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Workerdefine float @FOO1float(float %a, float %b, float %c) nounwind readnone { 62*9880d681SAndroid Build Coastguard Workerentry: 63*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: FOO1float: 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtc1 $6, $[[T0:f[0-9]+]] 66*9880d681SAndroid Build Coastguard Worker; 32-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f14 67*9880d681SAndroid Build Coastguard Worker; 32-DAG: sub.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 68*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 69*9880d681SAndroid Build Coastguard Worker; 32-DAG: add.s $f0, $[[T1]], $[[T2]] 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker; 32R2: mtc1 $6, $[[T0:f[0-9]+]] 72*9880d681SAndroid Build Coastguard Worker; 32R2: msub.s $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 73*9880d681SAndroid Build Coastguard Worker; 32R2: mtc1 $zero, $[[T2:f[0-9]+]] 74*9880d681SAndroid Build Coastguard Worker; 32R2: add.s $f0, $[[T1]], $[[T2]] 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mtc1 $6, $[[T0:f[0-9]+]] 77*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f14 78*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: sub.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 79*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 80*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: add.s $f0, $[[T1]], $[[T2]] 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker; 64-DAG: msub.s $[[T0:f[0-9]+]], $f14, $f12, $f13 83*9880d681SAndroid Build Coastguard Worker; 64-DAG: mtc1 $zero, $[[T1:f[0-9]+]] 84*9880d681SAndroid Build Coastguard Worker; 64-DAG: add.s $f0, $[[T0]], $[[T1]] 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Worker; 64R2: msub.s $[[T0:f[0-9]+]], $f14, $f12, $f13 87*9880d681SAndroid Build Coastguard Worker; 64R2: mtc1 $zero, $[[T1:f[0-9]+]] 88*9880d681SAndroid Build Coastguard Worker; 64R2: add.s $f0, $[[T0]], $[[T1]] 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: mul.s $[[T0:f[0-9]+]], $f12, $f13 91*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sub.s $[[T1:f[0-9]+]], $[[T0]], $f14 92*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 93*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: add.s $f0, $[[T1]], $[[T2]] 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Worker %mul = fmul float %a, %b 96*9880d681SAndroid Build Coastguard Worker %sub = fsub float %mul, %c 97*9880d681SAndroid Build Coastguard Worker %add = fadd float %sub, 0.000000e+00 98*9880d681SAndroid Build Coastguard Worker ret float %add 99*9880d681SAndroid Build Coastguard Worker} 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Workerdefine float @FOO2float(float %a, float %b, float %c) nounwind readnone { 102*9880d681SAndroid Build Coastguard Workerentry: 103*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: FOO2float: 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtc1 $6, $[[T0:f[0-9]+]] 106*9880d681SAndroid Build Coastguard Worker; 32-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f14 107*9880d681SAndroid Build Coastguard Worker; 32-DAG: add.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 108*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 109*9880d681SAndroid Build Coastguard Worker; 32-DAG: sub.s $f0, $[[T2]], $[[T1]] 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Worker; 32R2-NONAN: mtc1 $6, $[[T0:f[0-9]+]] 112*9880d681SAndroid Build Coastguard Worker; 32R2-NONAN: nmadd.s $f0, $[[T0]], $f12, $f14 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: mtc1 $6, $[[T0:f[0-9]+]] 115*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: madd.s $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 116*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: mtc1 $zero, $[[T2:f[0-9]+]] 117*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: sub.s $f0, $[[T2]], $[[T1]] 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mtc1 $6, $[[T0:f[0-9]+]] 120*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f14 121*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: add.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 122*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 123*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: sub.s $f0, $[[T2]], $[[T1]] 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Worker; 64-NONAN: nmadd.s $f0, $f14, $f12, $f13 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker; 64-NAN: madd.s $[[T0:f[0-9]+]], $f14, $f12, $f13 128*9880d681SAndroid Build Coastguard Worker; 64-NAN: mtc1 $zero, $[[T1:f[0-9]+]] 129*9880d681SAndroid Build Coastguard Worker; 64-NAN: sub.s $f0, $[[T1]], $[[T0]] 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Worker; 64R2-NONAN: nmadd.s $f0, $f14, $f12, $f13 132*9880d681SAndroid Build Coastguard Worker 133*9880d681SAndroid Build Coastguard Worker; 64R2-NAN: madd.s $[[T0:f[0-9]+]], $f14, $f12, $f13 134*9880d681SAndroid Build Coastguard Worker; 64R2-NAN: mtc1 $zero, $[[T1:f[0-9]+]] 135*9880d681SAndroid Build Coastguard Worker; 64R2-NAN: sub.s $f0, $[[T1]], $[[T0]] 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f13 138*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: add.s $[[T2:f[0-9]+]], $[[T1]], $f14 139*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 140*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sub.s $f0, $[[T2]], $[[T1]] 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker %mul = fmul float %a, %b 143*9880d681SAndroid Build Coastguard Worker %add = fadd float %mul, %c 144*9880d681SAndroid Build Coastguard Worker %sub = fsub float 0.000000e+00, %add 145*9880d681SAndroid Build Coastguard Worker ret float %sub 146*9880d681SAndroid Build Coastguard Worker} 147*9880d681SAndroid Build Coastguard Worker 148*9880d681SAndroid Build Coastguard Workerdefine float @FOO3float(float %a, float %b, float %c) nounwind readnone { 149*9880d681SAndroid Build Coastguard Workerentry: 150*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: FOO3float: 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtc1 $6, $[[T0:f[0-9]+]] 153*9880d681SAndroid Build Coastguard Worker; 32-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f14 154*9880d681SAndroid Build Coastguard Worker; 32-DAG: sub.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 155*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 156*9880d681SAndroid Build Coastguard Worker; 32-DAG: sub.s $f0, $[[T2]], $[[T1]] 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Worker; 32R2-NONAN: mtc1 $6, $[[T0:f[0-9]+]] 159*9880d681SAndroid Build Coastguard Worker; 32R2-NONAN: nmsub.s $f0, $[[T0]], $f12, $f14 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: mtc1 $6, $[[T0:f[0-9]+]] 162*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: msub.s $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 163*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: mtc1 $zero, $[[T2:f[0-9]+]] 164*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: sub.s $f0, $[[T2]], $[[T1]] 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Worker; 64-NAN: msub.s $[[T0:f[0-9]+]], $f14, $f12, $f13 167*9880d681SAndroid Build Coastguard Worker; 64-NAN: mtc1 $zero, $[[T1:f[0-9]+]] 168*9880d681SAndroid Build Coastguard Worker; 64-NAN: sub.s $f0, $[[T1]], $[[T0]] 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker; 64-NONAN: nmsub.s $f0, $f14, $f12, $f13 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Worker; 64R2-NAN: msub.s $[[T0:f[0-9]+]], $f14, $f12, $f13 173*9880d681SAndroid Build Coastguard Worker; 64R2-NAN: mtc1 $zero, $[[T1:f[0-9]+]] 174*9880d681SAndroid Build Coastguard Worker; 64R2-NAN: sub.s $f0, $[[T1]], $[[T0]] 175*9880d681SAndroid Build Coastguard Worker 176*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: mul.s $[[T1:f[0-9]+]], $f12, $f13 177*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sub.s $[[T2:f[0-9]+]], $[[T1]], $f14 178*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 179*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sub.s $f0, $[[T2]], $[[T1]] 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Worker %mul = fmul float %a, %b 182*9880d681SAndroid Build Coastguard Worker %sub = fsub float %mul, %c 183*9880d681SAndroid Build Coastguard Worker %sub1 = fsub float 0.000000e+00, %sub 184*9880d681SAndroid Build Coastguard Worker ret float %sub1 185*9880d681SAndroid Build Coastguard Worker} 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Workerdefine double @FOO10double(double %a, double %b, double %c) nounwind readnone { 188*9880d681SAndroid Build Coastguard Workerentry: 189*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: FOO10double: 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Worker; 32-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) 192*9880d681SAndroid Build Coastguard Worker; 32-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 193*9880d681SAndroid Build Coastguard Worker; 32-DAG: add.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 194*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 195*9880d681SAndroid Build Coastguard Worker; 32-DAG: add.d $f0, $[[T1]], $[[T2]] 196*9880d681SAndroid Build Coastguard Worker 197*9880d681SAndroid Build Coastguard Worker; 32R2: ldc1 $[[T0:f[0-9]+]], 16($sp) 198*9880d681SAndroid Build Coastguard Worker; 32R2: madd.d $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 199*9880d681SAndroid Build Coastguard Worker; 32R2: mtc1 $zero, $[[T2:f[0-9]+]] 200*9880d681SAndroid Build Coastguard Worker; 32R2: mthc1 $zero, $[[T2]] 201*9880d681SAndroid Build Coastguard Worker; 32R2: add.d $f0, $[[T1]], $[[T2]] 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) 204*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 205*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: add.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 206*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 207*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: add.d $f0, $[[T1]], $[[T2]] 208*9880d681SAndroid Build Coastguard Worker 209*9880d681SAndroid Build Coastguard Worker; 64-DAG: madd.d $[[T0:f[0-9]+]], $f14, $f12, $f13 210*9880d681SAndroid Build Coastguard Worker; 64-DAG: mtc1 $zero, $[[T1:f[0-9]+]] 211*9880d681SAndroid Build Coastguard Worker; 64-DAG: add.d $f0, $[[T0]], $[[T1]] 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Worker; 64R2: madd.d $[[T0:f[0-9]+]], $f14, $f12, $f13 214*9880d681SAndroid Build Coastguard Worker; 64R2: mtc1 $zero, $[[T1:f[0-9]+]] 215*9880d681SAndroid Build Coastguard Worker; 64R2: add.d $f0, $[[T0]], $[[T1]] 216*9880d681SAndroid Build Coastguard Worker 217*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f13 218*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: add.d $[[T2:f[0-9]+]], $[[T1]], $f14 219*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: dmtc1 $zero, $[[T2:f[0-9]+]] 220*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: add.d $f0, $[[T1]], $[[T2]] 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Worker %mul = fmul double %a, %b 223*9880d681SAndroid Build Coastguard Worker %add = fadd double %mul, %c 224*9880d681SAndroid Build Coastguard Worker %add1 = fadd double %add, 0.000000e+00 225*9880d681SAndroid Build Coastguard Worker ret double %add1 226*9880d681SAndroid Build Coastguard Worker} 227*9880d681SAndroid Build Coastguard Worker 228*9880d681SAndroid Build Coastguard Workerdefine double @FOO11double(double %a, double %b, double %c) nounwind readnone { 229*9880d681SAndroid Build Coastguard Workerentry: 230*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: FOO11double: 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Worker; 32-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) 233*9880d681SAndroid Build Coastguard Worker; 32-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 234*9880d681SAndroid Build Coastguard Worker; 32-DAG: sub.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 235*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 236*9880d681SAndroid Build Coastguard Worker; 32-DAG: add.d $f0, $[[T1]], $[[T2]] 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Worker; 32R2: ldc1 $[[T0:f[0-9]+]], 16($sp) 239*9880d681SAndroid Build Coastguard Worker; 32R2: msub.d $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 240*9880d681SAndroid Build Coastguard Worker; 32R2: mtc1 $zero, $[[T2:f[0-9]+]] 241*9880d681SAndroid Build Coastguard Worker; 32R2: mthc1 $zero, $[[T2]] 242*9880d681SAndroid Build Coastguard Worker; 32R2: add.d $f0, $[[T1]], $[[T2]] 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) 245*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 246*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: sub.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 247*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 248*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: add.d $f0, $[[T1]], $[[T2]] 249*9880d681SAndroid Build Coastguard Worker 250*9880d681SAndroid Build Coastguard Worker; 64-DAG: msub.d $[[T0:f[0-9]+]], $f14, $f12, $f13 251*9880d681SAndroid Build Coastguard Worker; 64-DAG: mtc1 $zero, $[[T1:f[0-9]+]] 252*9880d681SAndroid Build Coastguard Worker; 64-DAG: add.d $f0, $[[T0]], $[[T1]] 253*9880d681SAndroid Build Coastguard Worker 254*9880d681SAndroid Build Coastguard Worker; 64R2: msub.d $[[T0:f[0-9]+]], $f14, $f12, $f13 255*9880d681SAndroid Build Coastguard Worker; 64R2: mtc1 $zero, $[[T1:f[0-9]+]] 256*9880d681SAndroid Build Coastguard Worker; 64R2: add.d $f0, $[[T0]], $[[T1]] 257*9880d681SAndroid Build Coastguard Worker 258*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f13 259*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sub.d $[[T2:f[0-9]+]], $[[T1]], $f14 260*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: dmtc1 $zero, $[[T2:f[0-9]+]] 261*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: add.d $f0, $[[T1]], $[[T2]] 262*9880d681SAndroid Build Coastguard Worker 263*9880d681SAndroid Build Coastguard Worker %mul = fmul double %a, %b 264*9880d681SAndroid Build Coastguard Worker %sub = fsub double %mul, %c 265*9880d681SAndroid Build Coastguard Worker %add = fadd double %sub, 0.000000e+00 266*9880d681SAndroid Build Coastguard Worker ret double %add 267*9880d681SAndroid Build Coastguard Worker} 268*9880d681SAndroid Build Coastguard Worker 269*9880d681SAndroid Build Coastguard Workerdefine double @FOO12double(double %a, double %b, double %c) nounwind readnone { 270*9880d681SAndroid Build Coastguard Workerentry: 271*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: FOO12double: 272*9880d681SAndroid Build Coastguard Worker 273*9880d681SAndroid Build Coastguard Worker; 32-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) 274*9880d681SAndroid Build Coastguard Worker; 32-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 275*9880d681SAndroid Build Coastguard Worker; 32-DAG: add.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 276*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 277*9880d681SAndroid Build Coastguard Worker; 32-DAG: sub.d $f0, $[[T2]], $[[T1]] 278*9880d681SAndroid Build Coastguard Worker 279*9880d681SAndroid Build Coastguard Worker; 32R2-NONAN: ldc1 $[[T0:f[0-9]+]], 16($sp) 280*9880d681SAndroid Build Coastguard Worker; 32R2-NONAN: nmadd.d $f0, $[[T0]], $f12, $f14 281*9880d681SAndroid Build Coastguard Worker 282*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: ldc1 $[[T0:f[0-9]+]], 16($sp) 283*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: madd.d $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 284*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: mtc1 $zero, $[[T2:f[0-9]+]] 285*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: mthc1 $zero, $[[T2]] 286*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: sub.d $f0, $[[T2]], $[[T1]] 287*9880d681SAndroid Build Coastguard Worker 288*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) 289*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 290*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: add.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 291*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 292*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: sub.d $f0, $[[T2]], $[[T1]] 293*9880d681SAndroid Build Coastguard Worker 294*9880d681SAndroid Build Coastguard Worker; 64-NONAN: nmadd.d $f0, $f14, $f12, $f13 295*9880d681SAndroid Build Coastguard Worker 296*9880d681SAndroid Build Coastguard Worker; 64-NAN: madd.d $[[T0:f[0-9]+]], $f14, $f12, $f13 297*9880d681SAndroid Build Coastguard Worker; 64-NAN: mtc1 $zero, $[[T1:f[0-9]+]] 298*9880d681SAndroid Build Coastguard Worker; 64-NAN: sub.d $f0, $[[T1]], $[[T0]] 299*9880d681SAndroid Build Coastguard Worker 300*9880d681SAndroid Build Coastguard Worker; 64R2-NONAN: nmadd.d $f0, $f14, $f12, $f13 301*9880d681SAndroid Build Coastguard Worker 302*9880d681SAndroid Build Coastguard Worker; 64R2-NAN: madd.d $[[T0:f[0-9]+]], $f14, $f12, $f13 303*9880d681SAndroid Build Coastguard Worker; 64R2-NAN: mtc1 $zero, $[[T1:f[0-9]+]] 304*9880d681SAndroid Build Coastguard Worker; 64R2-NAN: sub.d $f0, $[[T1]], $[[T0]] 305*9880d681SAndroid Build Coastguard Worker 306*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f13 307*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: add.d $[[T2:f[0-9]+]], $[[T1]], $f14 308*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: dmtc1 $zero, $[[T2:f[0-9]+]] 309*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sub.d $f0, $[[T2]], $[[T1]] 310*9880d681SAndroid Build Coastguard Worker 311*9880d681SAndroid Build Coastguard Worker %mul = fmul double %a, %b 312*9880d681SAndroid Build Coastguard Worker %add = fadd double %mul, %c 313*9880d681SAndroid Build Coastguard Worker %sub = fsub double 0.000000e+00, %add 314*9880d681SAndroid Build Coastguard Worker ret double %sub 315*9880d681SAndroid Build Coastguard Worker} 316*9880d681SAndroid Build Coastguard Worker 317*9880d681SAndroid Build Coastguard Workerdefine double @FOO13double(double %a, double %b, double %c) nounwind readnone { 318*9880d681SAndroid Build Coastguard Workerentry: 319*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: FOO13double: 320*9880d681SAndroid Build Coastguard Worker 321*9880d681SAndroid Build Coastguard Worker; 32-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) 322*9880d681SAndroid Build Coastguard Worker; 32-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 323*9880d681SAndroid Build Coastguard Worker; 32-DAG: sub.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 324*9880d681SAndroid Build Coastguard Worker; 32-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 325*9880d681SAndroid Build Coastguard Worker; 32-DAG: sub.d $f0, $[[T2]], $[[T1]] 326*9880d681SAndroid Build Coastguard Worker 327*9880d681SAndroid Build Coastguard Worker; 32R2-NONAN: ldc1 $[[T0:f[0-9]+]], 16($sp) 328*9880d681SAndroid Build Coastguard Worker; 32R2-NONAN: nmsub.d $f0, $[[T0]], $f12, $f14 329*9880d681SAndroid Build Coastguard Worker 330*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: ldc1 $[[T0:f[0-9]+]], 16($sp) 331*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: msub.d $[[T1:f[0-9]+]], $[[T0]], $f12, $f14 332*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: mtc1 $zero, $[[T2:f[0-9]+]] 333*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: mthc1 $zero, $[[T2]] 334*9880d681SAndroid Build Coastguard Worker; 32R2-NAN: sub.d $f0, $[[T2]], $[[T1]] 335*9880d681SAndroid Build Coastguard Worker 336*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: ldc1 $[[T0:f[0-9]+]], 16($sp) 337*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f14 338*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: sub.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]] 339*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: mtc1 $zero, $[[T2:f[0-9]+]] 340*9880d681SAndroid Build Coastguard Worker; 32R6-DAG: sub.d $f0, $[[T2]], $[[T1]] 341*9880d681SAndroid Build Coastguard Worker 342*9880d681SAndroid Build Coastguard Worker; 64-NONAN: nmsub.d $f0, $f14, $f12, $f13 343*9880d681SAndroid Build Coastguard Worker 344*9880d681SAndroid Build Coastguard Worker; 64-NAN: msub.d $[[T0:f[0-9]+]], $f14, $f12, $f13 345*9880d681SAndroid Build Coastguard Worker; 64-NAN: mtc1 $zero, $[[T1:f[0-9]+]] 346*9880d681SAndroid Build Coastguard Worker; 64-NAN: sub.d $f0, $[[T1]], $[[T0]] 347*9880d681SAndroid Build Coastguard Worker 348*9880d681SAndroid Build Coastguard Worker; 64R2-NONAN: nmsub.d $f0, $f14, $f12, $f13 349*9880d681SAndroid Build Coastguard Worker 350*9880d681SAndroid Build Coastguard Worker; 64R2-NAN: msub.d $[[T0:f[0-9]+]], $f14, $f12, $f13 351*9880d681SAndroid Build Coastguard Worker; 64R2-NAN: mtc1 $zero, $[[T1:f[0-9]+]] 352*9880d681SAndroid Build Coastguard Worker; 64R2-NAN: sub.d $f0, $[[T1]], $[[T0]] 353*9880d681SAndroid Build Coastguard Worker 354*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: mul.d $[[T1:f[0-9]+]], $f12, $f13 355*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sub.d $[[T2:f[0-9]+]], $[[T1]], $f14 356*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: dmtc1 $zero, $[[T2:f[0-9]+]] 357*9880d681SAndroid Build Coastguard Worker; 64R6-DAG: sub.d $f0, $[[T2]], $[[T1]] 358*9880d681SAndroid Build Coastguard Worker 359*9880d681SAndroid Build Coastguard Worker %mul = fmul double %a, %b 360*9880d681SAndroid Build Coastguard Worker %sub = fsub double %mul, %c 361*9880d681SAndroid Build Coastguard Worker %sub1 = fsub double 0.000000e+00, %sub 362*9880d681SAndroid Build Coastguard Worker ret double %sub1 363*9880d681SAndroid Build Coastguard Worker} 364