Skip to content

Commit c5d6e33

Browse files
committed
RISC-V: Add fminimumnum and fmaximumnum support
Since 2.2, `fmin.s/fmax.s` instructions follow the IEEE754-2019, if F extension is avaiable; and `fmin.d/fmax.d` also follow the IEEE754-2019 if D extension is avaiable. So, let's mark them as Legal. Remove unwanted entry in the scope of vector Fix Zfh support Remove setCombine of fmaximumnum/fminimumnum
1 parent fb9e685 commit c5d6e33

File tree

5 files changed

+761
-15
lines changed

5 files changed

+761
-15
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -365,12 +365,13 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
365365
setOperationAction(ISD::SELECT, XLenVT, Custom);
366366

367367
static const unsigned FPLegalNodeTypes[] = {
368-
ISD::FMINNUM, ISD::FMAXNUM, ISD::LRINT,
369-
ISD::LLRINT, ISD::LROUND, ISD::LLROUND,
370-
ISD::STRICT_LRINT, ISD::STRICT_LLRINT, ISD::STRICT_LROUND,
371-
ISD::STRICT_LLROUND, ISD::STRICT_FMA, ISD::STRICT_FADD,
372-
ISD::STRICT_FSUB, ISD::STRICT_FMUL, ISD::STRICT_FDIV,
373-
ISD::STRICT_FSQRT, ISD::STRICT_FSETCC, ISD::STRICT_FSETCCS};
368+
ISD::FMINNUM, ISD::FMAXNUM, ISD::FMINIMUMNUM,
369+
ISD::FMAXIMUMNUM, ISD::LRINT, ISD::LLRINT,
370+
ISD::LROUND, ISD::LLROUND, ISD::STRICT_LRINT,
371+
ISD::STRICT_LLRINT, ISD::STRICT_LROUND, ISD::STRICT_LLROUND,
372+
ISD::STRICT_FMA, ISD::STRICT_FADD, ISD::STRICT_FSUB,
373+
ISD::STRICT_FMUL, ISD::STRICT_FDIV, ISD::STRICT_FSQRT,
374+
ISD::STRICT_FSETCC, ISD::STRICT_FSETCCS};
374375

375376
static const ISD::CondCode FPCCToExpand[] = {
376377
ISD::SETOGT, ISD::SETOGE, ISD::SETONE, ISD::SETUEQ, ISD::SETUGT,
@@ -389,15 +390,20 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
389390
setOperationAction(ISD::BITCAST, MVT::i16, Custom);
390391

391392
static const unsigned ZfhminZfbfminPromoteOps[] = {
392-
ISD::FMINNUM, ISD::FMAXNUM, ISD::FADD,
393-
ISD::FSUB, ISD::FMUL, ISD::FMA,
394-
ISD::FDIV, ISD::FSQRT, ISD::FABS,
395-
ISD::FNEG, ISD::STRICT_FMA, ISD::STRICT_FADD,
396-
ISD::STRICT_FSUB, ISD::STRICT_FMUL, ISD::STRICT_FDIV,
397-
ISD::STRICT_FSQRT, ISD::STRICT_FSETCC, ISD::STRICT_FSETCCS,
398-
ISD::SETCC, ISD::FCEIL, ISD::FFLOOR,
399-
ISD::FTRUNC, ISD::FRINT, ISD::FROUND,
400-
ISD::FROUNDEVEN, ISD::SELECT};
393+
ISD::FMINNUM, ISD::FMAXNUM,
394+
ISD::FMAXIMUMNUM, ISD::FMINIMUMNUM,
395+
ISD::FADD, ISD::FSUB,
396+
ISD::FMUL, ISD::FMA,
397+
ISD::FDIV, ISD::FSQRT,
398+
ISD::FABS, ISD::FNEG,
399+
ISD::STRICT_FMA, ISD::STRICT_FADD,
400+
ISD::STRICT_FSUB, ISD::STRICT_FMUL,
401+
ISD::STRICT_FDIV, ISD::STRICT_FSQRT,
402+
ISD::STRICT_FSETCC, ISD::STRICT_FSETCCS,
403+
ISD::SETCC, ISD::FCEIL,
404+
ISD::FFLOOR, ISD::FTRUNC,
405+
ISD::FRINT, ISD::FROUND,
406+
ISD::FROUNDEVEN, ISD::SELECT};
401407

402408
if (Subtarget.hasStdExtZfbfmin()) {
403409
setOperationAction(ISD::BITCAST, MVT::i16, Custom);

llvm/lib/Target/RISCV/RISCVInstrInfoD.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,8 @@ def : Pat<(fneg (any_fma_nsz FPR64IN32X:$rs1, FPR64IN32X:$rs2, FPR64IN32X:$rs3))
392392
foreach Ext = DExts in {
393393
defm : PatFprFpr_m<fminnum, FMIN_D, Ext>;
394394
defm : PatFprFpr_m<fmaxnum, FMAX_D, Ext>;
395+
defm : PatFprFpr_m<fminimumnum, FMIN_D, Ext>;
396+
defm : PatFprFpr_m<fmaximumnum, FMAX_D, Ext>;
395397
defm : PatFprFpr_m<riscv_fmin, FMIN_D, Ext>;
396398
defm : PatFprFpr_m<riscv_fmax, FMAX_D, Ext>;
397399
}

llvm/lib/Target/RISCV/RISCVInstrInfoF.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,8 @@ def : Pat<(fneg (any_fma_nsz FPR32INX:$rs1, FPR32INX:$rs2, FPR32INX:$rs3)),
603603
foreach Ext = FExts in {
604604
defm : PatFprFpr_m<fminnum, FMIN_S, Ext>;
605605
defm : PatFprFpr_m<fmaxnum, FMAX_S, Ext>;
606+
defm : PatFprFpr_m<fminimumnum, FMIN_S, Ext>;
607+
defm : PatFprFpr_m<fmaximumnum, FMAX_S, Ext>;
606608
defm : PatFprFpr_m<riscv_fmin, FMIN_S, Ext>;
607609
defm : PatFprFpr_m<riscv_fmax, FMAX_S, Ext>;
608610
}

llvm/lib/Target/RISCV/RISCVInstrInfoZfh.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,8 @@ def : Pat<(fneg (any_fma_nsz FPR16INX:$rs1, FPR16INX:$rs2, FPR16INX:$rs3)),
347347
foreach Ext = ZfhExts in {
348348
defm : PatFprFpr_m<fminnum, FMIN_H, Ext>;
349349
defm : PatFprFpr_m<fmaxnum, FMAX_H, Ext>;
350+
defm : PatFprFpr_m<fminimumnum, FMIN_H, Ext>;
351+
defm : PatFprFpr_m<fmaximumnum, FMAX_H, Ext>;
350352
defm : PatFprFpr_m<riscv_fmin, FMIN_H, Ext>;
351353
defm : PatFprFpr_m<riscv_fmax, FMAX_H, Ext>;
352354
}

0 commit comments

Comments
 (0)