Index: llvm/lib/Target/RISCV/RISCVScheduleV.td =================================================================== --- llvm/lib/Target/RISCV/RISCVScheduleV.td +++ llvm/lib/Target/RISCV/RISCVScheduleV.td @@ -17,110 +17,58 @@ // Used for widening floating-point Reduction as it doesn't contain MF8. defvar SchedMxListFWRed = ["UpperBound", "MF4", "MF2", "M1", "M2", "M4", "M8"]; -// Creates SchedWrite for each (name, LMUL) pair for LMUL in SchedMxList -multiclass LMULSchedWrites { - foreach mx = SchedMxList in { - def name # "_" # mx : SchedWrite; - } -} - -// Creates SchedWrite for each (name, LMUL) pair for LMUL in SchedMxListW -multiclass LMULSchedWritesW { - foreach mx = SchedMxListW in { - def name # "_" # mx : SchedWrite; - } -} - -// Creates SchedWrite for each (name, LMUL) pair for LMUL in SchedMxListFW -multiclass LMULSchedWritesFW { - foreach mx = SchedMxListFW in { - def name # "_" # mx : SchedWrite; - } -} +// Define multiclasses to define SchedWrite, SchedRead, WriteRes, and +// ReadAdvance for each (name, LMUL) pair for each LMUL in each of the +// SchedMxList variants above. -// Creates SchedWrite for each (name, LMUL) pair for LMUL in SchedMxListFWRed -multiclass LMULSchedWritesFWRed { - foreach mx = SchedMxListFWRed in { +multiclass LMULSchedWritesImpl MxList> { + foreach mx = MxList in { def name # "_" # mx : SchedWrite; } } - -// Creates SchedRead for each (name, LMUL) pair for LMUL in SchedMxList -multiclass LMULSchedReads { - foreach mx = SchedMxList in { - def name # "_" # mx : SchedRead; - } -} - -// Creates SchedRead for each (name, LMUL) pair for LMUL in SchedMxListW -multiclass LMULSchedReadsW { - foreach mx = SchedMxListW in { - def name # "_" # mx : SchedRead; - } -} - -// Creates SchedRead for each (name, LMUL) pair for LMUL in SchedMxListFW -multiclass LMULSchedReadsFW { - foreach mx = SchedMxListFW in { +multiclass LMULSchedReadsImpl MxList> { + foreach mx = MxList in { def name # "_" # mx : SchedRead; } } - -// Creates WriteRes for each (name, LMUL, resources) tuple for LMUL -// in SchedMxList -multiclass LMULWriteRes resources> { - foreach mx = SchedMxList in { - def : WriteRes(name # "_" # mx), resources>; - } -} - -// Creates WriteRes for each (name, LMUL, resources) tuple for LMUL -// in SchedMxListW -multiclass LMULWriteResW resources> { - foreach mx = SchedMxListW in { - def : WriteRes(name # "_" # mx), resources>; - } -} - -// Creates WriteRes for each (name, LMUL, resources) tuple for LMUL -// in SchedMxListFW -multiclass LMULWriteResFW resources> { - foreach mx = SchedMxListFW in { - def : WriteRes(name # "_" # mx), resources>; - } -} - -// Creates WriteRes for each (name, LMUL, resources) tuple for LMUL -// in SchedMxListFWRed -multiclass LMULWriteResFWRed resources> { - foreach mx = SchedMxListFWRed in { +multiclass LMULWriteResImpl MxList, + list resources> { + foreach mx = MxList in { def : WriteRes(name # "_" # mx), resources>; } } - -// Creates ReadAdvance for each (name, LMUL, val) tuple for LMUL -// in SchedMxList -multiclass LMULReadAdvance writes = []> { - foreach mx = SchedMxList in { +multiclass LMULReadAdvanceImpl MxList, int val, + list writes = []> { + foreach mx = MxList in { def : ReadAdvance(name # "_" # mx), val, writes>; } } -// Creates ReadAdvance for each (name, LMUL, val) tuple for LMUL -// in SchedMxListW -multiclass LMULReadAdvanceW writes = []> { - foreach mx = SchedMxListW in { - def : ReadAdvance(name # "_" # mx), val, writes>; - } -} +multiclass LMULSchedWrites : LMULSchedWritesImpl; +multiclass LMULSchedReads : LMULSchedReadsImpl; +multiclass LMULWriteRes resources> + : LMULWriteResImpl; +multiclass LMULReadAdvance writes = []> + : LMULReadAdvanceImpl; + +multiclass LMULSchedWritesW : LMULSchedWritesImpl; +multiclass LMULSchedReadsW : LMULSchedReadsImpl; +multiclass LMULWriteResW resources> + : LMULWriteResImpl; +multiclass LMULReadAdvanceW writes = []> + : LMULReadAdvanceImpl; + +multiclass LMULSchedWritesFW : LMULSchedWritesImpl; +multiclass LMULSchedReadsFW : LMULSchedReadsImpl; +multiclass LMULWriteResFW resources> + : LMULWriteResImpl; +multiclass LMULReadAdvanceFW writes = []> + : LMULReadAdvanceImpl; + +multiclass LMULSchedWritesFWRed : LMULSchedWritesImpl; +multiclass LMULWriteResFWRed resources> + : LMULWriteResImpl; -// Creates ReadAdvance for each (name, LMUL, val) tuple for LMUL -// in SchedMxListFW -multiclass LMULReadAdvanceFW writes = []> { - foreach mx = SchedMxListFW in { - def : ReadAdvance(name # "_" # mx), val, writes>; - } -} // 3.6 Vector Byte Length vlenb def WriteRdVLENB : SchedWrite;