Skip to content

Commit dbb3904

Browse files
committed
PowerPC/VSX: Select FMINNUM_IEEE and FMAXNUM_IEEE
PowerPC with VSX has vector instructions: XVMAXSP/XVMINSP/XVMAXDP/XVMINDP which follow the semantics of minNUM/maxNUM of IEEE754-2008; and scaler instructions XSMINDP/XSMAXDP which also follow semantics of minNUM/maxNUM of IEEE754-2008. Let's use them to define FMAXNUM_IEEE and FMINNUM_IEEE. Currently, some Pat<(f64 (fminnum_ieee (fcanonicalize .. are defined. They are not correct. Let's remove them. In the future patch, we will define fcanonicalize for PowerPC/VSX, then `fminimunnum/fmaximumnum` will be usable.
1 parent 1cf9f76 commit dbb3904

File tree

4 files changed

+61
-131
lines changed

4 files changed

+61
-131
lines changed

llvm/lib/Target/PowerPC/PPCISelLowering.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -777,6 +777,10 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
777777
setOperationAction(ISD::FMAXNUM_IEEE, MVT::f32, Legal);
778778
setOperationAction(ISD::FMINNUM_IEEE, MVT::f64, Legal);
779779
setOperationAction(ISD::FMINNUM_IEEE, MVT::f32, Legal);
780+
setOperationAction(ISD::FMAXNUM, MVT::f64, Legal);
781+
setOperationAction(ISD::FMAXNUM, MVT::f32, Legal);
782+
setOperationAction(ISD::FMINNUM, MVT::f64, Legal);
783+
setOperationAction(ISD::FMINNUM, MVT::f32, Legal);
780784
}
781785

782786
if (Subtarget.hasAltivec()) {
@@ -811,6 +815,8 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
811815
if (Subtarget.hasVSX()) {
812816
setOperationAction(ISD::FMAXNUM, VT, Legal);
813817
setOperationAction(ISD::FMINNUM, VT, Legal);
818+
setOperationAction(ISD::FMAXNUM_IEEE, VT, Legal);
819+
setOperationAction(ISD::FMINNUM_IEEE, VT, Legal);
814820
}
815821

816822
// Vector instructions introduced in P8

llvm/lib/Target/PowerPC/PPCInstrVSX.td

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2720,6 +2720,15 @@ def : Pat<(v2f64 (any_fmaxnum v2f64:$src1, v2f64:$src2)),
27202720
def : Pat<(v2f64 (any_fminnum v2f64:$src1, v2f64:$src2)),
27212721
(v2f64 (XVMINDP $src1, $src2))>;
27222722

2723+
def : Pat<(v4f32 (fmaxnum_ieee v4f32:$src1, v4f32:$src2)),
2724+
(v4f32 (XVMAXSP $src1, $src2))>;
2725+
def : Pat<(v4f32 (fminnum_ieee v4f32:$src1, v4f32:$src2)),
2726+
(v4f32 (XVMINSP $src1, $src2))>;
2727+
def : Pat<(v2f64 (fmaxnum_ieee v2f64:$src1, v2f64:$src2)),
2728+
(v2f64 (XVMAXDP $src1, $src2))>;
2729+
def : Pat<(v2f64 (fminnum_ieee v2f64:$src1, v2f64:$src2)),
2730+
(v2f64 (XVMINDP $src1, $src2))>;
2731+
27232732
// f32 abs
27242733
def : Pat<(f32 (fabs f32:$S)),
27252734
(f32 (COPY_TO_REGCLASS (XSABSDP
@@ -2733,39 +2742,23 @@ def : Pat<(f32 (fneg (fabs f32:$S))),
27332742
// f32 Min.
27342743
def : Pat<(f32 (fminnum_ieee f32:$A, f32:$B)),
27352744
(f32 FpMinMax.F32Min)>;
2736-
def : Pat<(f32 (fminnum_ieee (fcanonicalize f32:$A), f32:$B)),
2737-
(f32 FpMinMax.F32Min)>;
2738-
def : Pat<(f32 (fminnum_ieee f32:$A, (fcanonicalize f32:$B))),
2739-
(f32 FpMinMax.F32Min)>;
2740-
def : Pat<(f32 (fminnum_ieee (fcanonicalize f32:$A), (fcanonicalize f32:$B))),
2745+
def : Pat<(f32 (fminnum f32:$A, f32:$B)),
27412746
(f32 FpMinMax.F32Min)>;
27422747
// F32 Max.
27432748
def : Pat<(f32 (fmaxnum_ieee f32:$A, f32:$B)),
27442749
(f32 FpMinMax.F32Max)>;
2745-
def : Pat<(f32 (fmaxnum_ieee (fcanonicalize f32:$A), f32:$B)),
2746-
(f32 FpMinMax.F32Max)>;
2747-
def : Pat<(f32 (fmaxnum_ieee f32:$A, (fcanonicalize f32:$B))),
2748-
(f32 FpMinMax.F32Max)>;
2749-
def : Pat<(f32 (fmaxnum_ieee (fcanonicalize f32:$A), (fcanonicalize f32:$B))),
2750+
def : Pat<(f32 (fmaxnum f32:$A, f32:$B)),
27502751
(f32 FpMinMax.F32Max)>;
27512752

27522753
// f64 Min.
27532754
def : Pat<(f64 (fminnum_ieee f64:$A, f64:$B)),
27542755
(f64 (XSMINDP $A, $B))>;
2755-
def : Pat<(f64 (fminnum_ieee (fcanonicalize f64:$A), f64:$B)),
2756-
(f64 (XSMINDP $A, $B))>;
2757-
def : Pat<(f64 (fminnum_ieee f64:$A, (fcanonicalize f64:$B))),
2758-
(f64 (XSMINDP $A, $B))>;
2759-
def : Pat<(f64 (fminnum_ieee (fcanonicalize f64:$A), (fcanonicalize f64:$B))),
2756+
def : Pat<(f64 (fminnum f64:$A, f64:$B)),
27602757
(f64 (XSMINDP $A, $B))>;
27612758
// f64 Max.
27622759
def : Pat<(f64 (fmaxnum_ieee f64:$A, f64:$B)),
27632760
(f64 (XSMAXDP $A, $B))>;
2764-
def : Pat<(f64 (fmaxnum_ieee (fcanonicalize f64:$A), f64:$B)),
2765-
(f64 (XSMAXDP $A, $B))>;
2766-
def : Pat<(f64 (fmaxnum_ieee f64:$A, (fcanonicalize f64:$B))),
2767-
(f64 (XSMAXDP $A, $B))>;
2768-
def : Pat<(f64 (fmaxnum_ieee (fcanonicalize f64:$A), (fcanonicalize f64:$B))),
2761+
def : Pat<(f64 (fmaxnum f64:$A, f64:$B)),
27692762
(f64 (XSMAXDP $A, $B))>;
27702763

27712764
def : Pat<(int_ppc_vsx_stxvd2x_be v2f64:$rS, ForceXForm:$dst),

llvm/test/CodeGen/PowerPC/fminimum-fmaximum.ll

Lines changed: 34 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -301,44 +301,26 @@ define <4 x float> @v4f32_minimum(<4 x float> %a, <4 x float> %b) {
301301
; VSX-NEXT: xvcmpeqsp 1, 35, 35
302302
; VSX-NEXT: xvcmpeqsp 2, 34, 34
303303
; VSX-NEXT: addis 3, 2, .LCPI4_0@toc@ha
304-
; VSX-NEXT: xxleqv 36, 36, 36
305-
; VSX-NEXT: xvminsp 0, 34, 35
306-
; VSX-NEXT: vslw 4, 4, 4
307304
; VSX-NEXT: addi 3, 3, .LCPI4_0@toc@l
308305
; VSX-NEXT: xxlnor 1, 1, 1
309306
; VSX-NEXT: xxlnor 2, 2, 2
310-
; VSX-NEXT: vcmpequw 5, 2, 4
307+
; VSX-NEXT: xvminsp 0, 34, 35
311308
; VSX-NEXT: xxlor 1, 2, 1
312309
; VSX-NEXT: lxvd2x 2, 0, 3
313-
; VSX-NEXT: xxsel 0, 0, 2, 1
314-
; VSX-NEXT: xxlxor 2, 2, 2
315-
; VSX-NEXT: xvcmpeqsp 2, 0, 2
316-
; VSX-NEXT: xxsel 1, 0, 34, 37
317-
; VSX-NEXT: vcmpequw 2, 3, 4
318-
; VSX-NEXT: xxsel 1, 1, 35, 34
319-
; VSX-NEXT: xxsel 34, 0, 1, 2
310+
; VSX-NEXT: xxsel 34, 0, 2, 1
320311
; VSX-NEXT: blr
321312
;
322313
; AIX-LABEL: v4f32_minimum:
323314
; AIX: # %bb.0: # %entry
324315
; AIX-NEXT: xvcmpeqsp 1, 35, 35
325316
; AIX-NEXT: xvcmpeqsp 2, 34, 34
326317
; AIX-NEXT: ld 3, L..C4(2) # %const.0
327-
; AIX-NEXT: xxleqv 36, 36, 36
328318
; AIX-NEXT: xvminsp 0, 34, 35
329-
; AIX-NEXT: vslw 4, 4, 4
330319
; AIX-NEXT: xxlnor 1, 1, 1
331320
; AIX-NEXT: xxlnor 2, 2, 2
332-
; AIX-NEXT: vcmpequw 5, 2, 4
333321
; AIX-NEXT: xxlor 1, 2, 1
334322
; AIX-NEXT: lxvw4x 2, 0, 3
335-
; AIX-NEXT: xxsel 0, 0, 2, 1
336-
; AIX-NEXT: xxlxor 2, 2, 2
337-
; AIX-NEXT: xvcmpeqsp 2, 0, 2
338-
; AIX-NEXT: xxsel 1, 0, 34, 37
339-
; AIX-NEXT: vcmpequw 2, 3, 4
340-
; AIX-NEXT: xxsel 1, 1, 35, 34
341-
; AIX-NEXT: xxsel 34, 0, 1, 2
323+
; AIX-NEXT: xxsel 34, 0, 2, 1
342324
; AIX-NEXT: blr
343325
entry:
344326
%m = call <4 x float> @llvm.minimum.v4f32(<4 x float> %a, <4 x float> %b)
@@ -377,16 +359,9 @@ define <4 x float> @v4f32_maximum(<4 x float> %a, <4 x float> %b) {
377359
; VSX-NEXT: xxlnor 1, 1, 1
378360
; VSX-NEXT: xxlnor 2, 2, 2
379361
; VSX-NEXT: xvmaxsp 0, 34, 35
380-
; VSX-NEXT: xxlxor 36, 36, 36
381-
; VSX-NEXT: vcmpequw 5, 2, 4
382362
; VSX-NEXT: xxlor 1, 2, 1
383363
; VSX-NEXT: lxvd2x 2, 0, 3
384-
; VSX-NEXT: xxsel 0, 0, 2, 1
385-
; VSX-NEXT: xvcmpeqsp 2, 0, 36
386-
; VSX-NEXT: xxsel 1, 0, 34, 37
387-
; VSX-NEXT: vcmpequw 2, 3, 4
388-
; VSX-NEXT: xxsel 1, 1, 35, 34
389-
; VSX-NEXT: xxsel 34, 0, 1, 2
364+
; VSX-NEXT: xxsel 34, 0, 2, 1
390365
; VSX-NEXT: blr
391366
;
392367
; AIX-LABEL: v4f32_maximum:
@@ -395,18 +370,11 @@ define <4 x float> @v4f32_maximum(<4 x float> %a, <4 x float> %b) {
395370
; AIX-NEXT: xvcmpeqsp 2, 34, 34
396371
; AIX-NEXT: ld 3, L..C5(2) # %const.0
397372
; AIX-NEXT: xvmaxsp 0, 34, 35
398-
; AIX-NEXT: xxlxor 36, 36, 36
399373
; AIX-NEXT: xxlnor 1, 1, 1
400374
; AIX-NEXT: xxlnor 2, 2, 2
401-
; AIX-NEXT: vcmpequw 5, 2, 4
402375
; AIX-NEXT: xxlor 1, 2, 1
403376
; AIX-NEXT: lxvw4x 2, 0, 3
404-
; AIX-NEXT: xxsel 0, 0, 2, 1
405-
; AIX-NEXT: xvcmpeqsp 2, 0, 36
406-
; AIX-NEXT: xxsel 1, 0, 34, 37
407-
; AIX-NEXT: vcmpequw 2, 3, 4
408-
; AIX-NEXT: xxsel 1, 1, 35, 34
409-
; AIX-NEXT: xxsel 34, 0, 1, 2
377+
; AIX-NEXT: xxsel 34, 0, 2, 1
410378
; AIX-NEXT: blr
411379
entry:
412380
%m = call <4 x float> @llvm.maximum.v4f32(<4 x float> %a, <4 x float> %b)
@@ -493,47 +461,28 @@ define <2 x double> @v2f64_minimum(<2 x double> %a, <2 x double> %b) {
493461
; VSX-LABEL: v2f64_minimum:
494462
; VSX: # %bb.0: # %entry
495463
; VSX-NEXT: addis 3, 2, .LCPI6_0@toc@ha
496-
; VSX-NEXT: xvcmpeqdp 36, 35, 35
497-
; VSX-NEXT: xvcmpeqdp 37, 34, 34
498-
; VSX-NEXT: addi 3, 3, .LCPI6_0@toc@l
499-
; VSX-NEXT: xxlnor 36, 36, 36
500-
; VSX-NEXT: xxlnor 37, 37, 37
501464
; VSX-NEXT: xvmindp 0, 34, 35
465+
; VSX-NEXT: xvcmpeqdp 35, 35, 35
466+
; VSX-NEXT: addi 3, 3, .LCPI6_0@toc@l
467+
; VSX-NEXT: xvcmpeqdp 34, 34, 34
468+
; VSX-NEXT: xxlnor 35, 35, 35
469+
; VSX-NEXT: xxlnor 34, 34, 34
502470
; VSX-NEXT: lxvd2x 2, 0, 3
503-
; VSX-NEXT: addis 3, 2, .LCPI6_1@toc@ha
504-
; VSX-NEXT: xxlor 1, 37, 36
505-
; VSX-NEXT: addi 3, 3, .LCPI6_1@toc@l
506-
; VSX-NEXT: lxvd2x 36, 0, 3
507-
; VSX-NEXT: vcmpequd 5, 2, 4
508-
; VSX-NEXT: xxsel 0, 0, 2, 1
509-
; VSX-NEXT: xxlxor 2, 2, 2
510-
; VSX-NEXT: xxsel 1, 0, 34, 37
511-
; VSX-NEXT: vcmpequd 2, 3, 4
512-
; VSX-NEXT: xxsel 1, 1, 35, 34
513-
; VSX-NEXT: xvcmpeqdp 34, 0, 2
514-
; VSX-NEXT: xxsel 34, 0, 1, 34
471+
; VSX-NEXT: xxlor 1, 34, 35
472+
; VSX-NEXT: xxsel 34, 0, 2, 1
515473
; VSX-NEXT: blr
516474
;
517475
; AIX-LABEL: v2f64_minimum:
518476
; AIX: # %bb.0: # %entry
519477
; AIX-NEXT: ld 3, L..C6(2) # %const.0
520-
; AIX-NEXT: xvcmpeqdp 36, 35, 35
521-
; AIX-NEXT: xvcmpeqdp 37, 34, 34
522-
; AIX-NEXT: lxvd2x 2, 0, 3
523-
; AIX-NEXT: ld 3, L..C7(2) # %const.1
524-
; AIX-NEXT: xxlnor 36, 36, 36
525-
; AIX-NEXT: xxlnor 37, 37, 37
526478
; AIX-NEXT: xvmindp 0, 34, 35
527-
; AIX-NEXT: xxlor 1, 37, 36
528-
; AIX-NEXT: lxvd2x 36, 0, 3
529-
; AIX-NEXT: vcmpequd 5, 2, 4
530-
; AIX-NEXT: xxsel 0, 0, 2, 1
531-
; AIX-NEXT: xxlxor 2, 2, 2
532-
; AIX-NEXT: xxsel 1, 0, 34, 37
533-
; AIX-NEXT: vcmpequd 2, 3, 4
534-
; AIX-NEXT: xxsel 1, 1, 35, 34
535-
; AIX-NEXT: xvcmpeqdp 34, 0, 2
536-
; AIX-NEXT: xxsel 34, 0, 1, 34
479+
; AIX-NEXT: xvcmpeqdp 35, 35, 35
480+
; AIX-NEXT: lxvd2x 2, 0, 3
481+
; AIX-NEXT: xvcmpeqdp 34, 34, 34
482+
; AIX-NEXT: xxlnor 35, 35, 35
483+
; AIX-NEXT: xxlnor 34, 34, 34
484+
; AIX-NEXT: xxlor 1, 34, 35
485+
; AIX-NEXT: xxsel 34, 0, 2, 1
537486
; AIX-NEXT: blr
538487
entry:
539488
%m = call <2 x double> @llvm.minimum.v2f64(<2 x double> %a, <2 x double> %b)
@@ -618,42 +567,28 @@ define <2 x double> @v2f64_maximum(<2 x double> %a, <2 x double> %b) {
618567
; VSX-LABEL: v2f64_maximum:
619568
; VSX: # %bb.0: # %entry
620569
; VSX-NEXT: addis 3, 2, .LCPI7_0@toc@ha
621-
; VSX-NEXT: xvcmpeqdp 36, 35, 35
622-
; VSX-NEXT: xvcmpeqdp 37, 34, 34
623-
; VSX-NEXT: addi 3, 3, .LCPI7_0@toc@l
624-
; VSX-NEXT: xxlnor 36, 36, 36
625-
; VSX-NEXT: xxlnor 37, 37, 37
626570
; VSX-NEXT: xvmaxdp 0, 34, 35
571+
; VSX-NEXT: xvcmpeqdp 35, 35, 35
572+
; VSX-NEXT: addi 3, 3, .LCPI7_0@toc@l
573+
; VSX-NEXT: xvcmpeqdp 34, 34, 34
574+
; VSX-NEXT: xxlnor 35, 35, 35
575+
; VSX-NEXT: xxlnor 34, 34, 34
627576
; VSX-NEXT: lxvd2x 2, 0, 3
628-
; VSX-NEXT: xxlor 1, 37, 36
629-
; VSX-NEXT: xxlxor 36, 36, 36
630-
; VSX-NEXT: vcmpequd 5, 2, 4
631-
; VSX-NEXT: xxsel 0, 0, 2, 1
632-
; VSX-NEXT: xxsel 1, 0, 34, 37
633-
; VSX-NEXT: vcmpequd 2, 3, 4
634-
; VSX-NEXT: xxsel 1, 1, 35, 34
635-
; VSX-NEXT: xvcmpeqdp 34, 0, 36
636-
; VSX-NEXT: xxsel 34, 0, 1, 34
577+
; VSX-NEXT: xxlor 1, 34, 35
578+
; VSX-NEXT: xxsel 34, 0, 2, 1
637579
; VSX-NEXT: blr
638580
;
639581
; AIX-LABEL: v2f64_maximum:
640582
; AIX: # %bb.0: # %entry
641-
; AIX-NEXT: ld 3, L..C8(2) # %const.0
642-
; AIX-NEXT: xvcmpeqdp 36, 35, 35
643-
; AIX-NEXT: xvcmpeqdp 37, 34, 34
644-
; AIX-NEXT: lxvd2x 2, 0, 3
645-
; AIX-NEXT: xxlnor 36, 36, 36
646-
; AIX-NEXT: xxlnor 37, 37, 37
583+
; AIX-NEXT: ld 3, L..C7(2) # %const.0
647584
; AIX-NEXT: xvmaxdp 0, 34, 35
648-
; AIX-NEXT: xxlor 1, 37, 36
649-
; AIX-NEXT: xxlxor 36, 36, 36
650-
; AIX-NEXT: vcmpequd 5, 2, 4
651-
; AIX-NEXT: xxsel 0, 0, 2, 1
652-
; AIX-NEXT: xxsel 1, 0, 34, 37
653-
; AIX-NEXT: vcmpequd 2, 3, 4
654-
; AIX-NEXT: xxsel 1, 1, 35, 34
655-
; AIX-NEXT: xvcmpeqdp 34, 0, 36
656-
; AIX-NEXT: xxsel 34, 0, 1, 34
585+
; AIX-NEXT: xvcmpeqdp 35, 35, 35
586+
; AIX-NEXT: lxvd2x 2, 0, 3
587+
; AIX-NEXT: xvcmpeqdp 34, 34, 34
588+
; AIX-NEXT: xxlnor 35, 35, 35
589+
; AIX-NEXT: xxlnor 34, 34, 34
590+
; AIX-NEXT: xxlor 1, 34, 35
591+
; AIX-NEXT: xxsel 34, 0, 2, 1
657592
; AIX-NEXT: blr
658593
entry:
659594
%m = call <2 x double> @llvm.maximum.v2f64(<2 x double> %a, <2 x double> %b)

llvm/test/CodeGen/PowerPC/scalar-min-max.ll

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,12 @@ define dso_local float @testfmax_fast(float %a, float %b) local_unnamed_addr {
117117
;
118118
; NO-FAST-P9-LABEL: testfmax_fast:
119119
; NO-FAST-P9: # %bb.0: # %entry
120-
; NO-FAST-P9-NEXT: xsmaxcdp f1, f1, f2
120+
; NO-FAST-P9-NEXT: xsmaxdp f1, f1, f2
121121
; NO-FAST-P9-NEXT: blr
122122
;
123123
; NO-FAST-P8-LABEL: testfmax_fast:
124124
; NO-FAST-P8: # %bb.0: # %entry
125-
; NO-FAST-P8-NEXT: xssubsp f0, f2, f1
126-
; NO-FAST-P8-NEXT: fsel f1, f0, f2, f1
125+
; NO-FAST-P8-NEXT: xsmaxdp f1, f1, f2
127126
; NO-FAST-P8-NEXT: blr
128127
entry:
129128
%cmp = fcmp nnan ninf ogt float %a, %b
@@ -138,13 +137,12 @@ define dso_local double @testdmax_fast(double %a, double %b) local_unnamed_addr
138137
;
139138
; NO-FAST-P9-LABEL: testdmax_fast:
140139
; NO-FAST-P9: # %bb.0: # %entry
141-
; NO-FAST-P9-NEXT: xsmaxcdp f1, f1, f2
140+
; NO-FAST-P9-NEXT: xsmaxdp f1, f1, f2
142141
; NO-FAST-P9-NEXT: blr
143142
;
144143
; NO-FAST-P8-LABEL: testdmax_fast:
145144
; NO-FAST-P8: # %bb.0: # %entry
146-
; NO-FAST-P8-NEXT: xssubdp f0, f2, f1
147-
; NO-FAST-P8-NEXT: fsel f1, f0, f2, f1
145+
; NO-FAST-P8-NEXT: xsmaxdp f1, f1, f2
148146
; NO-FAST-P8-NEXT: blr
149147
entry:
150148
%cmp = fcmp nnan ninf ogt double %a, %b
@@ -159,13 +157,12 @@ define dso_local float @testfmin_fast(float %a, float %b) local_unnamed_addr {
159157
;
160158
; NO-FAST-P9-LABEL: testfmin_fast:
161159
; NO-FAST-P9: # %bb.0: # %entry
162-
; NO-FAST-P9-NEXT: xsmincdp f1, f1, f2
160+
; NO-FAST-P9-NEXT: xsmindp f1, f1, f2
163161
; NO-FAST-P9-NEXT: blr
164162
;
165163
; NO-FAST-P8-LABEL: testfmin_fast:
166164
; NO-FAST-P8: # %bb.0: # %entry
167-
; NO-FAST-P8-NEXT: xssubsp f0, f1, f2
168-
; NO-FAST-P8-NEXT: fsel f1, f0, f2, f1
165+
; NO-FAST-P8-NEXT: xsmindp f1, f1, f2
169166
; NO-FAST-P8-NEXT: blr
170167
entry:
171168
%cmp = fcmp nnan ninf olt float %a, %b
@@ -180,13 +177,12 @@ define dso_local double @testdmin_fast(double %a, double %b) local_unnamed_addr
180177
;
181178
; NO-FAST-P9-LABEL: testdmin_fast:
182179
; NO-FAST-P9: # %bb.0: # %entry
183-
; NO-FAST-P9-NEXT: xsmincdp f1, f1, f2
180+
; NO-FAST-P9-NEXT: xsmindp f1, f1, f2
184181
; NO-FAST-P9-NEXT: blr
185182
;
186183
; NO-FAST-P8-LABEL: testdmin_fast:
187184
; NO-FAST-P8: # %bb.0: # %entry
188-
; NO-FAST-P8-NEXT: xssubdp f0, f1, f2
189-
; NO-FAST-P8-NEXT: fsel f1, f0, f2, f1
185+
; NO-FAST-P8-NEXT: xsmindp f1, f1, f2
190186
; NO-FAST-P8-NEXT: blr
191187
entry:
192188
%cmp = fcmp nnan ninf olt double %a, %b

0 commit comments

Comments
 (0)