Skip to content

Commit bc6d639

Browse files
committed
Vectorize: Support fminimumnum and fmaximumnum
Support auto-vectorize for fminimum_num and fmaximum_num. For ARM64 with SVE, scalable vector cannot support yet, and For RISCV Vector, scalable vector works well now. use opt for testcase instead of clang
1 parent 1f195af commit bc6d639

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

llvm/include/llvm/CodeGen/BasicTTIImpl.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2776,6 +2776,12 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
27762776
}
27772777
return Cost;
27782778
}
2779+
case Intrinsic::maximumnum:
2780+
case Intrinsic::minimumnum: {
2781+
if (TLI->isOperationLegalOrPromote(llvm::ISD::FMAXNUM_IEEE, LT.second))
2782+
return LT.first * 3;
2783+
break;
2784+
}
27792785
default:
27802786
break;
27812787
}

llvm/lib/Analysis/VectorUtils.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ bool llvm::isTriviallyVectorizable(Intrinsic::ID ID) {
8989
case Intrinsic::maxnum:
9090
case Intrinsic::minimum:
9191
case Intrinsic::maximum:
92+
case Intrinsic::minimumnum:
93+
case Intrinsic::maximumnum:
9294
case Intrinsic::modf:
9395
case Intrinsic::copysign:
9496
case Intrinsic::floor:

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -969,6 +969,8 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
969969
static const unsigned ZvfhminZvfbfminPromoteOps[] = {
970970
ISD::FMINNUM,
971971
ISD::FMAXNUM,
972+
ISD::FMINIMUMNUM,
973+
ISD::FMAXIMUMNUM,
972974
ISD::FADD,
973975
ISD::FSUB,
974976
ISD::FMUL,
@@ -1037,7 +1039,9 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
10371039
// Expand various condition codes (explained above).
10381040
setCondCodeAction(VFPCCToExpand, VT, Expand);
10391041

1040-
setOperationAction({ISD::FMINNUM, ISD::FMAXNUM}, VT, Legal);
1042+
setOperationAction(
1043+
{ISD::FMINNUM, ISD::FMAXNUM, ISD::FMAXIMUMNUM, ISD::FMINIMUMNUM}, VT,
1044+
Legal);
10411045
setOperationAction({ISD::FMAXIMUM, ISD::FMINIMUM}, VT, Custom);
10421046

10431047
setOperationAction({ISD::FTRUNC, ISD::FCEIL, ISD::FFLOOR, ISD::FROUND,
@@ -1455,7 +1459,8 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
14551459
setOperationAction({ISD::FADD, ISD::FSUB, ISD::FMUL, ISD::FDIV,
14561460
ISD::FNEG, ISD::FABS, ISD::FCOPYSIGN, ISD::FSQRT,
14571461
ISD::FMA, ISD::FMINNUM, ISD::FMAXNUM,
1458-
ISD::IS_FPCLASS, ISD::FMAXIMUM, ISD::FMINIMUM},
1462+
ISD::FMINIMUMNUM, ISD::FMAXIMUMNUM, ISD::IS_FPCLASS,
1463+
ISD::FMAXIMUM, ISD::FMINIMUM},
14591464
VT, Custom);
14601465

14611466
setOperationAction({ISD::FTRUNC, ISD::FCEIL, ISD::FFLOOR, ISD::FROUND,
@@ -6898,9 +6903,11 @@ static unsigned getRISCVVLOp(SDValue Op) {
68986903
case ISD::VP_FP_TO_UINT:
68996904
return RISCVISD::VFCVT_RTZ_XU_F_VL;
69006905
case ISD::FMINNUM:
6906+
case ISD::FMINIMUMNUM:
69016907
case ISD::VP_FMINNUM:
69026908
return RISCVISD::VFMIN_VL;
69036909
case ISD::FMAXNUM:
6910+
case ISD::FMAXIMUMNUM:
69046911
case ISD::VP_FMAXNUM:
69056912
return RISCVISD::VFMAX_VL;
69066913
case ISD::LRINT:
@@ -7936,6 +7943,8 @@ SDValue RISCVTargetLowering::LowerOperation(SDValue Op,
79367943
case ISD::FMA:
79377944
case ISD::FMINNUM:
79387945
case ISD::FMAXNUM:
7946+
case ISD::FMINIMUMNUM:
7947+
case ISD::FMAXIMUMNUM:
79397948
if (isPromotedOpNeedingSplit(Op, Subtarget))
79407949
return SplitVectorOp(Op, DAG);
79417950
[[fallthrough]];

0 commit comments

Comments
 (0)