Skip to content

Commit c01ddbe

Browse files
authored
RISC-V: Select FCANONICALIZE (#112083)
We can use `FMIN.x OP,OP` to canonlize a float.
1 parent ed77df5 commit c01ddbe

File tree

5 files changed

+1273
-8
lines changed

5 files changed

+1273
-8
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 8 additions & 8 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::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, ISD::FCANONICALIZE};
421421

422422
static const ISD::CondCode FPCCToExpand[] = {
423423
ISD::SETOGT, ISD::SETOGE, ISD::SETONE, ISD::SETUEQ, ISD::SETUGT,
@@ -441,7 +441,7 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
441441
ISD::STRICT_FSQRT, ISD::STRICT_FSETCC, ISD::STRICT_FSETCCS,
442442
ISD::SETCC, ISD::FCEIL, ISD::FFLOOR,
443443
ISD::FTRUNC, ISD::FRINT, ISD::FROUND,
444-
ISD::FROUNDEVEN};
444+
ISD::FROUNDEVEN, ISD::FCANONICALIZE};
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)