Skip to content

Commit 7645df6

Browse files
author
Shao-Ce SUN
authored
[RISCV] Simplify PatSetCC_m and PatFprFprDynFrm_m (#68562)
1. Use `Ext.PrimaryVT` in `PatSetCC_m ` 2. Merge `PatFprFprDynFrm` from Zfh/Zhinx two locations into `PatFprFprDynFrm_m`.
1 parent feea5db commit 7645df6

File tree

3 files changed

+35
-38
lines changed

3 files changed

+35
-38
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoD.td

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -397,12 +397,12 @@ foreach Ext = DExts in {
397397

398398
// Match non-signaling FEQ_D
399399
foreach Ext = DExts in {
400-
defm : PatSetCC_m<any_fsetcc, SETEQ, FEQ_D, Ext, f64>;
401-
defm : PatSetCC_m<any_fsetcc, SETOEQ, FEQ_D, Ext, f64>;
402-
defm : PatSetCC_m<strict_fsetcc, SETLT, PseudoQuietFLT_D, Ext, f64>;
403-
defm : PatSetCC_m<strict_fsetcc, SETOLT, PseudoQuietFLT_D, Ext, f64>;
404-
defm : PatSetCC_m<strict_fsetcc, SETLE, PseudoQuietFLE_D, Ext, f64>;
405-
defm : PatSetCC_m<strict_fsetcc, SETOLE, PseudoQuietFLE_D, Ext, f64>;
400+
defm : PatSetCC_m<any_fsetcc, SETEQ, FEQ_D, Ext>;
401+
defm : PatSetCC_m<any_fsetcc, SETOEQ, FEQ_D, Ext>;
402+
defm : PatSetCC_m<strict_fsetcc, SETLT, PseudoQuietFLT_D, Ext>;
403+
defm : PatSetCC_m<strict_fsetcc, SETOLT, PseudoQuietFLT_D, Ext>;
404+
defm : PatSetCC_m<strict_fsetcc, SETLE, PseudoQuietFLE_D, Ext>;
405+
defm : PatSetCC_m<strict_fsetcc, SETOLE, PseudoQuietFLE_D, Ext>;
406406
}
407407

408408
let Predicates = [HasStdExtD] in {

llvm/lib/Target/RISCV/RISCVInstrInfoF.td

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -481,10 +481,10 @@ class PatSetCC<DAGOperand Ty, SDPatternOperator OpNode, CondCode Cond,
481481
RVInst Inst, ValueType vt>
482482
: Pat<(XLenVT (OpNode (vt Ty:$rs1), Ty:$rs2, Cond)), (Inst $rs1, $rs2)>;
483483
multiclass PatSetCC_m<SDPatternOperator OpNode, CondCode Cond,
484-
RVInst Inst, ExtInfo Ext, ValueType vt> {
484+
RVInst Inst, ExtInfo Ext> {
485485
let Predicates = Ext.Predicates in
486486
def Ext.Suffix : PatSetCC<Ext.PrimaryTy, OpNode, Cond,
487-
!cast<RVInst>(Inst#Ext.Suffix), vt>;
487+
!cast<RVInst>(Inst#Ext.Suffix), Ext.PrimaryVT>;
488488
}
489489

490490
class PatFprFpr<SDPatternOperator OpNode, RVInstR Inst,
@@ -606,12 +606,12 @@ foreach Ext = FExts in {
606606

607607
// Match non-signaling FEQ_S
608608
foreach Ext = FExts in {
609-
defm : PatSetCC_m<any_fsetcc, SETEQ, FEQ_S, Ext, f32>;
610-
defm : PatSetCC_m<any_fsetcc, SETOEQ, FEQ_S, Ext, f32>;
611-
defm : PatSetCC_m<strict_fsetcc, SETLT, PseudoQuietFLT_S, Ext, f32>;
612-
defm : PatSetCC_m<strict_fsetcc, SETOLT, PseudoQuietFLT_S, Ext, f32>;
613-
defm : PatSetCC_m<strict_fsetcc, SETLE, PseudoQuietFLE_S, Ext, f32>;
614-
defm : PatSetCC_m<strict_fsetcc, SETOLE, PseudoQuietFLE_S, Ext, f32>;
609+
defm : PatSetCC_m<any_fsetcc, SETEQ, FEQ_S, Ext>;
610+
defm : PatSetCC_m<any_fsetcc, SETOEQ, FEQ_S, Ext>;
611+
defm : PatSetCC_m<strict_fsetcc, SETLT, PseudoQuietFLT_S, Ext>;
612+
defm : PatSetCC_m<strict_fsetcc, SETOLT, PseudoQuietFLT_S, Ext>;
613+
defm : PatSetCC_m<strict_fsetcc, SETLE, PseudoQuietFLE_S, Ext>;
614+
defm : PatSetCC_m<strict_fsetcc, SETOLE, PseudoQuietFLE_S, Ext>;
615615
}
616616

617617
let Predicates = [HasStdExtF] in {
@@ -645,10 +645,10 @@ def : Pat<(XLenVT (strict_fsetccs FPR32INX:$rs1, FPR32INX:$rs1, SETOEQ)),
645645
} // Predicates = [HasStdExtZfinx]
646646

647647
foreach Ext = FExts in {
648-
defm : PatSetCC_m<any_fsetccs, SETLT, FLT_S, Ext, f32>;
649-
defm : PatSetCC_m<any_fsetccs, SETOLT, FLT_S, Ext, f32>;
650-
defm : PatSetCC_m<any_fsetccs, SETLE, FLE_S, Ext, f32>;
651-
defm : PatSetCC_m<any_fsetccs, SETOLE, FLE_S, Ext, f32>;
648+
defm : PatSetCC_m<any_fsetccs, SETLT, FLT_S, Ext>;
649+
defm : PatSetCC_m<any_fsetccs, SETOLT, FLT_S, Ext>;
650+
defm : PatSetCC_m<any_fsetccs, SETLE, FLE_S, Ext>;
651+
defm : PatSetCC_m<any_fsetccs, SETOLE, FLE_S, Ext>;
652652
}
653653

654654
let Predicates = [HasStdExtF] in {

llvm/lib/Target/RISCV/RISCVInstrInfoZfh.td

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,6 @@ def PseudoQuietFLT_H_INX : PseudoQuietFCMP<FPR16INX>;
248248
// Pseudo-instructions and codegen patterns
249249
//===----------------------------------------------------------------------===//
250250

251-
let Predicates = [HasStdExtZfh] in {
252251

253252
/// Float conversion operations
254253

@@ -257,11 +256,14 @@ let Predicates = [HasStdExtZfh] in {
257256

258257
/// Float arithmetic operations
259258

260-
def : PatFprFprDynFrm<any_fadd, FADD_H, FPR16, f16>;
261-
def : PatFprFprDynFrm<any_fsub, FSUB_H, FPR16, f16>;
262-
def : PatFprFprDynFrm<any_fmul, FMUL_H, FPR16, f16>;
263-
def : PatFprFprDynFrm<any_fdiv, FDIV_H, FPR16, f16>;
259+
foreach Ext = ZfhExts in {
260+
defm : PatFprFprDynFrm_m<any_fadd, FADD_H, Ext>;
261+
defm : PatFprFprDynFrm_m<any_fsub, FSUB_H, Ext>;
262+
defm : PatFprFprDynFrm_m<any_fmul, FMUL_H, Ext>;
263+
defm : PatFprFprDynFrm_m<any_fdiv, FDIV_H, Ext>;
264+
}
264265

266+
let Predicates = [HasStdExtZfh] in {
265267
def : Pat<(f16 (any_fsqrt FPR16:$rs1)), (FSQRT_H FPR16:$rs1, FRM_DYN)>;
266268

267269
def : Pat<(f16 (fneg FPR16:$rs1)), (FSGNJN_H $rs1, $rs1)>;
@@ -304,11 +306,6 @@ let Predicates = [HasStdExtZhinx] in {
304306

305307
/// Float arithmetic operations
306308

307-
def : PatFprFprDynFrm<any_fadd, FADD_H_INX, FPR16INX, f16>;
308-
def : PatFprFprDynFrm<any_fsub, FSUB_H_INX, FPR16INX, f16>;
309-
def : PatFprFprDynFrm<any_fmul, FMUL_H_INX, FPR16INX, f16>;
310-
def : PatFprFprDynFrm<any_fdiv, FDIV_H_INX, FPR16INX, f16>;
311-
312309
def : Pat<(any_fsqrt FPR16INX:$rs1), (FSQRT_H_INX FPR16INX:$rs1, FRM_DYN)>;
313310

314311
def : Pat<(fneg FPR16INX:$rs1), (FSGNJN_H_INX $rs1, $rs1)>;
@@ -358,12 +355,12 @@ foreach Ext = ZfhExts in {
358355

359356
// Match non-signaling FEQ_D
360357
foreach Ext = ZfhExts in {
361-
defm : PatSetCC_m<any_fsetcc, SETEQ, FEQ_H, Ext, f16>;
362-
defm : PatSetCC_m<any_fsetcc, SETOEQ, FEQ_H, Ext, f16>;
363-
defm : PatSetCC_m<strict_fsetcc, SETLT, PseudoQuietFLT_H, Ext, f16>;
364-
defm : PatSetCC_m<strict_fsetcc, SETOLT, PseudoQuietFLT_H, Ext, f16>;
365-
defm : PatSetCC_m<strict_fsetcc, SETLE, PseudoQuietFLE_H, Ext, f16>;
366-
defm : PatSetCC_m<strict_fsetcc, SETOLE, PseudoQuietFLE_H, Ext, f16>;
358+
defm : PatSetCC_m<any_fsetcc, SETEQ, FEQ_H, Ext>;
359+
defm : PatSetCC_m<any_fsetcc, SETOEQ, FEQ_H, Ext>;
360+
defm : PatSetCC_m<strict_fsetcc, SETLT, PseudoQuietFLT_H, Ext>;
361+
defm : PatSetCC_m<strict_fsetcc, SETOLT, PseudoQuietFLT_H, Ext>;
362+
defm : PatSetCC_m<strict_fsetcc, SETLE, PseudoQuietFLE_H, Ext>;
363+
defm : PatSetCC_m<strict_fsetcc, SETOLE, PseudoQuietFLE_H, Ext>;
367364
}
368365

369366
let Predicates = [HasStdExtZfh] in {
@@ -397,10 +394,10 @@ def : Pat<(XLenVT (strict_fsetccs FPR16INX:$rs1, FPR16INX:$rs1, SETOEQ)),
397394
} // Predicates = [HasStdExtZhinx]
398395

399396
foreach Ext = ZfhExts in {
400-
defm : PatSetCC_m<any_fsetccs, SETLT, FLT_H, Ext, f16>;
401-
defm : PatSetCC_m<any_fsetccs, SETOLT, FLT_H, Ext, f16>;
402-
defm : PatSetCC_m<any_fsetccs, SETLE, FLE_H, Ext, f16>;
403-
defm : PatSetCC_m<any_fsetccs, SETOLE, FLE_H, Ext, f16>;
397+
defm : PatSetCC_m<any_fsetccs, SETLT, FLT_H, Ext>;
398+
defm : PatSetCC_m<any_fsetccs, SETOLT, FLT_H, Ext>;
399+
defm : PatSetCC_m<any_fsetccs, SETLE, FLE_H, Ext>;
400+
defm : PatSetCC_m<any_fsetccs, SETOLE, FLE_H, Ext>;
404401
}
405402

406403
let Predicates = [HasStdExtZfh] in {

0 commit comments

Comments
 (0)