Skip to content

expandFMINIMUMNUM_FMAXIMUMNUM: Quiet is not needed for NaN vs NaN #139237

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8684,11 +8684,6 @@ SDValue TargetLowering::expandFMINIMUMNUM_FMAXIMUMNUM(SDNode *Node,

SDValue MinMax =
DAG.getSelectCC(DL, LHS, RHS, LHS, RHS, IsMax ? ISD::SETGT : ISD::SETLT);
// If MinMax is NaN, let's quiet it.
if (!Flags.hasNoNaNs() && !DAG.isKnownNeverNaN(LHS) &&
!DAG.isKnownNeverNaN(RHS)) {
MinMax = DAG.getNode(ISD::FCANONICALIZE, DL, VT, MinMax, Flags);
}

// Fixup signed zero behavior.
if (Options.NoSignedZerosFPMath || Flags.hasNoSignedZeros() ||
Expand Down
686 changes: 193 additions & 493 deletions llvm/test/CodeGen/AMDGPU/fmax3-maximumnum.ll

Large diffs are not rendered by default.

735 changes: 217 additions & 518 deletions llvm/test/CodeGen/AMDGPU/fmin3-minimumnum.ll

Large diffs are not rendered by default.

19,393 changes: 7,105 additions & 12,288 deletions llvm/test/CodeGen/AMDGPU/maximumnum.bf16.ll

Large diffs are not rendered by default.

19,596 changes: 7,214 additions & 12,382 deletions llvm/test/CodeGen/AMDGPU/minimumnum.bf16.ll

Large diffs are not rendered by default.

195 changes: 195 additions & 0 deletions llvm/test/CodeGen/Mips/fp-maximumnum-minimumnum.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc --mtriple=mipsisa32r6 < %s | FileCheck %s --check-prefix=MIPS32R6
; RUN: llc --mtriple=mips64 < %s | FileCheck %s --check-prefix=MIPS64R2

declare float @llvm.maximumnum.f32(float, float)
declare double @llvm.maximumnum.f64(double, double)
Expand All @@ -13,6 +14,25 @@ define float @maximumnum_float(float %x, float %y) {
; MIPS32R6-NEXT: min.s $f1, $f12, $f12
; MIPS32R6-NEXT: jr $ra
; MIPS32R6-NEXT: max.s $f0, $f1, $f0
;
; MIPS64R2-LABEL: maximumnum_float:
; MIPS64R2: # %bb.0:
; MIPS64R2-NEXT: c.un.s $f12, $f12
; MIPS64R2-NEXT: movt.s $f12, $f13, $fcc0
; MIPS64R2-NEXT: c.un.s $f13, $f13
; MIPS64R2-NEXT: movt.s $f13, $f12, $fcc0
; MIPS64R2-NEXT: c.ule.s $f12, $f13
; MIPS64R2-NEXT: mov.s $f0, $f13
; MIPS64R2-NEXT: movf.s $f0, $f12, $fcc0
; MIPS64R2-NEXT: mfc1 $1, $f12
; MIPS64R2-NEXT: mov.s $f1, $f0
; MIPS64R2-NEXT: movz.s $f1, $f12, $1
; MIPS64R2-NEXT: mfc1 $1, $f13
; MIPS64R2-NEXT: movz.s $f1, $f13, $1
; MIPS64R2-NEXT: mtc1 $zero, $f2
; MIPS64R2-NEXT: c.eq.s $f0, $f2
; MIPS64R2-NEXT: jr $ra
; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
%z = call float @llvm.maximumnum.f32(float %x, float %y)
ret float %z
}
Expand All @@ -24,6 +44,17 @@ define float @maximumnum_float_nsz(float %x, float %y) {
; MIPS32R6-NEXT: min.s $f1, $f12, $f12
; MIPS32R6-NEXT: jr $ra
; MIPS32R6-NEXT: max.s $f0, $f1, $f0
;
; MIPS64R2-LABEL: maximumnum_float_nsz:
; MIPS64R2: # %bb.0:
; MIPS64R2-NEXT: mov.s $f0, $f13
; MIPS64R2-NEXT: c.un.s $f12, $f12
; MIPS64R2-NEXT: movt.s $f12, $f13, $fcc0
; MIPS64R2-NEXT: c.un.s $f13, $f13
; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
; MIPS64R2-NEXT: c.ule.s $f12, $f0
; MIPS64R2-NEXT: jr $ra
; MIPS64R2-NEXT: movf.s $f0, $f12, $fcc0
%z = call nsz float @llvm.maximumnum.f32(float %x, float %y)
ret float %z
}
Expand All @@ -33,6 +64,21 @@ define float @maximumnum_float_nnan(float %x, float %y) {
; MIPS32R6: # %bb.0:
; MIPS32R6-NEXT: jr $ra
; MIPS32R6-NEXT: max.s $f0, $f12, $f14
;
; MIPS64R2-LABEL: maximumnum_float_nnan:
; MIPS64R2: # %bb.0:
; MIPS64R2-NEXT: c.ule.s $f12, $f13
; MIPS64R2-NEXT: mov.s $f0, $f13
; MIPS64R2-NEXT: movf.s $f0, $f12, $fcc0
; MIPS64R2-NEXT: mfc1 $1, $f12
; MIPS64R2-NEXT: mov.s $f1, $f0
; MIPS64R2-NEXT: movz.s $f1, $f12, $1
; MIPS64R2-NEXT: mfc1 $1, $f13
; MIPS64R2-NEXT: movz.s $f1, $f13, $1
; MIPS64R2-NEXT: mtc1 $zero, $f2
; MIPS64R2-NEXT: c.eq.s $f0, $f2
; MIPS64R2-NEXT: jr $ra
; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
%z = call nnan float @llvm.maximumnum.f32(float %x, float %y)
ret float %z
}
Expand All @@ -45,6 +91,25 @@ define double @maximumnum_double(double %x, double %y) {
; MIPS32R6-NEXT: min.d $f1, $f12, $f12
; MIPS32R6-NEXT: jr $ra
; MIPS32R6-NEXT: max.d $f0, $f1, $f0
;
; MIPS64R2-LABEL: maximumnum_double:
; MIPS64R2: # %bb.0:
; MIPS64R2-NEXT: c.un.d $f12, $f12
; MIPS64R2-NEXT: movt.d $f12, $f13, $fcc0
; MIPS64R2-NEXT: c.un.d $f13, $f13
; MIPS64R2-NEXT: movt.d $f13, $f12, $fcc0
; MIPS64R2-NEXT: c.ule.d $f12, $f13
; MIPS64R2-NEXT: mov.d $f0, $f13
; MIPS64R2-NEXT: movf.d $f0, $f12, $fcc0
; MIPS64R2-NEXT: dmfc1 $1, $f12
; MIPS64R2-NEXT: mov.d $f1, $f0
; MIPS64R2-NEXT: movz.d $f1, $f12, $1
; MIPS64R2-NEXT: dmfc1 $1, $f13
; MIPS64R2-NEXT: movz.d $f1, $f13, $1
; MIPS64R2-NEXT: dmtc1 $zero, $f2
; MIPS64R2-NEXT: c.eq.d $f0, $f2
; MIPS64R2-NEXT: jr $ra
; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
%z = call double @llvm.maximumnum.f64(double %x, double %y)
ret double %z
}
Expand All @@ -56,6 +121,17 @@ define double @maximumnum_double_nsz(double %x, double %y) {
; MIPS32R6-NEXT: min.d $f1, $f12, $f12
; MIPS32R6-NEXT: jr $ra
; MIPS32R6-NEXT: max.d $f0, $f1, $f0
;
; MIPS64R2-LABEL: maximumnum_double_nsz:
; MIPS64R2: # %bb.0:
; MIPS64R2-NEXT: mov.d $f0, $f13
; MIPS64R2-NEXT: c.un.d $f12, $f12
; MIPS64R2-NEXT: movt.d $f12, $f13, $fcc0
; MIPS64R2-NEXT: c.un.d $f13, $f13
; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
; MIPS64R2-NEXT: c.ule.d $f12, $f0
; MIPS64R2-NEXT: jr $ra
; MIPS64R2-NEXT: movf.d $f0, $f12, $fcc0
%z = call nsz double @llvm.maximumnum.f64(double %x, double %y)
ret double %z
}
Expand All @@ -65,6 +141,21 @@ define double @maximumnum_double_nnan(double %x, double %y) {
; MIPS32R6: # %bb.0:
; MIPS32R6-NEXT: jr $ra
; MIPS32R6-NEXT: max.d $f0, $f12, $f14
;
; MIPS64R2-LABEL: maximumnum_double_nnan:
; MIPS64R2: # %bb.0:
; MIPS64R2-NEXT: c.ule.d $f12, $f13
; MIPS64R2-NEXT: mov.d $f0, $f13
; MIPS64R2-NEXT: movf.d $f0, $f12, $fcc0
; MIPS64R2-NEXT: dmfc1 $1, $f12
; MIPS64R2-NEXT: mov.d $f1, $f0
; MIPS64R2-NEXT: movz.d $f1, $f12, $1
; MIPS64R2-NEXT: dmfc1 $1, $f13
; MIPS64R2-NEXT: movz.d $f1, $f13, $1
; MIPS64R2-NEXT: dmtc1 $zero, $f2
; MIPS64R2-NEXT: c.eq.d $f0, $f2
; MIPS64R2-NEXT: jr $ra
; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
%z = call nnan double @llvm.maximumnum.f64(double %x, double %y)
ret double %z
}
Expand All @@ -76,6 +167,28 @@ define float @minimumnum_float(float %x, float %y) {
; MIPS32R6-NEXT: min.s $f1, $f12, $f12
; MIPS32R6-NEXT: jr $ra
; MIPS32R6-NEXT: min.s $f0, $f1, $f0
;
; MIPS64R2-LABEL: minimumnum_float:
; MIPS64R2: # %bb.0:
; MIPS64R2-NEXT: c.un.s $f12, $f12
; MIPS64R2-NEXT: movt.s $f12, $f13, $fcc0
; MIPS64R2-NEXT: c.un.s $f13, $f13
; MIPS64R2-NEXT: movt.s $f13, $f12, $fcc0
; MIPS64R2-NEXT: c.olt.s $f12, $f13
; MIPS64R2-NEXT: mov.s $f0, $f13
; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
; MIPS64R2-NEXT: mfc1 $1, $f12
; MIPS64R2-NEXT: lui $2, 32768
; MIPS64R2-NEXT: xor $1, $1, $2
; MIPS64R2-NEXT: mov.s $f1, $f0
; MIPS64R2-NEXT: movz.s $f1, $f12, $1
; MIPS64R2-NEXT: mfc1 $1, $f13
; MIPS64R2-NEXT: xor $1, $1, $2
; MIPS64R2-NEXT: movz.s $f1, $f13, $1
; MIPS64R2-NEXT: mtc1 $zero, $f2
; MIPS64R2-NEXT: c.eq.s $f0, $f2
; MIPS64R2-NEXT: jr $ra
; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
%z = call float @llvm.minimumnum.f32(float %x, float %y)
ret float %z
}
Expand All @@ -87,6 +200,17 @@ define float @minimumnum_float_nsz(float %x, float %y) {
; MIPS32R6-NEXT: min.s $f1, $f12, $f12
; MIPS32R6-NEXT: jr $ra
; MIPS32R6-NEXT: min.s $f0, $f1, $f0
;
; MIPS64R2-LABEL: minimumnum_float_nsz:
; MIPS64R2: # %bb.0:
; MIPS64R2-NEXT: mov.s $f0, $f13
; MIPS64R2-NEXT: c.un.s $f12, $f12
; MIPS64R2-NEXT: movt.s $f12, $f13, $fcc0
; MIPS64R2-NEXT: c.un.s $f13, $f13
; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
; MIPS64R2-NEXT: c.olt.s $f12, $f0
; MIPS64R2-NEXT: jr $ra
; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
%z = call nsz float @llvm.minimumnum.f32(float %x, float %y)
ret float %z
}
Expand All @@ -96,6 +220,24 @@ define float @minimumnum_float_nnan(float %x, float %y) {
; MIPS32R6: # %bb.0:
; MIPS32R6-NEXT: jr $ra
; MIPS32R6-NEXT: min.s $f0, $f12, $f14
;
; MIPS64R2-LABEL: minimumnum_float_nnan:
; MIPS64R2: # %bb.0:
; MIPS64R2-NEXT: c.olt.s $f12, $f13
; MIPS64R2-NEXT: mov.s $f0, $f13
; MIPS64R2-NEXT: movt.s $f0, $f12, $fcc0
; MIPS64R2-NEXT: mfc1 $1, $f12
; MIPS64R2-NEXT: lui $2, 32768
; MIPS64R2-NEXT: xor $1, $1, $2
; MIPS64R2-NEXT: mov.s $f1, $f0
; MIPS64R2-NEXT: movz.s $f1, $f12, $1
; MIPS64R2-NEXT: mfc1 $1, $f13
; MIPS64R2-NEXT: xor $1, $1, $2
; MIPS64R2-NEXT: movz.s $f1, $f13, $1
; MIPS64R2-NEXT: mtc1 $zero, $f2
; MIPS64R2-NEXT: c.eq.s $f0, $f2
; MIPS64R2-NEXT: jr $ra
; MIPS64R2-NEXT: movt.s $f0, $f1, $fcc0
%z = call nnan float @llvm.minimumnum.f32(float %x, float %y)
ret float %z
}
Expand All @@ -107,6 +249,29 @@ define double @minimumnum_double(double %x, double %y) {
; MIPS32R6-NEXT: min.d $f1, $f12, $f12
; MIPS32R6-NEXT: jr $ra
; MIPS32R6-NEXT: min.d $f0, $f1, $f0
;
; MIPS64R2-LABEL: minimumnum_double:
; MIPS64R2: # %bb.0:
; MIPS64R2-NEXT: c.un.d $f12, $f12
; MIPS64R2-NEXT: movt.d $f12, $f13, $fcc0
; MIPS64R2-NEXT: c.un.d $f13, $f13
; MIPS64R2-NEXT: movt.d $f13, $f12, $fcc0
; MIPS64R2-NEXT: c.olt.d $f12, $f13
; MIPS64R2-NEXT: mov.d $f0, $f13
; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
; MIPS64R2-NEXT: dmfc1 $1, $f12
; MIPS64R2-NEXT: daddiu $2, $zero, 1
; MIPS64R2-NEXT: dsll $2, $2, 63
; MIPS64R2-NEXT: xor $1, $1, $2
; MIPS64R2-NEXT: mov.d $f1, $f0
; MIPS64R2-NEXT: movz.d $f1, $f12, $1
; MIPS64R2-NEXT: dmfc1 $1, $f13
; MIPS64R2-NEXT: xor $1, $1, $2
; MIPS64R2-NEXT: movz.d $f1, $f13, $1
; MIPS64R2-NEXT: dmtc1 $zero, $f2
; MIPS64R2-NEXT: c.eq.d $f0, $f2
; MIPS64R2-NEXT: jr $ra
; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
%z = call double @llvm.minimumnum.f64(double %x, double %y)
ret double %z
}
Expand All @@ -118,6 +283,17 @@ define double @minimumnum_double_nsz(double %x, double %y) {
; MIPS32R6-NEXT: min.d $f1, $f12, $f12
; MIPS32R6-NEXT: jr $ra
; MIPS32R6-NEXT: min.d $f0, $f1, $f0
;
; MIPS64R2-LABEL: minimumnum_double_nsz:
; MIPS64R2: # %bb.0:
; MIPS64R2-NEXT: mov.d $f0, $f13
; MIPS64R2-NEXT: c.un.d $f12, $f12
; MIPS64R2-NEXT: movt.d $f12, $f13, $fcc0
; MIPS64R2-NEXT: c.un.d $f13, $f13
; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
; MIPS64R2-NEXT: c.olt.d $f12, $f0
; MIPS64R2-NEXT: jr $ra
; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
%z = call nsz double @llvm.minimumnum.f64(double %x, double %y)
ret double %z
}
Expand All @@ -127,6 +303,25 @@ define double @minimumnum_double_nnan(double %x, double %y) {
; MIPS32R6: # %bb.0:
; MIPS32R6-NEXT: jr $ra
; MIPS32R6-NEXT: min.d $f0, $f12, $f14
;
; MIPS64R2-LABEL: minimumnum_double_nnan:
; MIPS64R2: # %bb.0:
; MIPS64R2-NEXT: c.olt.d $f12, $f13
; MIPS64R2-NEXT: mov.d $f0, $f13
; MIPS64R2-NEXT: movt.d $f0, $f12, $fcc0
; MIPS64R2-NEXT: daddiu $1, $zero, 1
; MIPS64R2-NEXT: dsll $1, $1, 63
; MIPS64R2-NEXT: dmfc1 $2, $f12
; MIPS64R2-NEXT: xor $2, $2, $1
; MIPS64R2-NEXT: mov.d $f1, $f0
; MIPS64R2-NEXT: movz.d $f1, $f12, $2
; MIPS64R2-NEXT: dmfc1 $2, $f13
; MIPS64R2-NEXT: xor $1, $2, $1
; MIPS64R2-NEXT: movz.d $f1, $f13, $1
; MIPS64R2-NEXT: dmtc1 $zero, $f2
; MIPS64R2-NEXT: c.eq.d $f0, $f2
; MIPS64R2-NEXT: jr $ra
; MIPS64R2-NEXT: movt.d $f0, $f1, $fcc0
%z = call nnan double @llvm.minimumnum.f64(double %x, double %y)
ret double %z
}
Loading