[llvm] [X86][SATCVT] Reduce MIN/MAXSS/D by conversion instruction result (PR #136471)
Phoebe Wang via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 20 03:15:00 PDT 2025
================
@@ -21851,6 +21851,15 @@ X86TargetLowering::LowerFP_TO_INT_SAT(SDValue Op, SelectionDAG &DAG) const {
assert(SatWidth <= DstWidth && SatWidth <= TmpWidth &&
"Expected saturation width smaller than result width");
+ // AVX512 provides VCVTSS/D2USI which return INT_MAX/LONG_MAX when overflow
+ // happens. X86ISD::FMAX makes sure negative value and NaN return 0.
+ if (Subtarget.hasAVX512() && !IsSigned && SatWidth == DstWidth &&
+ (DstVT == MVT::i32 || (Subtarget.is64Bit() && DstVT == MVT::i64))) {
+ SDValue MinFloatNode = DAG.getConstantFP(0.0, dl, SrcVT);
+ SDValue Clamped = DAG.getNode(X86ISD::FMAX, dl, SrcVT, Src, MinFloatNode);
+ return DAG.getNode(ISD::FP_TO_UINT, dl, DstVT, Clamped);
----------------
phoebewang wrote:
I don't think so. FP_TO_UINT(f32/f64->i32/64) is and only is legal with AVX512, so we can consider it's a 1:1 map between them. See the lowering code:
```
if (!IsSigned && UseSSEReg) {
// Conversions from f32/f64 with AVX512 should be legal.
if (Subtarget.hasAVX512())
return Op;
```
https://github.com/llvm/llvm-project/pull/136471
More information about the llvm-commits
mailing list