@@ -16,10 +16,9 @@ define float @frem2_nsz(float %x) {
16
16
; CHECK-SD-LABEL: frem2_nsz:
17
17
; CHECK-SD: // %bb.0: // %entry
18
18
; CHECK-SD-NEXT: fmov s1, #2.00000000
19
- ; CHECK-SD-NEXT: fdiv s1, s0, s1
20
- ; CHECK-SD-NEXT: frintz s1, s1
21
- ; CHECK-SD-NEXT: fadd s1, s1, s1
22
- ; CHECK-SD-NEXT: fsub s0, s0, s1
19
+ ; CHECK-SD-NEXT: fdiv s2, s0, s1
20
+ ; CHECK-SD-NEXT: frintz s2, s2
21
+ ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
23
22
; CHECK-SD-NEXT: ret
24
23
;
25
24
; CHECK-GI-LABEL: frem2_nsz:
@@ -55,10 +54,9 @@ define float @frem2_abs(float %x) {
55
54
; CHECK-SD: // %bb.0: // %entry
56
55
; CHECK-SD-NEXT: fabs s0, s0
57
56
; CHECK-SD-NEXT: fmov s1, #2.00000000
58
- ; CHECK-SD-NEXT: fdiv s1, s0, s1
59
- ; CHECK-SD-NEXT: frintz s1, s1
60
- ; CHECK-SD-NEXT: fadd s1, s1, s1
61
- ; CHECK-SD-NEXT: fsub s0, s0, s1
57
+ ; CHECK-SD-NEXT: fdiv s2, s0, s1
58
+ ; CHECK-SD-NEXT: frintz s2, s2
59
+ ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
62
60
; CHECK-SD-NEXT: ret
63
61
;
64
62
; CHECK-GI-LABEL: frem2_abs:
@@ -76,10 +74,10 @@ define half @hrem2_nsz(half %x) {
76
74
; CHECK-SD-LABEL: hrem2_nsz:
77
75
; CHECK-SD: // %bb.0: // %entry
78
76
; CHECK-SD-NEXT: fmov h1, #2.00000000
77
+ ; CHECK-SD-NEXT: fmov h2, #-2.00000000
79
78
; CHECK-SD-NEXT: fdiv h1, h0, h1
80
79
; CHECK-SD-NEXT: frintz h1, h1
81
- ; CHECK-SD-NEXT: fadd h1, h1, h1
82
- ; CHECK-SD-NEXT: fsub h0, h0, h1
80
+ ; CHECK-SD-NEXT: fmadd h0, h1, h2, h0
83
81
; CHECK-SD-NEXT: ret
84
82
;
85
83
; CHECK-GI-LABEL: hrem2_nsz:
@@ -103,10 +101,9 @@ define double @drem2_nsz(double %x) {
103
101
; CHECK-SD-LABEL: drem2_nsz:
104
102
; CHECK-SD: // %bb.0: // %entry
105
103
; CHECK-SD-NEXT: fmov d1, #2.00000000
106
- ; CHECK-SD-NEXT: fdiv d1, d0, d1
107
- ; CHECK-SD-NEXT: frintz d1, d1
108
- ; CHECK-SD-NEXT: fadd d1, d1, d1
109
- ; CHECK-SD-NEXT: fsub d0, d0, d1
104
+ ; CHECK-SD-NEXT: fdiv d2, d0, d1
105
+ ; CHECK-SD-NEXT: frintz d2, d2
106
+ ; CHECK-SD-NEXT: fmsub d0, d2, d1, d0
110
107
; CHECK-SD-NEXT: ret
111
108
;
112
109
; CHECK-GI-LABEL: drem2_nsz:
@@ -170,8 +167,7 @@ define float @fremm2_nsz(float %x) {
170
167
; CHECK-SD-NEXT: fmov s1, #-2.00000000
171
168
; CHECK-SD-NEXT: fdiv s2, s0, s1
172
169
; CHECK-SD-NEXT: frintz s2, s2
173
- ; CHECK-SD-NEXT: fmul s1, s2, s1
174
- ; CHECK-SD-NEXT: fsub s0, s0, s1
170
+ ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
175
171
; CHECK-SD-NEXT: ret
176
172
;
177
173
; CHECK-GI-LABEL: fremm2_nsz:
@@ -190,8 +186,7 @@ define float @frem4_abs(float %x) {
190
186
; CHECK-SD-NEXT: fmov s1, #4.00000000
191
187
; CHECK-SD-NEXT: fdiv s2, s0, s1
192
188
; CHECK-SD-NEXT: frintz s2, s2
193
- ; CHECK-SD-NEXT: fmul s1, s2, s1
194
- ; CHECK-SD-NEXT: fsub s0, s0, s1
189
+ ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
195
190
; CHECK-SD-NEXT: ret
196
191
;
197
192
; CHECK-GI-LABEL: frem4_abs:
@@ -212,8 +207,7 @@ define float @frem16_abs(float %x) {
212
207
; CHECK-SD-NEXT: fmov s1, #16.00000000
213
208
; CHECK-SD-NEXT: fdiv s2, s0, s1
214
209
; CHECK-SD-NEXT: frintz s2, s2
215
- ; CHECK-SD-NEXT: fmul s1, s2, s1
216
- ; CHECK-SD-NEXT: fsub s0, s0, s1
210
+ ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
217
211
; CHECK-SD-NEXT: ret
218
212
;
219
213
; CHECK-GI-LABEL: frem16_abs:
@@ -235,8 +229,7 @@ define float @frem4294967296_abs(float %x) {
235
229
; CHECK-SD-NEXT: fmov s1, w8
236
230
; CHECK-SD-NEXT: fdiv s2, s0, s1
237
231
; CHECK-SD-NEXT: frintz s2, s2
238
- ; CHECK-SD-NEXT: fmul s1, s2, s1
239
- ; CHECK-SD-NEXT: fsub s0, s0, s1
232
+ ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
240
233
; CHECK-SD-NEXT: ret
241
234
;
242
235
; CHECK-GI-LABEL: frem4294967296_abs:
@@ -259,8 +252,7 @@ define float @frem1152921504606846976_abs(float %x) {
259
252
; CHECK-SD-NEXT: fmov s1, w8
260
253
; CHECK-SD-NEXT: fdiv s2, s0, s1
261
254
; CHECK-SD-NEXT: frintz s2, s2
262
- ; CHECK-SD-NEXT: fmul s1, s2, s1
263
- ; CHECK-SD-NEXT: fsub s0, s0, s1
255
+ ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
264
256
; CHECK-SD-NEXT: ret
265
257
;
266
258
; CHECK-GI-LABEL: frem1152921504606846976_abs:
@@ -283,8 +275,7 @@ define float @frem4611686018427387904_abs(float %x) {
283
275
; CHECK-SD-NEXT: fmov s1, w8
284
276
; CHECK-SD-NEXT: fdiv s2, s0, s1
285
277
; CHECK-SD-NEXT: frintz s2, s2
286
- ; CHECK-SD-NEXT: fmul s1, s2, s1
287
- ; CHECK-SD-NEXT: fsub s0, s0, s1
278
+ ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
288
279
; CHECK-SD-NEXT: ret
289
280
;
290
281
; CHECK-GI-LABEL: frem4611686018427387904_abs:
@@ -306,8 +297,7 @@ define float @frem9223372036854775808_abs(float %x) {
306
297
; CHECK-SD-NEXT: fabs s0, s0
307
298
; CHECK-SD-NEXT: fdiv s2, s0, s1
308
299
; CHECK-SD-NEXT: frintz s2, s2
309
- ; CHECK-SD-NEXT: fmul s1, s2, s1
310
- ; CHECK-SD-NEXT: fsub s0, s0, s1
300
+ ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
311
301
; CHECK-SD-NEXT: ret
312
302
;
313
303
; CHECK-GI-LABEL: frem9223372036854775808_abs:
@@ -325,10 +315,9 @@ define <4 x float> @frem2_nsz_vec(<4 x float> %x) {
325
315
; CHECK-SD-LABEL: frem2_nsz_vec:
326
316
; CHECK-SD: // %bb.0: // %entry
327
317
; CHECK-SD-NEXT: movi v1.4s, #64, lsl #24
328
- ; CHECK-SD-NEXT: fdiv v1.4s, v0.4s, v1.4s
329
- ; CHECK-SD-NEXT: frintz v1.4s, v1.4s
330
- ; CHECK-SD-NEXT: fadd v1.4s, v1.4s, v1.4s
331
- ; CHECK-SD-NEXT: fsub v0.4s, v0.4s, v1.4s
318
+ ; CHECK-SD-NEXT: fdiv v2.4s, v0.4s, v1.4s
319
+ ; CHECK-SD-NEXT: frintz v2.4s, v2.4s
320
+ ; CHECK-SD-NEXT: fmls v0.4s, v1.4s, v2.4s
332
321
; CHECK-SD-NEXT: ret
333
322
;
334
323
; CHECK-GI-LABEL: frem2_nsz_vec:
@@ -388,8 +377,7 @@ define <4 x float> @frem1152921504606846976_absv(<4 x float> %x) {
388
377
; CHECK-SD-NEXT: dup v1.4s, w8
389
378
; CHECK-SD-NEXT: fdiv v2.4s, v0.4s, v1.4s
390
379
; CHECK-SD-NEXT: frintz v2.4s, v2.4s
391
- ; CHECK-SD-NEXT: fmul v1.4s, v2.4s, v1.4s
392
- ; CHECK-SD-NEXT: fsub v0.4s, v0.4s, v1.4s
380
+ ; CHECK-SD-NEXT: fmls v0.4s, v1.4s, v2.4s
393
381
; CHECK-SD-NEXT: ret
394
382
;
395
383
; CHECK-GI-LABEL: frem1152921504606846976_absv:
@@ -454,8 +442,7 @@ define float @frem2_nsz_sitofp(float %x, i32 %sa) {
454
442
; CHECK-SD-NEXT: scvtf s1, w8
455
443
; CHECK-SD-NEXT: fdiv s2, s0, s1
456
444
; CHECK-SD-NEXT: frintz s2, s2
457
- ; CHECK-SD-NEXT: fmul s1, s2, s1
458
- ; CHECK-SD-NEXT: fsub s0, s0, s1
445
+ ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
459
446
; CHECK-SD-NEXT: ret
460
447
;
461
448
; CHECK-GI-LABEL: frem2_nsz_sitofp:
@@ -479,8 +466,7 @@ define float @frem2_nsz_uitofp(float %x, i32 %sa) {
479
466
; CHECK-SD-NEXT: ucvtf s1, w8
480
467
; CHECK-SD-NEXT: fdiv s2, s0, s1
481
468
; CHECK-SD-NEXT: frintz s2, s2
482
- ; CHECK-SD-NEXT: fmul s1, s2, s1
483
- ; CHECK-SD-NEXT: fsub s0, s0, s1
469
+ ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
484
470
; CHECK-SD-NEXT: ret
485
471
;
486
472
; CHECK-GI-LABEL: frem2_nsz_uitofp:
@@ -505,8 +491,7 @@ define float @frem2_const_sitofp(float %x, i32 %sa) {
505
491
; CHECK-SD-NEXT: scvtf s0, w8
506
492
; CHECK-SD-NEXT: fdiv s2, s1, s0
507
493
; CHECK-SD-NEXT: frintz s2, s2
508
- ; CHECK-SD-NEXT: fmul s0, s2, s0
509
- ; CHECK-SD-NEXT: fsub s0, s1, s0
494
+ ; CHECK-SD-NEXT: fmsub s0, s2, s0, s1
510
495
; CHECK-SD-NEXT: ret
511
496
;
512
497
; CHECK-GI-LABEL: frem2_const_sitofp:
0 commit comments