Skip to content

Commit c7c529f

Browse files
committed
RISC-V: Select FCANONICALIZE
We can use `FMIN.x OP,OP` to canonlize a float.
1 parent aa44f59 commit c7c529f

File tree

5 files changed

+1359
-16
lines changed

5 files changed

+1359
-16
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -411,13 +411,13 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
411411
setOperationAction(ISD::SELECT, XLenVT, Custom);
412412

413413
static const unsigned FPLegalNodeTypes[] = {
414-
ISD::FMINNUM, ISD::FMAXNUM, ISD::FMINIMUMNUM,
415-
ISD::FMAXIMUMNUM, ISD::LRINT, ISD::LLRINT,
416-
ISD::LROUND, ISD::LLROUND, ISD::STRICT_LRINT,
417-
ISD::STRICT_LLRINT, ISD::STRICT_LROUND, ISD::STRICT_LLROUND,
418-
ISD::STRICT_FMA, ISD::STRICT_FADD, ISD::STRICT_FSUB,
419-
ISD::STRICT_FMUL, ISD::STRICT_FDIV, ISD::STRICT_FSQRT,
420-
ISD::STRICT_FSETCC, ISD::STRICT_FSETCCS};
414+
ISD::FMINNUM, ISD::FMAXNUM, ISD::FMINIMUMNUM,
415+
ISD::FMAXIMUMNUM, ISD::FCANONICALIZE, ISD::LRINT,
416+
ISD::LLRINT, ISD::LROUND, ISD::LLROUND,
417+
ISD::STRICT_LRINT, ISD::STRICT_LLRINT, ISD::STRICT_LROUND,
418+
ISD::STRICT_LLROUND, ISD::STRICT_FMA, ISD::STRICT_FADD,
419+
ISD::STRICT_FSUB, ISD::STRICT_FMUL, ISD::STRICT_FDIV,
420+
ISD::STRICT_FSQRT, ISD::STRICT_FSETCC, ISD::STRICT_FSETCCS};
421421

422422
static const ISD::CondCode FPCCToExpand[] = {
423423
ISD::SETOGT, ISD::SETOGE, ISD::SETONE, ISD::SETUEQ, ISD::SETUGT,
@@ -433,15 +433,15 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
433433
ISD::FROUNDEVEN};
434434

435435
static const unsigned ZfhminZfbfminPromoteOps[] = {
436-
ISD::FMINNUM, ISD::FMAXNUM, ISD::FMAXIMUMNUM,
437-
ISD::FMINIMUMNUM, ISD::FADD, ISD::FSUB,
438-
ISD::FMUL, ISD::FMA, ISD::FDIV,
439-
ISD::FSQRT, ISD::STRICT_FMA, ISD::STRICT_FADD,
440-
ISD::STRICT_FSUB, ISD::STRICT_FMUL, ISD::STRICT_FDIV,
441-
ISD::STRICT_FSQRT, ISD::STRICT_FSETCC, ISD::STRICT_FSETCCS,
442-
ISD::SETCC, ISD::FCEIL, ISD::FFLOOR,
443-
ISD::FTRUNC, ISD::FRINT, ISD::FROUND,
444-
ISD::FROUNDEVEN};
436+
ISD::FMINNUM, ISD::FMAXNUM, ISD::FMAXIMUMNUM,
437+
ISD::FMINIMUMNUM, ISD::FCANONICALIZE, ISD::FADD,
438+
ISD::FSUB, ISD::FMUL, ISD::FMA,
439+
ISD::FDIV, ISD::FSQRT, ISD::STRICT_FMA,
440+
ISD::STRICT_FADD, ISD::STRICT_FSUB, ISD::STRICT_FMUL,
441+
ISD::STRICT_FDIV, ISD::STRICT_FSQRT, ISD::STRICT_FSETCC,
442+
ISD::STRICT_FSETCCS, ISD::SETCC, ISD::FCEIL,
443+
ISD::FFLOOR, ISD::FTRUNC, ISD::FRINT,
444+
ISD::FROUND, ISD::FROUNDEVEN};
445445

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

llvm/lib/Target/RISCV/RISCVInstrInfoD.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,7 @@ foreach Ext = DExts in {
398398
defm : PatFprFpr_m<fmaximumnum, FMAX_D, Ext>;
399399
defm : PatFprFpr_m<riscv_fmin, FMIN_D, Ext>;
400400
defm : PatFprFpr_m<riscv_fmax, FMAX_D, Ext>;
401+
def : Pat<(f64 (fcanonicalize FPR64:$rs1)), (FMIN_D $rs1, $rs1)>;
401402
}
402403

403404
/// Setcc

llvm/lib/Target/RISCV/RISCVInstrInfoF.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,7 @@ foreach Ext = FExts in {
623623
defm : PatFprFpr_m<fmaximumnum, FMAX_S, Ext>;
624624
defm : PatFprFpr_m<riscv_fmin, FMIN_S, Ext>;
625625
defm : PatFprFpr_m<riscv_fmax, FMAX_S, Ext>;
626+
def : Pat<(f32 (fcanonicalize FPR32:$rs1)), (FMIN_S $rs1, $rs1)>;
626627
}
627628

628629
/// Setcc

llvm/lib/Target/RISCV/RISCVInstrInfoZfh.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,7 @@ foreach Ext = ZfhExts in {
369369
defm : PatFprFpr_m<fmaximumnum, FMAX_H, Ext>;
370370
defm : PatFprFpr_m<riscv_fmin, FMIN_H, Ext>;
371371
defm : PatFprFpr_m<riscv_fmax, FMAX_H, Ext>;
372+
def : Pat<(f16 (fcanonicalize FPR16:$rs1)), (FMIN_H $rs1, $rs1)>;
372373
}
373374

374375
/// Setcc

0 commit comments

Comments
 (0)