@@ -54,6 +54,46 @@ multiclass LMULReadAdvanceImpl<string name, int val,
54
54
}
55
55
}
56
56
57
+ // Define multiclasses to define SchedWrite, SchedRead, WriteRes, and
58
+ // ReadAdvance for each (name, LMUL, SEW) tuple for each LMUL in each of the
59
+ // SchedMxList variants above.
60
+ multiclass LMULSEWSchedWritesImpl<string name, list<string> MxList> {
61
+ foreach mx = MxList in {
62
+ if !eq(mx, "UpperBound") then
63
+ def name # "_" # mx : SchedWrite;
64
+ else
65
+ foreach sew = SchedSEWSet<mx>.val in
66
+ def name # "_" # mx # "_E" # sew : SchedWrite;
67
+ }
68
+ }
69
+ multiclass LMULSEWSchedReadsImpl<string name, list<string> MxList> {
70
+ foreach mx = MxList in {
71
+ if !eq(mx, "UpperBound") then
72
+ def name # "_" # mx : SchedRead;
73
+ else
74
+ foreach sew = SchedSEWSet<mx>.val in
75
+ def name # "_" # mx # "_E" # sew : SchedRead;
76
+ }
77
+ }
78
+ multiclass LMULSEWWriteResImpl<string name, list<ProcResourceKind> resources> {
79
+ foreach mx = SchedMxList in {
80
+ if !eq(mx, "UpperBound") then
81
+ def : WriteRes<!cast<SchedWrite>(name # "_" # mx), resources>;
82
+ else
83
+ foreach sew = SchedSEWSet<mx>.val in
84
+ def : WriteRes<!cast<SchedWrite>(name # "_" # mx # "_E" # sew), resources>;
85
+ }
86
+ }
87
+ multiclass LMULSEWReadAdvanceImpl<string name, int val,
88
+ list<SchedWrite> writes = []> {
89
+ foreach mx = SchedMxList in {
90
+ if !eq(mx, "UpperBound") then
91
+ def : ReadAdvance<!cast<SchedRead>(name # "_" # mx), val, writes>;
92
+ else
93
+ foreach sew = SchedSEWSet<mx>.val in
94
+ def : ReadAdvance<!cast<SchedRead>(name # "_" # mx # "_E" # sew), val, writes>;
95
+ }
96
+ }
57
97
// Define classes to define list containing all SchedWrites for each (name, LMUL)
58
98
// pair for each LMUL in each of the SchedMxList variants above and name in
59
99
// argument `names`. These classes can be used to construct a list of existing
@@ -78,6 +118,13 @@ multiclass LMULReadAdvance<string name, int val, list<SchedWrite> writes = []>
78
118
: LMULReadAdvanceImpl<name, val, writes>;
79
119
class LMULSchedWriteList<list<string> names> : LMULSchedWriteListImpl<names, SchedMxList>;
80
120
121
+ multiclass LMULSEWSchedWrites<string name> : LMULSEWSchedWritesImpl<name, SchedMxList>;
122
+ multiclass LMULSEWSchedReads<string name> : LMULSEWSchedReadsImpl<name, SchedMxList>;
123
+ multiclass LMULSEWWriteRes<string name, list<ProcResourceKind> resources>
124
+ : LMULSEWWriteResImpl<name, resources>;
125
+ multiclass LMULSEWReadAdvance<string name, int val, list<SchedWrite> writes = []>
126
+ : LMULSEWReadAdvanceImpl<name, val, writes>;
127
+
81
128
multiclass LMULSchedWritesW<string name> : LMULSchedWritesImpl<name, SchedMxListW>;
82
129
multiclass LMULSchedReadsW<string name> : LMULSchedReadsImpl<name, SchedMxListW>;
83
130
multiclass LMULWriteResW<string name, list<ProcResourceKind> resources>
@@ -340,7 +387,7 @@ defm "" : LMULSchedWrites<"WriteVRGatherVV">;
340
387
defm "" : LMULSchedWrites<"WriteVRGatherVX">;
341
388
defm "" : LMULSchedWrites<"WriteVRGatherVI">;
342
389
// 16.5. Vector Compress Instruction
343
- defm "" : LMULSchedWrites <"WriteVCompressV">;
390
+ defm "" : LMULSEWSchedWrites <"WriteVCompressV">;
344
391
// 16.6. Whole Vector Register Move
345
392
// These are already LMUL aware
346
393
def WriteVMov1V : SchedWrite;
@@ -564,7 +611,7 @@ defm "" : LMULSchedReads<"ReadVRGatherVX_data">;
564
611
defm "" : LMULSchedReads<"ReadVRGatherVX_index">;
565
612
defm "" : LMULSchedReads<"ReadVRGatherVI_data">;
566
613
// 16.5. Vector Compress Instruction
567
- defm "" : LMULSchedReads <"ReadVCompressV">;
614
+ defm "" : LMULSEWSchedReads <"ReadVCompressV">;
568
615
// 16.6. Whole Vector Register Move
569
616
// These are already LMUL aware
570
617
def ReadVMov1V : SchedRead;
@@ -756,7 +803,7 @@ defm "" : LMULWriteRes<"WriteVFSlide1F", []>;
756
803
defm "" : LMULWriteRes<"WriteVRGatherVV", []>;
757
804
defm "" : LMULWriteRes<"WriteVRGatherVX", []>;
758
805
defm "" : LMULWriteRes<"WriteVRGatherVI", []>;
759
- defm "" : LMULWriteRes <"WriteVCompressV", []>;
806
+ defm "" : LMULSEWWriteRes <"WriteVCompressV", []>;
760
807
// These are already LMUL aware
761
808
def : WriteRes<WriteVMov1V, []>;
762
809
def : WriteRes<WriteVMov2V, []>;
@@ -916,7 +963,9 @@ defm "" : LMULReadAdvance<"ReadVRGatherVV_index", 0>;
916
963
defm "" : LMULReadAdvance<"ReadVRGatherVX_data", 0>;
917
964
defm "" : LMULReadAdvance<"ReadVRGatherVX_index", 0>;
918
965
defm "" : LMULReadAdvance<"ReadVRGatherVI_data", 0>;
919
- defm "" : LMULReadAdvance<"ReadVCompressV", 0>;
966
+ defm "" : LMULReadAdvance<"ReadVGatherV", 0>;
967
+ defm "" : LMULReadAdvance<"ReadVGatherX", 0>;
968
+ defm "" : LMULSEWReadAdvance<"ReadVCompressV", 0>;
920
969
// These are already LMUL aware
921
970
def : ReadAdvance<ReadVMov1V, 0>;
922
971
def : ReadAdvance<ReadVMov2V, 0>;
0 commit comments