XFAIL test/CodeGen/Generic/MachineBranchProb.ll on Hexagon (PR23377)
[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   -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 }