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