From 893428767cbef85b0c729d3f0d36ab717c950bcf Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Sat, 25 Feb 2023 09:57:57 -0800 Subject: [PATCH] [RISCV] Add explicit types to some XTHead isel patterns to reduce RISCVGenDAGISel.inc size. HWMode expansion of GPR can create patterns with i32 types with Subtarget->is64Bit() or i64 types with !Subtarget->is64Bit(). These patterns will never match. They just waste space in the table. By adding explicit i32 or i64 to patterns that only apply to RV32 or RV64 we can filter these patterns. --- llvm/lib/Target/RISCV/RISCVInstrInfoXTHead.td | 46 +++++++++++++-------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoXTHead.td b/llvm/lib/Target/RISCV/RISCVInstrInfoXTHead.td index 24b0ce8..2153944 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoXTHead.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoXTHead.td @@ -676,9 +676,9 @@ def : Pat<(binop_allwusers GPR:$rd, (mul } // Predicates = [HasVendorXTHeadMac, IsRV64] let Predicates = [HasVendorXTHeadMac, IsRV32] in { -def : Pat<(add GPR:$rd, (mul (sexti16 GPR:$rs1), (sexti16 GPR:$rs2))), - (TH_MULAH GPR:$rd, GPR:$rs1, GPR:$rs2)>; -def : Pat<(sub GPR:$rd, (mul (sexti16 GPR:$rs1), (sexti16 GPR:$rs2))), +def : Pat<(i32 (add GPR:$rd, (mul (sexti16 GPR:$rs1), (sexti16 GPR:$rs2)))), + (TH_MULAH GPR:$rd, GPR:$rs1, GPR:$rs2)>; +def : Pat<(i32 (sub GPR:$rd, (mul (sexti16 GPR:$rs1), (sexti16 GPR:$rs2)))), (TH_MULSH GPR:$rd, GPR:$rs1, GPR:$rs2)>; } // Predicates = [HasVendorXTHeadMac, IsRV32] @@ -761,7 +761,7 @@ def TH_SYNC_IS : THCacheInst_void<0b11011, "th.sync.is">; def AddrRegRegScale : ComplexPattern">; def AddrRegZextRegScale - : ComplexPattern", + : ComplexPattern", [], [], 10>; multiclass LdIdxPat { @@ -769,8 +769,8 @@ def : Pat<(vt (LoadOp (AddrRegRegScale GPR:$rs1, GPR:$rs2, uimm2:$uimm2))), (Inst GPR:$rs1, GPR:$rs2, uimm2:$uimm2)>; } -multiclass LdZextIdxPat { -def : Pat<(vt (LoadOp (AddrRegZextRegScale GPR:$rs1, GPR:$rs2, uimm2:$uimm2))), +multiclass LdZextIdxPat { +def : Pat<(vt (LoadOp (AddrRegZextRegScale (i64 GPR:$rs1), GPR:$rs2, uimm2:$uimm2))), (Inst GPR:$rs1, GPR:$rs2, uimm2:$uimm2)>; } @@ -782,9 +782,9 @@ def : Pat<(StoreOp (vt StTy:$rd), } multiclass StZextIdxPat { + ValueType vt = i64> { def : Pat<(StoreOp (vt StTy:$rd), - (AddrRegZextRegScale GPR:$rs1, GPR:$rs2, uimm2:$uimm2)), + (AddrRegZextRegScale (i64 GPR:$rs1), GPR:$rs2, uimm2:$uimm2)), (Inst StTy:$rd, GPR:$rs1, GPR:$rs2, uimm2:$uimm2)>; } @@ -802,8 +802,8 @@ defm : StIdxPat; } let Predicates = [HasVendorXTHeadMemIdx, IsRV32] in { -defm : LdIdxPat; -defm : StIdxPat; +defm : LdIdxPat; +defm : StIdxPat; } let Predicates = [HasVendorXTHeadMemIdx, IsRV64] in { @@ -815,22 +815,22 @@ defm : LdZextIdxPat; defm : LdZextIdxPat; defm : LdZextIdxPat; -defm : LdIdxPat; -defm : LdIdxPat; -defm : LdIdxPat; +defm : LdIdxPat; +defm : LdIdxPat; +defm : LdIdxPat; defm : LdZextIdxPat; defm : LdZextIdxPat; defm : LdZextIdxPat; -defm : LdIdxPat; +defm : LdIdxPat; defm : LdZextIdxPat; defm : StZextIdxPat; defm : StZextIdxPat; -defm : StIdxPat; -defm : StZextIdxPat; -defm : StIdxPat; +defm : StIdxPat; +defm : StZextIdxPat; +defm : StIdxPat; defm : StZextIdxPat; } @@ -869,13 +869,13 @@ defm : StoreUpdatePat; } let Predicates = [HasVendorXTHeadMemIdx, IsRV32] in { -defm : StoreUpdatePat; -defm : StoreUpdatePat; +defm : StoreUpdatePat; +defm : StoreUpdatePat; } let Predicates = [HasVendorXTHeadMemIdx, IsRV64] in { -defm : StoreUpdatePat; -defm : StoreUpdatePat; -defm : StoreUpdatePat; -defm : StoreUpdatePat; +defm : StoreUpdatePat; +defm : StoreUpdatePat; +defm : StoreUpdatePat; +defm : StoreUpdatePat; } -- 2.7.4