diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td --- a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td @@ -101,12 +101,9 @@ class VMVRSched: Sched <[!cast("WriteVMov" # n # "V"), !cast("ReadVMov" # n # "V")]>; -class VLESched : Sched <[!cast("WriteVLDE" # n), - ReadVLDX, ReadVMask]>; +class VLESched : Sched <[WriteVLDE, ReadVLDX, ReadVMask]>; -class VSESched : Sched <[!cast("WriteVSTE" # n), - !cast("ReadVSTE" # n # "V"), - ReadVSTX, ReadVMask]>; +class VSESched : Sched <[WriteVSTE, ReadVSTEV, ReadVSTX, ReadVMask]>; class VLSSched : Sched <[!cast("WriteVLDS" # n), ReadVLDX, ReadVLDSX, ReadVMask]>; @@ -124,15 +121,14 @@ !cast("ReadVST" # o # "X" # n), ReadVSTX, !cast("ReadVST" # o # "XV"), ReadVMask]>; -class VLFSched : Sched <[!cast("WriteVLDFF" # n), - ReadVLDX, ReadVMask]>; +class VLFSched : Sched <[WriteVLDFF, ReadVLDX, ReadVMask]>; // Unit-Stride Segment Loads and Stores class VLSEGSched : Sched<[ !cast("WriteVLSEG" #nf #"e" #eew), ReadVLDX, ReadVMask]>; class VSSEGSched : Sched<[ - !cast("WriteVSSEG" #nf #"e" #eew), - !cast("ReadVSTE" #eew #"V"), ReadVSTX, ReadVMask]>; + !cast("WriteVSSEG" #nf #"e" #eew), ReadVSTEV, ReadVSTX, + ReadVMask]>; class VLSEGFFSched : Sched<[ !cast("WriteVLSEGFF" #nf #"e" #eew), ReadVLDX, ReadVMask]>; // Strided Segment Loads and Stores @@ -821,7 +817,7 @@ multiclass VWholeLoadN nf, string opcodestr, RegisterClass VRC> { foreach l = [8, 16, 32] in { defvar w = !cast("LSWidth" # l); - defvar s = !cast("WriteVLD" # !add(nf, 1) # "R" # l); + defvar s = !cast("WriteVLD" # !add(nf, 1) # "R"); def E # l # _V : VWholeLoad, Sched<[s, ReadVLDX]>; @@ -853,11 +849,11 @@ defvar w = !cast("LSWidth" # eew); // Vector Unit-Stride Instructions - def VLE#eew#_V : VUnitStrideLoad, VLESched; - def VSE#eew#_V : VUnitStrideStore, VSESched; + def VLE#eew#_V : VUnitStrideLoad, VLESched; + def VSE#eew#_V : VUnitStrideStore, VSESched; // Vector Unit-Stride Fault-only-First Loads - def VLE#eew#FF_V : VUnitStrideLoadFF, VLFSched; + def VLE#eew#FF_V : VUnitStrideLoadFF, VLFSched; // Vector Strided Instructions def VLSE#eew#_V : VStridedLoad, VLSSched; @@ -900,13 +896,13 @@ let Predicates = [HasVInstructionsI64] in { // Vector Unit-Stride Instructions def VLE64_V : VUnitStrideLoad, - VLESched<64>; + VLESched; def VLE64FF_V : VUnitStrideLoadFF, - VLFSched<64>; + VLFSched; def VSE64_V : VUnitStrideStore, - VSESched<64>; + VSESched; // Vector Strided Instructions def VLSE64_V : VStridedLoad, VLSSched<32>; @@ -914,10 +910,10 @@ def VSSE64_V : VStridedStore, VSSSched<64>; -defm VL1R: VWholeLoadEEW64<0, "vl1r", VR, WriteVLD1R64>; -defm VL2R: VWholeLoadEEW64<1, "vl2r", VRM2, WriteVLD2R64>; -defm VL4R: VWholeLoadEEW64<3, "vl4r", VRM4, WriteVLD4R64>; -defm VL8R: VWholeLoadEEW64<7, "vl8r", VRM8, WriteVLD8R64>; +defm VL1R: VWholeLoadEEW64<0, "vl1r", VR, WriteVLD1R>; +defm VL2R: VWholeLoadEEW64<1, "vl2r", VRM2, WriteVLD2R>; +defm VL4R: VWholeLoadEEW64<3, "vl4r", VRM4, WriteVLD4R>; +defm VL8R: VWholeLoadEEW64<7, "vl8r", VRM8, WriteVLD8R>; } // Predicates = [HasVInstructionsI64] let Predicates = [IsRV64, HasVInstructionsI64] in { // Vector Indexed Instructions diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -1607,14 +1607,14 @@ let VLMul = lmul.value in { def "E" # eew # "_V_" # LInfo : VPseudoUSLoadNoMask, - VLESched; + VLESched; def "E" # eew # "_V_" # LInfo # "_TU": VPseudoUSLoadNoMaskTU, - VLESched; + VLESched; def "E" # eew # "_V_" # LInfo # "_MASK" : VPseudoUSLoadMask, RISCVMaskedPseudo, - VLESched; + VLESched; } } } @@ -1628,14 +1628,14 @@ let VLMul = lmul.value in { def "E" # eew # "FF_V_" # LInfo: VPseudoUSLoadFFNoMask, - VLFSched; + VLFSched; def "E" # eew # "FF_V_" # LInfo # "_TU": VPseudoUSLoadFFNoMaskTU, - VLFSched; + VLFSched; def "E" # eew # "FF_V_" # LInfo # "_MASK": VPseudoUSLoadFFMask, RISCVMaskedPseudo, - VLFSched; + VLFSched; } } } @@ -1708,9 +1708,9 @@ defvar vreg = lmul.vrclass; let VLMul = lmul.value in { def "E" # eew # "_V_" # LInfo : VPseudoUSStoreNoMask, - VSESched; + VSESched; def "E" # eew # "_V_" # LInfo # "_MASK" : VPseudoUSStoreMask, - VSESched; + VSESched; } } } diff --git a/llvm/lib/Target/RISCV/RISCVScheduleV.td b/llvm/lib/Target/RISCV/RISCVScheduleV.td --- a/llvm/lib/Target/RISCV/RISCVScheduleV.td +++ b/llvm/lib/Target/RISCV/RISCVScheduleV.td @@ -19,14 +19,8 @@ // 7. Vector Loads and Stores // 7.4. Vector Unit-Stride Instructions -def WriteVLDE8 : SchedWrite; -def WriteVLDE16 : SchedWrite; -def WriteVLDE32 : SchedWrite; -def WriteVLDE64 : SchedWrite; -def WriteVSTE8 : SchedWrite; -def WriteVSTE16 : SchedWrite; -def WriteVSTE32 : SchedWrite; -def WriteVSTE64 : SchedWrite; +def WriteVLDE : SchedWrite; +def WriteVSTE : SchedWrite; // 7.4.1. Vector Unit-Strided Mask def WriteVLDM : SchedWrite; def WriteVSTM : SchedWrite; @@ -57,10 +51,7 @@ def WriteVSTOX32 : SchedWrite; def WriteVSTOX64 : SchedWrite; // 7.7. Vector Unit-stride Fault-Only-First Loads -def WriteVLDFF8 : SchedWrite; -def WriteVLDFF16 : SchedWrite; -def WriteVLDFF32 : SchedWrite; -def WriteVLDFF64 : SchedWrite; +def WriteVLDFF : SchedWrite; // 7.8. Vector Segment Instructions foreach nf=2-8 in { foreach eew = [8, 16, 32, 64] in { @@ -76,22 +67,10 @@ } } // 7.9. Vector Whole Register Instructions -def WriteVLD1R8 : SchedWrite; -def WriteVLD1R16 : SchedWrite; -def WriteVLD1R32 : SchedWrite; -def WriteVLD1R64 : SchedWrite; -def WriteVLD2R8 : SchedWrite; -def WriteVLD2R16 : SchedWrite; -def WriteVLD2R32 : SchedWrite; -def WriteVLD2R64 : SchedWrite; -def WriteVLD4R8 : SchedWrite; -def WriteVLD4R16 : SchedWrite; -def WriteVLD4R32 : SchedWrite; -def WriteVLD4R64 : SchedWrite; -def WriteVLD8R8 : SchedWrite; -def WriteVLD8R16 : SchedWrite; -def WriteVLD8R32 : SchedWrite; -def WriteVLD8R64 : SchedWrite; +def WriteVLD1R : SchedWrite; +def WriteVLD2R : SchedWrite; +def WriteVLD4R : SchedWrite; +def WriteVLD8R : SchedWrite; def WriteVST1R : SchedWrite; def WriteVST2R : SchedWrite; def WriteVST4R : SchedWrite; @@ -284,10 +263,7 @@ def ReadVLDX : SchedRead; def ReadVSTX : SchedRead; // 7.4. Vector Unit-Stride Instructions -def ReadVSTE8V : SchedRead; -def ReadVSTE16V : SchedRead; -def ReadVSTE32V : SchedRead; -def ReadVSTE64V : SchedRead; +def ReadVSTEV : SchedRead; // 7.4.1. Vector Unit-Strided Mask def ReadVSTM : SchedRead; // 7.5. Vector Strided Instructions @@ -513,14 +489,8 @@ def : WriteRes; // 7. Vector Loads and Stores -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; +def : WriteRes; +def : WriteRes; def : WriteRes; def : WriteRes; def : WriteRes; @@ -547,26 +517,11 @@ def : WriteRes; def : WriteRes; def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; def : WriteRes; def : WriteRes; def : WriteRes; @@ -712,10 +667,7 @@ // 7. Vector Loads and Stores def : ReadAdvance; def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; +def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance;