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 @@ -816,23 +816,20 @@ (VSM_V VR:$vs3, GPR:$rs1), 0>; defm VL1R : VWholeLoadN<0, "vl1r", VR>; -defm VL2R : VWholeLoadN<1, "vl2r", VRM2>; -defm VL4R : VWholeLoadN<3, "vl4r", VRM4>; -defm VL8R : VWholeLoadN<7, "vl8r", VRM8>; - def : InstAlias<"vl1r.v $vd, (${rs1})", (VL1RE8_V VR:$vd, GPR:$rs1)>; -def : InstAlias<"vl2r.v $vd, (${rs1})", (VL2RE8_V VRM2:$vd, GPR:$rs1)>; -def : InstAlias<"vl4r.v $vd, (${rs1})", (VL4RE8_V VRM4:$vd, GPR:$rs1)>; -def : InstAlias<"vl8r.v $vd, (${rs1})", (VL8RE8_V VRM8:$vd, GPR:$rs1)>; - def VS1R_V : VWholeStore<0, "vs1r.v", VR>, Sched<[WriteVST1R, ReadVST1R, ReadVSTX]>; -def VS2R_V : VWholeStore<1, "vs2r.v", VRM2>, - Sched<[WriteVST2R, ReadVST2R, ReadVSTX]>; -def VS4R_V : VWholeStore<3, "vs4r.v", VRM4>, - Sched<[WriteVST4R, ReadVST4R, ReadVSTX]>; -def VS8R_V : VWholeStore<7, "vs8r.v", VRM8>, - Sched<[WriteVST8R, ReadVST8R, ReadVSTX]>; + +foreach n = [2, 4, 8] in { + defvar vrc = !cast("VRM"#n); + + defm VL#n#R : VWholeLoadN; + def : InstAlias<"vl"#n#"r.v $vd, (${rs1})", + (!cast(VL#n#RE8_V) vrc:$vd, GPR:$rs1)>; + def VS#n#R_V : VWholeStore, + Sched<[!cast("WriteVST"#n#"R"), + !cast("ReadVST"#n#"R"), ReadVSTX]>; +} // Vector Single-Width Integer Add and Subtract defm VADD_V : VALU_IV_V_X_I<"vadd", 0b000000>;