Skip to content

Commit b2c98d9

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 e25187b commit b2c98d9

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,
@@ -1452,7 +1456,8 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
14521456
setOperationAction({ISD::FADD, ISD::FSUB, ISD::FMUL, ISD::FDIV,
14531457
ISD::FNEG, ISD::FABS, ISD::FCOPYSIGN, ISD::FSQRT,
14541458
ISD::FMA, ISD::FMINNUM, ISD::FMAXNUM,
1455-
ISD::IS_FPCLASS, ISD::FMAXIMUM, ISD::FMINIMUM},
1459+
ISD::FMINIMUMNUM, ISD::FMAXIMUMNUM, ISD::IS_FPCLASS,
1460+
ISD::FMAXIMUM, ISD::FMINIMUM},
14561461
VT, Custom);
14571462

14581463
setOperationAction({ISD::FTRUNC, ISD::FCEIL, ISD::FFLOOR, ISD::FROUND,
@@ -6811,9 +6816,11 @@ static unsigned getRISCVVLOp(SDValue Op) {
68116816
case ISD::VP_FP_TO_UINT:
68126817
return RISCVISD::VFCVT_RTZ_XU_F_VL;
68136818
case ISD::FMINNUM:
6819+
case ISD::FMINIMUMNUM:
68146820
case ISD::VP_FMINNUM:
68156821
return RISCVISD::VFMIN_VL;
68166822
case ISD::FMAXNUM:
6823+
case ISD::FMAXIMUMNUM:
68176824
case ISD::VP_FMAXNUM:
68186825
return RISCVISD::VFMAX_VL;
68196826
case ISD::LRINT:
@@ -7844,6 +7851,8 @@ SDValue RISCVTargetLowering::LowerOperation(SDValue Op,
78447851
case ISD::FMA:
78457852
case ISD::FMINNUM:
78467853
case ISD::FMAXNUM:
7854+
case ISD::FMINIMUMNUM:
7855+
case ISD::FMAXIMUMNUM:
78477856
if (isPromotedOpNeedingSplit(Op, Subtarget))
78487857
return SplitVectorOp(Op, DAG);
78497858
[[fallthrough]];

0 commit comments

Comments
 (0)