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 @@ -1214,74 +1214,89 @@ let BaseInstr = !cast(PseudoToVInst.VInst); } -multiclass VPseudoUSLoad { - foreach lmul = MxList.m in { - defvar LInfo = lmul.MX; - defvar vreg = lmul.vrclass; - let VLMul = lmul.value in { - def "_V_" # LInfo : VPseudoUSLoadNoMask; - def "_V_" # LInfo # "_MASK" : VPseudoUSLoadMask; +multiclass VPseudoUSLoad { + foreach eew = EEWList in { + foreach lmul = MxSet.m in { + defvar LInfo = lmul.MX; + defvar vreg = lmul.vrclass; + defvar FFStr = !if(isFF, "FF", ""); + let VLMul = lmul.value in { + def "E" # eew # FFStr # "_V_" # LInfo : VPseudoUSLoadNoMask; + def "E" # eew # FFStr # "_V_" # LInfo # "_MASK" : VPseudoUSLoadMask; + } } } } multiclass VPseudoSLoad { - foreach lmul = MxList.m in { - defvar LInfo = lmul.MX; - defvar vreg = lmul.vrclass; - let VLMul = lmul.value in { - def "_V_" # LInfo : VPseudoSLoadNoMask; - def "_V_" # LInfo # "_MASK" : VPseudoSLoadMask; + foreach eew = EEWList in { + foreach lmul = MxSet.m in { + defvar LInfo = lmul.MX; + defvar vreg = lmul.vrclass; + let VLMul = lmul.value in { + def "E" # eew # "_V_" # LInfo : VPseudoSLoadNoMask; + def "E" # eew # "_V_" # LInfo # "_MASK" : VPseudoSLoadMask; + } } } } multiclass VPseudoILoad { - foreach lmul = MxList.m in - foreach idx_lmul = MxList.m in { - defvar LInfo = lmul.MX; - defvar Vreg = lmul.vrclass; - defvar IdxLInfo = idx_lmul.MX; - defvar IdxVreg = idx_lmul.vrclass; - let VLMul = lmul.value in { - def "_V_" # IdxLInfo # "_" # LInfo : VPseudoILoadNoMask; - def "_V_" # IdxLInfo # "_" # LInfo # "_MASK" : VPseudoILoadMask; + foreach eew = EEWList in { + foreach lmul = MxList.m in + foreach idx_lmul = MxSet.m in { + defvar LInfo = lmul.MX; + defvar Vreg = lmul.vrclass; + defvar IdxLInfo = idx_lmul.MX; + defvar IdxVreg = idx_lmul.vrclass; + let VLMul = lmul.value in { + def "EI" # eew # "_V_" # IdxLInfo # "_" # LInfo : VPseudoILoadNoMask; + def "EI" # eew # "_V_" # IdxLInfo # "_" # LInfo # "_MASK" : VPseudoILoadMask; + } } } } multiclass VPseudoUSStore { - foreach lmul = MxList.m in { - defvar LInfo = lmul.MX; - defvar vreg = lmul.vrclass; - let VLMul = lmul.value in { - def "_V_" # LInfo : VPseudoUSStoreNoMask; - def "_V_" # LInfo # "_MASK" : VPseudoUSStoreMask; + foreach eew = EEWList in { + foreach lmul = MxSet.m in { + defvar LInfo = lmul.MX; + defvar vreg = lmul.vrclass; + let VLMul = lmul.value in { + def "E" # eew # "_V_" # LInfo : VPseudoUSStoreNoMask; + def "E" # eew # "_V_" # LInfo # "_MASK" : VPseudoUSStoreMask; + } } } } multiclass VPseudoSStore { - foreach lmul = MxList.m in { - defvar LInfo = lmul.MX; - defvar vreg = lmul.vrclass; - let VLMul = lmul.value in { - def "_V_" # LInfo : VPseudoSStoreNoMask; - def "_V_" # LInfo # "_MASK" : VPseudoSStoreMask; + foreach eew = EEWList in { + foreach lmul = MxSet.m in { + defvar LInfo = lmul.MX; + defvar vreg = lmul.vrclass; + let VLMul = lmul.value in { + def "E" # eew # "_V_" # LInfo : VPseudoSStoreNoMask; + def "E" # eew # "_V_" # LInfo # "_MASK" : VPseudoSStoreMask; + } } } } multiclass VPseudoIStore { - foreach lmul = MxList.m in - foreach idx_lmul = MxList.m in { - defvar LInfo = lmul.MX; - defvar Vreg = lmul.vrclass; - defvar IdxLInfo = idx_lmul.MX; - defvar IdxVreg = idx_lmul.vrclass; - let VLMul = lmul.value in { - def "_V_" # IdxLInfo # "_" # LInfo : VPseudoIStoreNoMask; - def "_V_" # IdxLInfo # "_" # LInfo # "_MASK" : VPseudoIStoreMask; + foreach eew = EEWList in { + foreach lmul = MxList.m in + foreach idx_lmul = MxSet.m in { + defvar LInfo = lmul.MX; + defvar Vreg = lmul.vrclass; + defvar IdxLInfo = idx_lmul.MX; + defvar IdxVreg = idx_lmul.vrclass; + let VLMul = lmul.value in { + def "EI" # eew # "_V_" # IdxLInfo # "_" # LInfo : + VPseudoIStoreNoMask; + def "EI" # eew # "_V_" # IdxLInfo # "_" # LInfo # "_MASK" : + VPseudoIStoreMask; + } } } } @@ -3133,32 +3148,26 @@ //===----------------------------------------------------------------------===// // Pseudos Unit-Stride Loads and Stores -foreach eew = EEWList in { - defm PseudoVLE # eew : VPseudoUSLoad; - defm PseudoVSE # eew : VPseudoUSStore; -} +defm PseudoVL : VPseudoUSLoad; +defm PseudoVS : VPseudoUSStore; //===----------------------------------------------------------------------===// // 7.5 Vector Strided Instructions //===----------------------------------------------------------------------===// // Vector Strided Loads and Stores -foreach eew = EEWList in { - defm PseudoVLSE # eew : VPseudoSLoad; - defm PseudoVSSE # eew : VPseudoSStore; -} +defm PseudoVLS : VPseudoSLoad; +defm PseudoVSS : VPseudoSStore; //===----------------------------------------------------------------------===// // 7.6 Vector Indexed Instructions //===----------------------------------------------------------------------===// // Vector Indexed Loads and Stores -foreach eew = EEWList in { - defm PseudoVLUXEI # eew : VPseudoILoad; - defm PseudoVLOXEI # eew : VPseudoILoad; - defm PseudoVSOXEI # eew : VPseudoIStore; - defm PseudoVSUXEI # eew : VPseudoIStore; -} +defm PseudoVLUX : VPseudoILoad; +defm PseudoVLOX : VPseudoILoad; +defm PseudoVSOX : VPseudoIStore; +defm PseudoVSUX : VPseudoIStore; //===----------------------------------------------------------------------===// // 7.7. Unit-stride Fault-Only-First Loads @@ -3166,14 +3175,12 @@ // vleff may update VL register let hasSideEffects = 1, Defs = [VL] in -foreach eew = EEWList in { - defm PseudoVLE # eew # FF : VPseudoUSLoad; -} +defm PseudoVL : VPseudoUSLoad; //===----------------------------------------------------------------------===// // 7.8. Vector Load/Store Segment Instructions //===----------------------------------------------------------------------===// -defm PseudoVLSEG : VPseudoUSSegLoad; +defm PseudoVLSEG : VPseudoUSSegLoad; defm PseudoVLSSEG : VPseudoSSegLoad; defm PseudoVLOXSEG : VPseudoISegLoad; defm PseudoVLUXSEG : VPseudoISegLoad; @@ -3184,7 +3191,7 @@ // vlsegeff.v may update VL register let hasSideEffects = 1, Defs = [VL] in -defm PseudoVLSEG : VPseudoUSSegLoad; +defm PseudoVLSEG : VPseudoUSSegLoad; //===----------------------------------------------------------------------===// // 8. Vector AMO Operations