Skip to content

Commit 78a2240

Browse files
committed
[RISCV][NFC] Add isF argument to SchedSEWSet
So that we can remove `SchedSEWSetF` and simplify some code. Reviewed By: michaelmaitland Differential Revision: https://reviews.llvm.org/D151790
1 parent eabf1d3 commit 78a2240

File tree

3 files changed

+21
-32
lines changed

3 files changed

+21
-32
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2364,7 +2364,7 @@ multiclass VPseudoVCLS_V {
23642364
multiclass VPseudoVSQR_V {
23652365
foreach m = MxListF in {
23662366
defvar mx = m.MX;
2367-
defvar sews = SchedSEWSetF<m.MX>.val;
2367+
defvar sews = SchedSEWSet<m.MX, /*isF*/ 1>.val;
23682368

23692369
let VLMul = m.value in
23702370
foreach e = sews in {
@@ -2719,7 +2719,7 @@ multiclass VPseudoVFMUL_VV_VF {
27192719
multiclass VPseudoVFDIV_VV_VF {
27202720
foreach m = MxListF in {
27212721
defvar mx = m.MX;
2722-
defvar sews = SchedSEWSetF<mx>.val;
2722+
defvar sews = SchedSEWSet<mx, /*isF*/ 1>.val;
27232723
foreach e = sews in {
27242724
defvar WriteVFDivV_MX_E = !cast<SchedWrite>("WriteVFDivV_" # mx # "_E" # e);
27252725
defvar ReadVFDivV_MX_E = !cast<SchedRead>("ReadVFDivV_" # mx # "_E" # e);
@@ -2732,7 +2732,7 @@ multiclass VPseudoVFDIV_VV_VF {
27322732
foreach f = FPList in {
27332733
foreach m = f.MxList in {
27342734
defvar mx = m.MX;
2735-
defvar sews = SchedSEWSetF<mx>.val;
2735+
defvar sews = SchedSEWSet<mx, /*isF*/ 1>.val;
27362736
foreach e = sews in {
27372737
defvar WriteVFDivF_MX_E = !cast<SchedWrite>("WriteVFDivF_" # mx # "_E" # e);
27382738
defvar ReadVFDivV_MX_E = !cast<SchedRead>("ReadVFDivV_" # mx # "_E" # e);
@@ -2749,7 +2749,7 @@ multiclass VPseudoVFRDIV_VF {
27492749
foreach f = FPList in {
27502750
foreach m = f.MxList in {
27512751
defvar mx = m.MX;
2752-
defvar sews = SchedSEWSetF<mx>.val;
2752+
defvar sews = SchedSEWSet<mx, /*isF*/ 1>.val;
27532753
foreach e = sews in {
27542754
defvar WriteVFDivF_MX_E = !cast<SchedWrite>("WriteVFDivF_" # mx # "_E" # e);
27552755
defvar ReadVFDivV_MX_E = !cast<SchedRead>("ReadVFDivV_" # mx # "_E" # e);
@@ -3464,7 +3464,7 @@ multiclass VPseudoVRED_VS {
34643464
multiclass VPseudoVWRED_VS {
34653465
foreach m = MxListWRed in {
34663466
defvar mx = m.MX;
3467-
foreach e = SchedSEWSet<mx, 1>.val in {
3467+
foreach e = SchedSEWSet<mx, /*isF*/ 0, /*isWidening*/ 1>.val in {
34683468
defvar WriteVIWRedV_From_MX_E = !cast<SchedWrite>("WriteVIWRedV_From_" # mx # "_E" # e);
34693469
defm _VS : VPseudoTernaryWithTailPolicy_E<V_M1.vrclass, m.vrclass, V_M1.vrclass, m, e>,
34703470
Sched<[WriteVIWRedV_From_MX_E, ReadVIWRedV, ReadVIWRedV,
@@ -3476,7 +3476,7 @@ multiclass VPseudoVWRED_VS {
34763476
multiclass VPseudoVFRED_VS {
34773477
foreach m = MxListF in {
34783478
defvar mx = m.MX;
3479-
foreach e = SchedSEWSetF<mx>.val in {
3479+
foreach e = SchedSEWSet<mx, /*isF*/ 1>.val in {
34803480
defvar WriteVFRedV_From_MX_E = !cast<SchedWrite>("WriteVFRedV_From_" # mx # "_E" # e);
34813481
defm _VS : VPseudoTernaryWithTailPolicy_E<V_M1.vrclass, m.vrclass, V_M1.vrclass, m, e>,
34823482
Sched<[WriteVFRedV_From_MX_E, ReadVFRedV, ReadVFRedV, ReadVFRedV,
@@ -3488,7 +3488,7 @@ multiclass VPseudoVFRED_VS {
34883488
multiclass VPseudoVFREDO_VS {
34893489
foreach m = MxListF in {
34903490
defvar mx = m.MX;
3491-
foreach e = SchedSEWSetF<mx>.val in {
3491+
foreach e = SchedSEWSet<mx, /*isF*/ 1>.val in {
34923492
defvar WriteVFRedOV_From_MX_E = !cast<SchedWrite>("WriteVFRedOV_From_" # mx # "_E" # e);
34933493
defm _VS : VPseudoTernaryWithTailPolicy_E<V_M1.vrclass, m.vrclass, V_M1.vrclass, m, e>,
34943494
Sched<[WriteVFRedOV_From_MX_E, ReadVFRedOV, ReadVFRedOV,
@@ -3500,7 +3500,7 @@ multiclass VPseudoVFREDO_VS {
35003500
multiclass VPseudoVFWRED_VS {
35013501
foreach m = MxListFWRed in {
35023502
defvar mx = m.MX;
3503-
foreach e = SchedSEWSetF<mx, 1>.val in {
3503+
foreach e = SchedSEWSet<mx, /*isF*/ 1, /*isWidening*/ 1>.val in {
35043504
defvar WriteVFWRedV_From_MX_E = !cast<SchedWrite>("WriteVFWRedV_From_" # mx # "_E" # e);
35053505
defm _VS : VPseudoTernaryWithTailPolicy_E<V_M1.vrclass, m.vrclass, V_M1.vrclass, m, e>,
35063506
Sched<[WriteVFWRedV_From_MX_E, ReadVFWRedV, ReadVFWRedV,

llvm/lib/Target/RISCV/RISCVSchedSiFive7.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ foreach mx = SchedMxList in {
567567
}
568568
}
569569
foreach mx = SchedMxListF in {
570-
foreach sew = SchedSEWSetF<mx>.val in {
570+
foreach sew = SchedSEWSet<mx, /*isF*/ 1>.val in {
571571
defvar Cycles = !mul(SiFive7GetDivOrSqrtFactor<sew>.c,
572572
!div(SiFive7GetCyclesOnePerElement<mx, sew>.c, 4));
573573
defvar IsWorstCase = SiFive7IsWorstCaseMXSEW<mx, sew, SchedMxListF, 1>.c;

llvm/lib/Target/RISCV/RISCVScheduleV.td

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,20 @@ defvar SchedMxListF = !listremove(SchedMxList, ["MF8"]);
2020
// Used for widening floating-point Reduction as it doesn't contain MF8.
2121
defvar SchedMxListFWRed = SchedMxListF;
2222

23-
// For widening instructions, SEW will not be 64.
24-
class SchedSEWSet<string mx, bit isWidening = 0> {
23+
class SchedSEWSet<string mx, bit isF = 0, bit isWidening = 0> {
24+
assert !or(!not(isF), !ne(mx, "MF8")), "LMUL shouldn't be MF8 for floating-point";
2525
defvar t = !cond(!eq(mx, "M1"): [8, 16, 32, 64],
2626
!eq(mx, "M2"): [8, 16, 32, 64],
2727
!eq(mx, "M4"): [8, 16, 32, 64],
2828
!eq(mx, "M8"): [8, 16, 32, 64],
2929
!eq(mx, "MF2"): [8, 16, 32],
3030
!eq(mx, "MF4"): [8, 16],
3131
!eq(mx, "MF8"): [8]);
32-
list<int> val = !if(isWidening, !listremove(t, [64]), t);
33-
}
34-
35-
// For floating-point instructions, SEW won't be 8.
36-
class SchedSEWSetF<string mx, bit isWidening = 0> {
37-
defvar t = !cond(!eq(mx, "M1"): [16, 32, 64],
38-
!eq(mx, "M2"): [16, 32, 64],
39-
!eq(mx, "M4"): [16, 32, 64],
40-
!eq(mx, "M8"): [16, 32, 64],
41-
!eq(mx, "MF2"): [16, 32],
42-
!eq(mx, "MF4"): [16]);
43-
list<int> val = !if(isWidening, !listremove(t, [64]), t);
32+
// For floating-point instructions, SEW won't be 8.
33+
defvar remove8 = !if(isF, !listremove(t, [8]), t);
34+
// For widening instructions, SEW will not be 64.
35+
defvar remove64 = !if(isWidening, !listremove(remove8, [64]), remove8);
36+
list<int> val = remove64;
4437
}
4538

4639
// Helper function to get the largest LMUL from MxList
@@ -52,7 +45,7 @@ class LargestLMUL<list<string> MxList> {
5245
// Helper function to get the smallest SEW that can be used with LMUL mx
5346
// Precondition: MxList is sorted in ascending LMUL order and SchedSEWSet<mx>
5447
class SmallestSEW<string mx, bit isF = 0> {
55-
int r = !head(!if(isF, SchedSEWSetF<mx>.val, SchedSEWSet<mx>.val));
48+
int r = !head(SchedSEWSet<mx, isF>.val);
5649
}
5750

5851
// Creates WriteRes for (name, mx, resources) tuple
@@ -111,17 +104,15 @@ multiclass LMULSEWSchedWritesImpl<string name, list<string> MxList, bit isF = 0,
111104
bit isWidening = 0> {
112105
def name # "_WorstCase" : SchedWrite;
113106
foreach mx = MxList in {
114-
foreach sew = !if(isF, SchedSEWSetF<mx, isWidening>.val,
115-
SchedSEWSet<mx, isWidening>.val) in
107+
foreach sew = SchedSEWSet<mx, isF, isWidening>.val in
116108
def name # "_" # mx # "_E" # sew : SchedWrite;
117109
}
118110
}
119111
multiclass LMULSEWSchedReadsImpl<string name, list<string> MxList, bit isF = 0,
120112
bit isWidening = 0> {
121113
def name # "_WorstCase" : SchedRead;
122114
foreach mx = MxList in {
123-
foreach sew = !if(isF,SchedSEWSetF<mx, isWidening>.val,
124-
SchedSEWSet<mx, isWidening>.val) in
115+
foreach sew = SchedSEWSet<mx, isF, isWidening>.val in
125116
def name # "_" # mx # "_E" # sew : SchedRead;
126117
}
127118
}
@@ -131,8 +122,7 @@ multiclass LMULSEWWriteResImpl<string name, list<ProcResourceKind> resources,
131122
if !exists<SchedWrite>(name # "_WorstCase") then
132123
def : WriteRes<!cast<SchedWrite>(name # "_WorstCase"), resources>;
133124
foreach mx = MxList in {
134-
foreach sew = !if(isF,SchedSEWSetF<mx, isWidening>.val,
135-
SchedSEWSet<mx, isWidening>.val) in
125+
foreach sew = SchedSEWSet<mx, isF, isWidening>.val in
136126
if !exists<SchedWrite>(name # "_" # mx # "_E" # sew) then
137127
def : WriteRes<!cast<SchedWrite>(name # "_" # mx # "_E" # sew), resources>;
138128
}
@@ -143,8 +133,7 @@ multiclass LMULSEWReadAdvanceImpl<string name, int val, list<SchedWrite> writes
143133
if !exists<SchedRead>(name # "_WorstCase") then
144134
def : ReadAdvance<!cast<SchedRead>(name # "_WorstCase"), val, writes>;
145135
foreach mx = MxList in {
146-
foreach sew = !if(isF,SchedSEWSetF<mx, isWidening>.val,
147-
SchedSEWSet<mx, isWidening>.val) in
136+
foreach sew = SchedSEWSet<mx, isF, isWidening>.val in
148137
if !exists<SchedRead>(name # "_" # mx # "_E" # sew) then
149138
def : ReadAdvance<!cast<SchedRead>(name # "_" # mx # "_E" # sew), val, writes>;
150139
}

0 commit comments

Comments
 (0)