[llvm] 6f0e961 - [WebAssembly] Correct operands for NaN/Zero checks in min/max (#189712)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 1 08:54:42 PDT 2026
Author: zGoldthorpe
Date: 2026-04-01T15:54:36Z
New Revision: 6f0e961cc2d541e96b1a98c3f196855b0eab2856
URL: https://github.com/llvm/llvm-project/commit/6f0e961cc2d541e96b1a98c3f196855b0eab2856
DIFF: https://github.com/llvm/llvm-project/commit/6f0e961cc2d541e96b1a98c3f196855b0eab2856.diff
LOG: [WebAssembly] Correct operands for NaN/Zero checks in min/max (#189712)
The `pmin` and `pmax` pattern fragments match `vselect`s, meaning that
the generated operands for `relaxed_min` and `relaxed_max` correspond to
operands 1 and 2 of the `vselect` (rather than operands 0 and 1).
Added:
Modified:
llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td
Removed:
################################################################################
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td
index d30c18401d6d6..ac810893999cf 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td
@@ -1369,7 +1369,7 @@ multiclass PMinMaxInt<Vec vec, NI baseMinInst, NI baseMaxInst> {
// the wasm_simd128.h intrinsics because v128_t is an integer vector.
foreach vec = [F32x4, F64x2, F16x8] in {
defvar pmin = !cast<NI>("PMIN_"#vec);
- defvar pmax = !cast<NI>("PMAX_"#vec);
+ defvar pmax = !cast<NI>("PMAX_"#vec);
defm : PMinMaxInt<vec, pmin, pmax>;
}
@@ -1842,21 +1842,21 @@ def relaxed_fmax : SDNode<"WebAssemblyISD::RELAXED_FMAX", SDTFPBinOp>;
def relaxed_pmin :
PatFrag<(ops node:$lhs, node:$rhs), (pmin $lhs, $rhs), [{
return (N->getFlags().hasNoNaNs() ||
- (CurDAG->isKnownNeverNaN(N->getOperand(0)) &&
- CurDAG->isKnownNeverNaN(N->getOperand(1)))) &&
+ (CurDAG->isKnownNeverNaN(N->getOperand(1)) &&
+ CurDAG->isKnownNeverNaN(N->getOperand(2)))) &&
(N->getFlags().hasNoSignedZeros() ||
- CurDAG->isKnownNeverZeroFloat(N->getOperand(0)) ||
- CurDAG->isKnownNeverZeroFloat(N->getOperand(1)));
+ CurDAG->isKnownNeverZeroFloat(N->getOperand(1)) ||
+ CurDAG->isKnownNeverZeroFloat(N->getOperand(2)));
}]>;
def relaxed_pmax :
PatFrag<(ops node:$lhs, node:$rhs), (pmax $lhs, $rhs), [{
return (N->getFlags().hasNoNaNs() ||
- (CurDAG->isKnownNeverNaN(N->getOperand(0)) &&
- CurDAG->isKnownNeverNaN(N->getOperand(1)))) &&
+ ((CurDAG->isKnownNeverNaN(N->getOperand(1))) &&
+ CurDAG->isKnownNeverNaN(N->getOperand(2)))) &&
(N->getFlags().hasNoSignedZeros() ||
- CurDAG->isKnownNeverZeroFloat(N->getOperand(0)) ||
- CurDAG->isKnownNeverZeroFloat(N->getOperand(1)));
+ CurDAG->isKnownNeverZeroFloat(N->getOperand(1)) ||
+ CurDAG->isKnownNeverZeroFloat(N->getOperand(2)));
}]>;
let Predicates = [HasRelaxedSIMD] in {
More information about the llvm-commits
mailing list