diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td index 1ad634344c09ab..7a2701e1e67035 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td @@ -131,18 +131,13 @@ class VSSSEGSched : Sched<[ !cast("WriteVSSSEG" #nf #"e" #eew), !cast("ReadVSTS" #eew #"V"), ReadVSTX, ReadVSTSX, ReadVMask]>; // Indexed Segment Loads and Stores -class VLUXSEGSched : Sched<[ - !cast("WriteVLUXSEG" #nf #"e" #eew), ReadVLDX, ReadVLDUXV, - ReadVMask]>; -class VLOXSEGSched : Sched<[ - !cast("WriteVLOXSEG" #nf #"e" #eew), ReadVLDX, ReadVLDOXV, - ReadVMask]>; -class VSUXSEGSched : Sched<[ - !cast("WriteVSUXSEG" #nf #"e" #eew), - !cast("ReadVSTUX" #eew), ReadVSTX, ReadVSTUXV, ReadVMask]>; -class VSOXSEGSched : Sched<[ - !cast("WriteVSOXSEG" #nf #"e" #eew), - !cast("ReadVSTOX" #eew), ReadVSTX, ReadVSTOXV, ReadVMask]>; +class VLXSEGSched : Sched<[ + !cast("WriteVL" #o # "XSEG" #nf #"e" #eew), ReadVLDX, + !cast("ReadVLD" # o # "XV"), ReadVMask]>; +class VSXSEGSched : Sched<[ + !cast("WriteVS" #o # "XSEG" #nf #"e" #eew), + !cast("ReadVST" #o # "X" #eew), ReadVSTX, + !cast("ReadVST" #o # "XV"), ReadVMask]>; //===----------------------------------------------------------------------===// // Instruction class templates @@ -1543,16 +1538,20 @@ let Predicates = [HasVInstructions] in { // Vector Indexed Instructions def VLUXSEG#nf#EI#eew#_V : VIndexedSegmentLoad, VLUXSEGSched; + "vluxseg"#nf#"ei"#eew#".v">, + VLXSEGSched; def VLOXSEG#nf#EI#eew#_V : VIndexedSegmentLoad, VLOXSEGSched; + "vloxseg"#nf#"ei"#eew#".v">, + VLXSEGSched; def VSUXSEG#nf#EI#eew#_V : VIndexedSegmentStore, VSUXSEGSched; + "vsuxseg"#nf#"ei"#eew#".v">, + VSXSEGSched; def VSOXSEG#nf#EI#eew#_V : VIndexedSegmentStore, VSOXSEGSched; + "vsoxseg"#nf#"ei"#eew#".v">, + VSXSEGSched; } } } // Predicates = [HasVInstructions] @@ -1584,16 +1583,16 @@ let Predicates = [HasVInstructionsI64, IsRV64] in { // Vector Indexed Segment Instructions def VLUXSEG#nf#EI64_V : VIndexedSegmentLoad, VLUXSEGSched; + "vluxseg"#nf#"ei64.v">, VLXSEGSched; def VLOXSEG#nf#EI64_V : VIndexedSegmentLoad, VLOXSEGSched; + "vloxseg"#nf#"ei64.v">, VLXSEGSched; def VSUXSEG#nf#EI64_V : VIndexedSegmentStore, VSUXSEGSched; + "vsuxseg"#nf#"ei64.v">, VSXSEGSched; def VSOXSEG#nf#EI64_V : VIndexedSegmentStore, VSOXSEGSched; + "vsoxseg"#nf#"ei64.v">, VSXSEGSched; } } // Predicates = [HasVInstructionsI64, IsRV64] diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td index 03e77c78692a5c..efa5a7321800ed 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -2837,11 +2837,11 @@ multiclass VPseudoUSSegLoad { foreach nf = NFSet.L in { defvar vreg = SegRegClass.RC; def nf # "E" # eew # "_V_" # LInfo : - VPseudoUSSegLoadNoMask; + VPseudoUSSegLoadNoMask, VLSEGSched; def nf # "E" # eew # "_V_" # LInfo # "_TU" : - VPseudoUSSegLoadNoMaskTU; + VPseudoUSSegLoadNoMaskTU, VLSEGSched; def nf # "E" # eew # "_V_" # LInfo # "_MASK" : - VPseudoUSSegLoadMask; + VPseudoUSSegLoadMask, VLSEGSched; } } } @@ -2856,11 +2856,11 @@ multiclass VPseudoUSSegLoadFF { foreach nf = NFSet.L in { defvar vreg = SegRegClass.RC; def nf # "E" # eew # "FF_V_" # LInfo : - VPseudoUSSegLoadFFNoMask; + VPseudoUSSegLoadFFNoMask, VLSEGFFSched; def nf # "E" # eew # "FF_V_" # LInfo # "_TU" : - VPseudoUSSegLoadFFNoMaskTU; + VPseudoUSSegLoadFFNoMaskTU, VLSEGFFSched; def nf # "E" # eew # "FF_V_" # LInfo # "_MASK" : - VPseudoUSSegLoadFFMask; + VPseudoUSSegLoadFFMask, VLSEGFFSched; } } } @@ -2874,9 +2874,12 @@ multiclass VPseudoSSegLoad { let VLMul = lmul.value in { foreach nf = NFSet.L in { defvar vreg = SegRegClass.RC; - def nf # "E" # eew # "_V_" # LInfo : VPseudoSSegLoadNoMask; - def nf # "E" # eew # "_V_" # LInfo # "_TU" : VPseudoSSegLoadNoMaskTU; - def nf # "E" # eew # "_V_" # LInfo # "_MASK" : VPseudoSSegLoadMask; + def nf # "E" # eew # "_V_" # LInfo : VPseudoSSegLoadNoMask, + VLSSEGSched; + def nf # "E" # eew # "_V_" # LInfo # "_TU" : VPseudoSSegLoadNoMaskTU, + VLSSEGSched; + def nf # "E" # eew # "_V_" # LInfo # "_MASK" : VPseudoSSegLoadMask, + VLSSEGSched; } } } @@ -2896,18 +2899,22 @@ multiclass VPseudoISegLoad { defvar idx_lmul = !cast("V_" # IdxLInfo); defvar Vreg = val_lmul.vrclass; defvar IdxVreg = idx_lmul.vrclass; + defvar Order = !if(Ordered, "O", "U"); let VLMul = val_lmul.value in { foreach nf = NFSet.L in { defvar ValVreg = SegRegClass.RC; def nf # "EI" # idx_eew # "_V_" # IdxLInfo # "_" # ValLInfo : VPseudoISegLoadNoMask; + nf, Ordered>, + VLXSEGSched; def nf # "EI" # idx_eew # "_V_" # IdxLInfo # "_" # ValLInfo # "_TU" : VPseudoISegLoadNoMaskTU; + nf, Ordered>, + VLXSEGSched; def nf # "EI" # idx_eew # "_V_" # IdxLInfo # "_" # ValLInfo # "_MASK" : VPseudoISegLoadMask; + nf, Ordered>, + VLXSEGSched; } } } @@ -2923,8 +2930,10 @@ multiclass VPseudoUSSegStore { let VLMul = lmul.value in { foreach nf = NFSet.L in { defvar vreg = SegRegClass.RC; - def nf # "E" # eew # "_V_" # LInfo : VPseudoUSSegStoreNoMask; - def nf # "E" # eew # "_V_" # LInfo # "_MASK" : VPseudoUSSegStoreMask; + def nf # "E" # eew # "_V_" # LInfo : VPseudoUSSegStoreNoMask, + VSSEGSched; + def nf # "E" # eew # "_V_" # LInfo # "_MASK" : VPseudoUSSegStoreMask, + VSSEGSched; } } } @@ -2938,8 +2947,10 @@ multiclass VPseudoSSegStore { let VLMul = lmul.value in { foreach nf = NFSet.L in { defvar vreg = SegRegClass.RC; - def nf # "E" # eew # "_V_" # LInfo : VPseudoSSegStoreNoMask; - def nf # "E" # eew # "_V_" # LInfo # "_MASK" : VPseudoSSegStoreMask; + def nf # "E" # eew # "_V_" # LInfo : VPseudoSSegStoreNoMask, + VSSSEGSched; + def nf # "E" # eew # "_V_" # LInfo # "_MASK" : VPseudoSSegStoreMask, + VSSSEGSched; } } } @@ -2959,15 +2970,18 @@ multiclass VPseudoISegStore { defvar idx_lmul = !cast("V_" # IdxLInfo); defvar Vreg = val_lmul.vrclass; defvar IdxVreg = idx_lmul.vrclass; + defvar Order = !if(Ordered, "O", "U"); let VLMul = val_lmul.value in { foreach nf = NFSet.L in { defvar ValVreg = SegRegClass.RC; def nf # "EI" # idx_eew # "_V_" # IdxLInfo # "_" # ValLInfo : VPseudoISegStoreNoMask; + nf, Ordered>, + VSXSEGSched; def nf # "EI" # idx_eew # "_V_" # IdxLInfo # "_" # ValLInfo # "_MASK" : VPseudoISegStoreMask; + nf, Ordered>, + VSXSEGSched; } } }