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