Stackmap shadows should consider call returns a branch target.
[oota-llvm.git] / test / CodeGen / Mips / fmadd1.ll
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   -mattr=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 -mattr=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 -mattr=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   -mattr=n64 | FileCheck %s -check-prefix=ALL -check-prefix=64   -check-prefix=64-NAN
18 ; RUN: llc < %s -march=mips64el -mcpu=mips64r2 -mattr=n64 | FileCheck %s -check-prefix=ALL -check-prefix=64R2 -check-prefix=64R2-NAN
19 ; RUN: llc < %s -march=mips64el -mcpu=mips64r6 -mattr=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:        mul.s $[[T1:f[0-9]+]], $f12, $f13
43 ; 64-DAG:        add.s $[[T2:f[0-9]+]], $[[T1]], $f14
44 ; 64-DAG:        mtc1 $zero, $[[T2:f[0-9]+]]
45 ; 64-DAG:        add.s $f0, $[[T1]], $[[T2]]
46
47 ; 64R2:          madd.s $[[T0:f[0-9]+]], $f14, $f12, $f13
48 ; 64R2:          mtc1 $zero, $[[T1:f[0-9]+]]
49 ; 64R2:          add.s $f0, $[[T0]], $[[T1]]
50
51 ; 64R6-DAG:      mul.s $[[T0:f[0-9]+]], $f12, $f13
52 ; 64R6-DAG:      add.s $[[T1:f[0-9]+]], $[[T0]], $f14
53 ; 64R6-DAG:      mtc1 $zero, $[[T2:f[0-9]+]]
54 ; 64R6-DAG:      add.s $f0, $[[T1]], $[[T2]]
55
56   %mul = fmul float %a, %b
57   %add = fadd float %mul, %c
58   %add1 = fadd float %add, 0.000000e+00
59   ret float %add1
60 }
61
62 define float @FOO1float(float %a, float %b, float %c) nounwind readnone {
63 entry:
64 ; ALL-LABEL: FOO1float:
65
66 ; 32-DAG:        mtc1 $6, $[[T0:f[0-9]+]]
67 ; 32-DAG:        mul.s $[[T1:f[0-9]+]], $f12, $f14
68 ; 32-DAG:        sub.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]]
69 ; 32-DAG:        mtc1 $zero, $[[T2:f[0-9]+]]
70 ; 32-DAG:        add.s $f0, $[[T1]], $[[T2]]
71
72 ; 32R2:          mtc1 $6, $[[T0:f[0-9]+]]
73 ; 32R2:          msub.s $[[T1:f[0-9]+]], $[[T0]], $f12, $f14
74 ; 32R2:          mtc1 $zero, $[[T2:f[0-9]+]]
75 ; 32R2:          add.s $f0, $[[T1]], $[[T2]]
76
77 ; 32R6-DAG:      mtc1 $6, $[[T0:f[0-9]+]]
78 ; 32R6-DAG:      mul.s $[[T1:f[0-9]+]], $f12, $f14
79 ; 32R6-DAG:      sub.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]]
80 ; 32R6-DAG:      mtc1 $zero, $[[T2:f[0-9]+]]
81 ; 32R6-DAG:      add.s $f0, $[[T1]], $[[T2]]
82
83 ; 64-DAG:        mul.s $[[T1:f[0-9]+]], $f12, $f13
84 ; 64-DAG:        sub.s $[[T2:f[0-9]+]], $[[T1]], $f14
85 ; 64-DAG:        mtc1 $zero, $[[T2:f[0-9]+]]
86 ; 64-DAG:        add.s $f0, $[[T1]], $[[T2]]
87
88 ; 64R2:          msub.s $[[T0:f[0-9]+]], $f14, $f12, $f13
89 ; 64R2:          mtc1 $zero, $[[T1:f[0-9]+]]
90 ; 64R2:          add.s $f0, $[[T0]], $[[T1]]
91
92 ; 64R6-DAG:      mul.s $[[T0:f[0-9]+]], $f12, $f13
93 ; 64R6-DAG:      sub.s $[[T1:f[0-9]+]], $[[T0]], $f14
94 ; 64R6-DAG:      mtc1 $zero, $[[T2:f[0-9]+]]
95 ; 64R6-DAG:      add.s $f0, $[[T1]], $[[T2]]
96
97   %mul = fmul float %a, %b
98   %sub = fsub float %mul, %c
99   %add = fadd float %sub, 0.000000e+00
100   ret float %add
101 }
102
103 define float @FOO2float(float %a, float %b, float %c) nounwind readnone {
104 entry:
105 ; ALL-LABEL: FOO2float:
106
107 ; 32-DAG:        mtc1 $6, $[[T0:f[0-9]+]]
108 ; 32-DAG:        mul.s $[[T1:f[0-9]+]], $f12, $f14
109 ; 32-DAG:        add.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]]
110 ; 32-DAG:        mtc1 $zero, $[[T2:f[0-9]+]]
111 ; 32-DAG:        sub.s $f0, $[[T2]], $[[T1]]
112
113 ; 32R2-NONAN:    mtc1 $6, $[[T0:f[0-9]+]]
114 ; 32R2-NONAN:    nmadd.s $f0, $[[T0]], $f12, $f14
115
116 ; 32R2-NAN:      mtc1 $6, $[[T0:f[0-9]+]]
117 ; 32R2-NAN:      madd.s $[[T1:f[0-9]+]], $[[T0]], $f12, $f14
118 ; 32R2-NAN:      mtc1 $zero, $[[T2:f[0-9]+]]
119 ; 32R2-NAN:      sub.s  $f0, $[[T2]], $[[T1]]
120
121 ; 32R6-DAG:      mtc1 $6, $[[T0:f[0-9]+]]
122 ; 32R6-DAG:      mul.s $[[T1:f[0-9]+]], $f12, $f14
123 ; 32R6-DAG:      add.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]]
124 ; 32R6-DAG:      mtc1 $zero, $[[T2:f[0-9]+]]
125 ; 32R6-DAG:      sub.s $f0, $[[T2]], $[[T1]]
126
127 ; 64-DAG:        mul.s $[[T1:f[0-9]+]], $f12, $f13
128 ; 64-DAG:        add.s $[[T2:f[0-9]+]], $[[T1]], $f14
129 ; 64-DAG:        mtc1 $zero, $[[T2:f[0-9]+]]
130 ; 64-DAG:        sub.s $f0, $[[T2]], $[[T1]]
131
132 ; 64R2-NONAN:    nmadd.s $f0, $f14, $f12, $f13
133
134 ; 64R2-NAN:      madd.s $[[T0:f[0-9]+]], $f14, $f12, $f13
135 ; 64R2-NAN:      mtc1 $zero, $[[T1:f[0-9]+]]
136 ; 64R2-NAN:      sub.s  $f0, $[[T1]], $[[T0]]
137
138 ; 64R6-DAG:      mul.s $[[T1:f[0-9]+]], $f12, $f13
139 ; 64R6-DAG:      add.s $[[T2:f[0-9]+]], $[[T1]], $f14
140 ; 64R6-DAG:      mtc1 $zero, $[[T2:f[0-9]+]]
141 ; 64R6-DAG:      sub.s $f0, $[[T2]], $[[T1]]
142
143   %mul = fmul float %a, %b
144   %add = fadd float %mul, %c
145   %sub = fsub float 0.000000e+00, %add
146   ret float %sub
147 }
148
149 define float @FOO3float(float %a, float %b, float %c) nounwind readnone {
150 entry:
151 ; ALL-LABEL: FOO3float:
152
153 ; 32-DAG:        mtc1 $6, $[[T0:f[0-9]+]]
154 ; 32-DAG:        mul.s $[[T1:f[0-9]+]], $f12, $f14
155 ; 32-DAG:        sub.s $[[T2:f[0-9]+]], $[[T1]], $[[T0]]
156 ; 32-DAG:        mtc1 $zero, $[[T2:f[0-9]+]]
157 ; 32-DAG:        sub.s $f0, $[[T2]], $[[T1]]
158
159 ; 32R2-NONAN:    mtc1 $6, $[[T0:f[0-9]+]]
160 ; 32R2-NONAN:    nmsub.s $f0, $[[T0]], $f12, $f14
161
162 ; 32R2-NAN:      mtc1 $6, $[[T0:f[0-9]+]]
163 ; 32R2-NAN:      msub.s $[[T1:f[0-9]+]], $[[T0]], $f12, $f14
164 ; 32R2-NAN:      mtc1 $zero, $[[T2:f[0-9]+]]
165 ; 32R2-NAN:      sub.s  $f0, $[[T2]], $[[T1]]
166
167 ; 64-DAG:        mul.s $[[T1:f[0-9]+]], $f12, $f13
168 ; 64-DAG:        sub.s $[[T2:f[0-9]+]], $[[T1]], $f14
169 ; 64-DAG:        mtc1 $zero, $[[T2:f[0-9]+]]
170 ; 64-DAG:        sub.s $f0, $[[T2]], $[[T1]]
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:        mul.d $[[T1:f[0-9]+]], $f12, $f13
210 ; 64-DAG:        add.d $[[T2:f[0-9]+]], $[[T1]], $f14
211 ; 64-DAG:        dmtc1 $zero, $[[T2:f[0-9]+]]
212 ; 64-DAG:        add.d $f0, $[[T1]], $[[T2]]
213
214 ; 64R2:          madd.d $[[T0:f[0-9]+]], $f14, $f12, $f13
215 ; 64R2:          mtc1 $zero, $[[T1:f[0-9]+]]
216 ; 64R2:          add.d $f0, $[[T0]], $[[T1]]
217
218 ; 64R6-DAG:      mul.d $[[T1:f[0-9]+]], $f12, $f13
219 ; 64R6-DAG:      add.d $[[T2:f[0-9]+]], $[[T1]], $f14
220 ; 64R6-DAG:      dmtc1 $zero, $[[T2:f[0-9]+]]
221 ; 64R6-DAG:      add.d $f0, $[[T1]], $[[T2]]
222
223   %mul = fmul double %a, %b
224   %add = fadd double %mul, %c
225   %add1 = fadd double %add, 0.000000e+00
226   ret double %add1
227 }
228
229 define double @FOO11double(double %a, double %b, double %c) nounwind readnone {
230 entry:
231 ; ALL-LABEL: FOO11double:
232
233 ; 32-DAG:        ldc1 $[[T0:f[0-9]+]], 16($sp)
234 ; 32-DAG:        mul.d $[[T1:f[0-9]+]], $f12, $f14
235 ; 32-DAG:        sub.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]]
236 ; 32-DAG:        mtc1 $zero, $[[T2:f[0-9]+]]
237 ; 32-DAG:        add.d $f0, $[[T1]], $[[T2]]
238
239 ; 32R2:          ldc1 $[[T0:f[0-9]+]], 16($sp)
240 ; 32R2:          msub.d $[[T1:f[0-9]+]], $[[T0]], $f12, $f14
241 ; 32R2:          mtc1 $zero, $[[T2:f[0-9]+]]
242 ; 32R2:          mthc1 $zero, $[[T2]]
243 ; 32R2:          add.d $f0, $[[T1]], $[[T2]]
244
245 ; 32R6-DAG:      ldc1 $[[T0:f[0-9]+]], 16($sp)
246 ; 32R6-DAG:      mul.d $[[T1:f[0-9]+]], $f12, $f14
247 ; 32R6-DAG:      sub.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]]
248 ; 32R6-DAG:      mtc1 $zero, $[[T2:f[0-9]+]]
249 ; 32R6-DAG:      add.d $f0, $[[T1]], $[[T2]]
250
251 ; 64-DAG:        mul.d $[[T1:f[0-9]+]], $f12, $f13
252 ; 64-DAG:        sub.d $[[T2:f[0-9]+]], $[[T1]], $f14
253 ; 64-DAG:        dmtc1 $zero, $[[T2:f[0-9]+]]
254 ; 64-DAG:        add.d $f0, $[[T1]], $[[T2]]
255
256 ; 64R2:          msub.d $[[T0:f[0-9]+]], $f14, $f12, $f13
257 ; 64R2:          mtc1 $zero, $[[T1:f[0-9]+]]
258 ; 64R2:          add.d $f0, $[[T0]], $[[T1]]
259
260 ; 64R6-DAG:      mul.d $[[T1:f[0-9]+]], $f12, $f13
261 ; 64R6-DAG:      sub.d $[[T2:f[0-9]+]], $[[T1]], $f14
262 ; 64R6-DAG:      dmtc1 $zero, $[[T2:f[0-9]+]]
263 ; 64R6-DAG:      add.d $f0, $[[T1]], $[[T2]]
264
265   %mul = fmul double %a, %b
266   %sub = fsub double %mul, %c
267   %add = fadd double %sub, 0.000000e+00
268   ret double %add
269 }
270
271 define double @FOO12double(double %a, double %b, double %c) nounwind readnone {
272 entry:
273 ; ALL-LABEL: FOO12double:
274
275 ; 32-DAG:        ldc1 $[[T0:f[0-9]+]], 16($sp)
276 ; 32-DAG:        mul.d $[[T1:f[0-9]+]], $f12, $f14
277 ; 32-DAG:        add.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]]
278 ; 32-DAG:        mtc1 $zero, $[[T2:f[0-9]+]]
279 ; 32-DAG:        sub.d $f0, $[[T2]], $[[T1]]
280
281 ; 32R2-NONAN:    ldc1 $[[T0:f[0-9]+]], 16($sp)
282 ; 32R2-NONAN:    nmadd.d $f0, $[[T0]], $f12, $f14
283
284 ; 32R2-NAN:      ldc1 $[[T0:f[0-9]+]], 16($sp)
285 ; 32R2-NAN:      madd.d $[[T1:f[0-9]+]], $[[T0]], $f12, $f14
286 ; 32R2-NAN:      mtc1 $zero, $[[T2:f[0-9]+]]
287 ; 32R2-NAN:      mthc1 $zero, $[[T2]]
288 ; 32R2-NAN:      sub.d $f0, $[[T2]], $[[T1]]
289
290 ; 32R6-DAG:      ldc1 $[[T0:f[0-9]+]], 16($sp)
291 ; 32R6-DAG:      mul.d $[[T1:f[0-9]+]], $f12, $f14
292 ; 32R6-DAG:      add.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]]
293 ; 32R6-DAG:      mtc1 $zero, $[[T2:f[0-9]+]]
294 ; 32R6-DAG:      sub.d $f0, $[[T2]], $[[T1]]
295
296 ; 64-DAG:        mul.d $[[T1:f[0-9]+]], $f12, $f13
297 ; 64-DAG:        add.d $[[T2:f[0-9]+]], $[[T1]], $f14
298 ; 64-DAG:        dmtc1 $zero, $[[T2:f[0-9]+]]
299 ; 64-DAG:        sub.d $f0, $[[T2]], $[[T1]]
300
301 ; 64R2-NONAN:    nmadd.d $f0, $f14, $f12, $f13
302
303 ; 64R2-NAN:      madd.d $[[T0:f[0-9]+]], $f14, $f12, $f13
304 ; 64R2-NAN:      mtc1 $zero, $[[T1:f[0-9]+]]
305 ; 64R2-NAN:      sub.d $f0, $[[T1]], $[[T0]]
306
307 ; 64R6-DAG:      mul.d $[[T1:f[0-9]+]], $f12, $f13
308 ; 64R6-DAG:      add.d $[[T2:f[0-9]+]], $[[T1]], $f14
309 ; 64R6-DAG:      dmtc1 $zero, $[[T2:f[0-9]+]]
310 ; 64R6-DAG:      sub.d $f0, $[[T2]], $[[T1]]
311
312   %mul = fmul double %a, %b
313   %add = fadd double %mul, %c
314   %sub = fsub double 0.000000e+00, %add
315   ret double %sub
316 }
317
318 define double @FOO13double(double %a, double %b, double %c) nounwind readnone {
319 entry:
320 ; ALL-LABEL: FOO13double:
321
322 ; 32-DAG:        ldc1 $[[T0:f[0-9]+]], 16($sp)
323 ; 32-DAG:        mul.d $[[T1:f[0-9]+]], $f12, $f14
324 ; 32-DAG:        sub.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]]
325 ; 32-DAG:        mtc1 $zero, $[[T2:f[0-9]+]]
326 ; 32-DAG:        sub.d $f0, $[[T2]], $[[T1]]
327
328 ; 32R2-NONAN:    ldc1 $[[T0:f[0-9]+]], 16($sp)
329 ; 32R2-NONAN:    nmsub.d $f0, $[[T0]], $f12, $f14
330
331 ; 32R2-NAN:      ldc1 $[[T0:f[0-9]+]], 16($sp)
332 ; 32R2-NAN:      msub.d $[[T1:f[0-9]+]], $[[T0]], $f12, $f14
333 ; 32R2-NAN:      mtc1 $zero, $[[T2:f[0-9]+]]
334 ; 32R2-NAN:      mthc1 $zero, $[[T2]]
335 ; 32R2-NAN:      sub.d $f0, $[[T2]], $[[T1]]
336
337 ; 32R6-DAG:      ldc1 $[[T0:f[0-9]+]], 16($sp)
338 ; 32R6-DAG:      mul.d $[[T1:f[0-9]+]], $f12, $f14
339 ; 32R6-DAG:      sub.d $[[T2:f[0-9]+]], $[[T1]], $[[T0]]
340 ; 32R6-DAG:      mtc1 $zero, $[[T2:f[0-9]+]]
341 ; 32R6-DAG:      sub.d $f0, $[[T2]], $[[T1]]
342
343 ; 64-DAG:        mul.d $[[T1:f[0-9]+]], $f12, $f13
344 ; 64-DAG:        sub.d $[[T2:f[0-9]+]], $[[T1]], $f14
345 ; 64-DAG:        dmtc1 $zero, $[[T2:f[0-9]+]]
346 ; 64-DAG:        sub.d $f0, $[[T2]], $[[T1]]
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 }