diff --git a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp index 57f037f450b59..47d9a95d11b38 100644 --- a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp @@ -915,7 +915,7 @@ bool RISCVDAGToDAGISel::SelectAddrFI(SDValue Addr, SDValue &Base) { return false; } -bool RISCVDAGToDAGISel::SelectRVVBaseAddr(SDValue Addr, SDValue &Base) { +bool RISCVDAGToDAGISel::SelectBaseAddr(SDValue Addr, SDValue &Base) { // If this is FrameIndex, select it directly. Otherwise just let it get // selected to a register independently. if (auto *FIN = dyn_cast(Addr)) diff --git a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.h b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.h index 0bf5ada00f3fc..a790d6051c313 100644 --- a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.h +++ b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.h @@ -44,7 +44,7 @@ class RISCVDAGToDAGISel : public SelectionDAGISel { std::vector &OutOps) override; bool SelectAddrFI(SDValue Addr, SDValue &Base); - bool SelectRVVBaseAddr(SDValue Addr, SDValue &Base); + bool SelectBaseAddr(SDValue Addr, SDValue &Base); bool selectShiftMask(SDValue N, unsigned ShiftWidth, SDValue &ShAmt); bool selectShiftMaskXLen(SDValue N, SDValue &ShAmt) { diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.td b/llvm/lib/Target/RISCV/RISCVInstrInfo.td index 707cd04786814..41661d3c36736 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfo.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.td @@ -298,6 +298,7 @@ def uimm6gt32 : ImmLeaf; +def BaseAddr : ComplexPattern; // Extract least significant 12 bits from an immediate value and sign extend // them. @@ -1110,12 +1111,9 @@ def PseudoZEXT_W : Pseudo<(outs GPR:$rd), (ins GPR:$rs), [], "zext.w", "$rd, $rs /// Loads multiclass LdPat { - def : Pat<(LoadOp GPR:$rs1), (Inst GPR:$rs1, 0)>; - def : Pat<(LoadOp AddrFI:$rs1), (Inst AddrFI:$rs1, 0)>; - def : Pat<(LoadOp (add GPR:$rs1, simm12:$imm12)), - (Inst GPR:$rs1, simm12:$imm12)>; - def : Pat<(LoadOp (add AddrFI:$rs1, simm12:$imm12)), - (Inst AddrFI:$rs1, simm12:$imm12)>; + def : Pat<(LoadOp BaseAddr:$rs1), (Inst BaseAddr:$rs1, 0)>; + def : Pat<(LoadOp (add BaseAddr:$rs1, simm12:$imm12)), + (Inst BaseAddr:$rs1, simm12:$imm12)>; def : Pat<(LoadOp (IsOrAdd AddrFI:$rs1, simm12:$imm12)), (Inst AddrFI:$rs1, simm12:$imm12)>; } @@ -1131,12 +1129,9 @@ defm : LdPat; /// Stores multiclass StPat { - def : Pat<(StoreOp StTy:$rs2, GPR:$rs1), (Inst StTy:$rs2, GPR:$rs1, 0)>; - def : Pat<(StoreOp StTy:$rs2, AddrFI:$rs1), (Inst StTy:$rs2, AddrFI:$rs1, 0)>; - def : Pat<(StoreOp StTy:$rs2, (add GPR:$rs1, simm12:$imm12)), - (Inst StTy:$rs2, GPR:$rs1, simm12:$imm12)>; - def : Pat<(StoreOp StTy:$rs2, (add AddrFI:$rs1, simm12:$imm12)), - (Inst StTy:$rs2, AddrFI:$rs1, simm12:$imm12)>; + def : Pat<(StoreOp StTy:$rs2, BaseAddr:$rs1), (Inst StTy:$rs2, BaseAddr:$rs1, 0)>; + def : Pat<(StoreOp StTy:$rs2, (add BaseAddr:$rs1, simm12:$imm12)), + (Inst StTy:$rs2, BaseAddr:$rs1, simm12:$imm12)>; def : Pat<(StoreOp StTy:$rs2, (IsOrAdd AddrFI:$rs1, simm12:$imm12)), (Inst StTy:$rs2, AddrFI:$rs1, simm12:$imm12)>; } diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoA.td b/llvm/lib/Target/RISCV/RISCVInstrInfoA.td index 7fce37519b93e..24bc59f32726e 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoA.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoA.td @@ -62,12 +62,9 @@ multiclass AMO_rr_aq_rl funct5, bits<3> funct3, string opcodestr> { } multiclass AtomicStPat { - def : Pat<(StoreOp GPR:$rs1, StTy:$rs2), (Inst StTy:$rs2, GPR:$rs1, 0)>; - def : Pat<(StoreOp AddrFI:$rs1, StTy:$rs2), (Inst StTy:$rs2, AddrFI:$rs1, 0)>; - def : Pat<(StoreOp (add GPR:$rs1, simm12:$imm12), StTy:$rs2), - (Inst StTy:$rs2, GPR:$rs1, simm12:$imm12)>; - def : Pat<(StoreOp (add AddrFI:$rs1, simm12:$imm12), StTy:$rs2), - (Inst StTy:$rs2, AddrFI:$rs1, simm12:$imm12)>; + def : Pat<(StoreOp BaseAddr:$rs1, StTy:$rs2), (Inst StTy:$rs2, BaseAddr:$rs1, 0)>; + def : Pat<(StoreOp (add BaseAddr:$rs1, simm12:$imm12), StTy:$rs2), + (Inst StTy:$rs2, BaseAddr:$rs1, simm12:$imm12)>; def : Pat<(StoreOp (IsOrAdd AddrFI:$rs1, simm12:$imm12), StTy:$rs2), (Inst StTy:$rs2, AddrFI:$rs1, simm12:$imm12)>; } diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td index 2976cb5919934..942b4e2e223a8 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td @@ -37,8 +37,6 @@ def SplatPat : ComplexPattern; def SplatPat_uimm5 : ComplexPattern; -def RVVBaseAddr : ComplexPattern; - class SwapHelper { dag Value = !con(Prefix, !if(swap, B, A), !if(swap, A, B), Suffix); } @@ -60,11 +58,11 @@ multiclass VPatUSLoadStoreSDNode("PseudoVLE"#sew#"_V_"#vlmul.MX); defvar store_instr = !cast("PseudoVSE"#sew#"_V_"#vlmul.MX); // Load - def : Pat<(type (load RVVBaseAddr:$rs1)), - (load_instr RVVBaseAddr:$rs1, avl, sew)>; + def : Pat<(type (load BaseAddr:$rs1)), + (load_instr BaseAddr:$rs1, avl, sew)>; // Store - def : Pat<(store type:$rs2, RVVBaseAddr:$rs1), - (store_instr reg_class:$rs2, RVVBaseAddr:$rs1, avl, sew)>; + def : Pat<(store type:$rs2, BaseAddr:$rs1), + (store_instr reg_class:$rs2, BaseAddr:$rs1, avl, sew)>; } multiclass VPatUSLoadStoreWholeVRSDNode; + def : Pat<(type (load BaseAddr:$rs1)), + (load_instr BaseAddr:$rs1)>; // Store - def : Pat<(store type:$rs2, RVVBaseAddr:$rs1), - (store_instr reg_class:$rs2, RVVBaseAddr:$rs1)>; + def : Pat<(store type:$rs2, BaseAddr:$rs1), + (store_instr reg_class:$rs2, BaseAddr:$rs1)>; } multiclass VPatUSLoadStoreMaskSDNode @@ -96,11 +94,11 @@ multiclass VPatUSLoadStoreMaskSDNode defvar load_instr = !cast("PseudoVLE1_V_"#m.BX); defvar store_instr = !cast("PseudoVSE1_V_"#m.BX); // Load - def : Pat<(m.Mask (load RVVBaseAddr:$rs1)), - (load_instr RVVBaseAddr:$rs1, m.AVL, m.SEW)>; + def : Pat<(m.Mask (load BaseAddr:$rs1)), + (load_instr BaseAddr:$rs1, m.AVL, m.SEW)>; // Store - def : Pat<(store m.Mask:$rs2, RVVBaseAddr:$rs1), - (store_instr VR:$rs2, RVVBaseAddr:$rs1, m.AVL, m.SEW)>; + def : Pat<(store m.Mask:$rs2, BaseAddr:$rs1), + (store_instr VR:$rs2, BaseAddr:$rs1, m.AVL, m.SEW)>; } class VPatBinarySDNode_VV("PseudoVLE"#vti.SEW#"_V_"#vti.LMul.MX); defvar store_instr = !cast("PseudoVSE"#vti.SEW#"_V_"#vti.LMul.MX); // Load - def : Pat<(vti.Vector (riscv_vle_vl RVVBaseAddr:$rs1, (XLenVT (VLOp GPR:$vl)))), - (load_instr RVVBaseAddr:$rs1, GPR:$vl, vti.SEW)>; + def : Pat<(vti.Vector (riscv_vle_vl BaseAddr:$rs1, (XLenVT (VLOp GPR:$vl)))), + (load_instr BaseAddr:$rs1, GPR:$vl, vti.SEW)>; // Store - def : Pat<(riscv_vse_vl (vti.Vector vti.RegClass:$rs2), RVVBaseAddr:$rs1, + def : Pat<(riscv_vse_vl (vti.Vector vti.RegClass:$rs2), BaseAddr:$rs1, (XLenVT (VLOp GPR:$vl))), - (store_instr vti.RegClass:$rs2, RVVBaseAddr:$rs1, GPR:$vl, vti.SEW)>; + (store_instr vti.RegClass:$rs2, BaseAddr:$rs1, GPR:$vl, vti.SEW)>; } foreach mti = AllMasks in { defvar load_instr = !cast("PseudoVLE1_V_"#mti.BX); defvar store_instr = !cast("PseudoVSE1_V_"#mti.BX); - def : Pat<(mti.Mask (riscv_vle_vl RVVBaseAddr:$rs1, (XLenVT (VLOp GPR:$vl)))), - (load_instr RVVBaseAddr:$rs1, GPR:$vl, mti.SEW)>; - def : Pat<(riscv_vse_vl (mti.Mask VR:$rs2), RVVBaseAddr:$rs1, + def : Pat<(mti.Mask (riscv_vle_vl BaseAddr:$rs1, (XLenVT (VLOp GPR:$vl)))), + (load_instr BaseAddr:$rs1, GPR:$vl, mti.SEW)>; + def : Pat<(riscv_vse_vl (mti.Mask VR:$rs2), BaseAddr:$rs1, (XLenVT (VLOp GPR:$vl))), - (store_instr VR:$rs2, RVVBaseAddr:$rs1, GPR:$vl, mti.SEW)>; + (store_instr VR:$rs2, BaseAddr:$rs1, GPR:$vl, mti.SEW)>; } // 12.1. Vector Single-Width Integer Add and Subtract