@@ -56,54 +56,49 @@ static cl::opt<bool>
56
56
namespace {
57
57
58
58
class RegisterInfoEmitter {
59
- CodeGenTarget Target;
60
59
RecordKeeper &Records;
60
+ const CodeGenTarget Target;
61
+ CodeGenRegBank &RegBank;
61
62
62
63
public:
63
- RegisterInfoEmitter (RecordKeeper &R) : Target(R), Records(R) {
64
- CodeGenRegBank &RegBank = Target.getRegBank ();
64
+ RegisterInfoEmitter (RecordKeeper &R)
65
+ : Records(R), Target(R), RegBank(Target .getRegBank()) {
65
66
RegBank.computeDerivedInfo ();
66
67
}
67
68
68
69
// runEnums - Print out enum values for all of the registers.
69
- void runEnums (raw_ostream &o, CodeGenTarget &Target, CodeGenRegBank &Bank );
70
+ void runEnums (raw_ostream &OS );
70
71
71
72
// runMCDesc - Print out MC register descriptions.
72
- void runMCDesc (raw_ostream &o, CodeGenTarget &Target, CodeGenRegBank &Bank );
73
+ void runMCDesc (raw_ostream &OS );
73
74
74
75
// runTargetHeader - Emit a header fragment for the register info emitter.
75
- void runTargetHeader (raw_ostream &o, CodeGenTarget &Target,
76
- CodeGenRegBank &Bank);
76
+ void runTargetHeader (raw_ostream &OS);
77
77
78
78
// runTargetDesc - Output the target register and register file descriptions.
79
- void runTargetDesc (raw_ostream &o, CodeGenTarget &Target,
80
- CodeGenRegBank &Bank);
79
+ void runTargetDesc (raw_ostream &OS);
81
80
82
81
// run - Output the register file description.
83
- void run (raw_ostream &o );
82
+ void run (raw_ostream &OS );
84
83
85
84
void debugDump (raw_ostream &OS);
86
85
87
86
private:
88
- void EmitRegMapping (raw_ostream &o , const std::deque<CodeGenRegister> &Regs,
87
+ void EmitRegMapping (raw_ostream &OS , const std::deque<CodeGenRegister> &Regs,
89
88
bool isCtor);
90
- void EmitRegMappingTables (raw_ostream &o ,
89
+ void EmitRegMappingTables (raw_ostream &OS ,
91
90
const std::deque<CodeGenRegister> &Regs,
92
91
bool isCtor);
93
- void EmitRegUnitPressure (raw_ostream &OS, const CodeGenRegBank &RegBank,
94
- const std::string &ClassName);
95
- void emitComposeSubRegIndices (raw_ostream &OS, CodeGenRegBank &RegBank,
96
- const std::string &ClassName);
97
- void emitComposeSubRegIndexLaneMask (raw_ostream &OS, CodeGenRegBank &RegBank,
98
- const std::string &ClassName);
92
+ void EmitRegUnitPressure (raw_ostream &OS, StringRef ClassName);
93
+ void emitComposeSubRegIndices (raw_ostream &OS, StringRef ClassName);
94
+ void emitComposeSubRegIndexLaneMask (raw_ostream &OS, StringRef ClassName);
99
95
};
100
96
101
97
} // end anonymous namespace
102
98
103
99
// runEnums - Print out enum values for all of the registers.
104
- void RegisterInfoEmitter::runEnums (raw_ostream &OS, CodeGenTarget &Target,
105
- CodeGenRegBank &Bank) {
106
- const auto &Registers = Bank.getRegisters ();
100
+ void RegisterInfoEmitter::runEnums (raw_ostream &OS) {
101
+ const auto &Registers = RegBank.getRegisters ();
107
102
108
103
// Register enums are stored as uint16_t in the tables. Make sure we'll fit.
109
104
assert (Registers.size () <= 0xffff && " Too many regs to fit in tables" );
@@ -134,7 +129,7 @@ void RegisterInfoEmitter::runEnums(raw_ostream &OS, CodeGenTarget &Target,
134
129
if (!Namespace.empty ())
135
130
OS << " } // end namespace " << Namespace << " \n " ;
136
131
137
- const auto &RegisterClasses = Bank .getRegClasses ();
132
+ const auto &RegisterClasses = RegBank .getRegClasses ();
138
133
if (!RegisterClasses.empty ()) {
139
134
140
135
// RegisterClass enums are stored as uint16_t in the tables.
@@ -168,7 +163,7 @@ void RegisterInfoEmitter::runEnums(raw_ostream &OS, CodeGenTarget &Target,
168
163
OS << " } // end namespace " << Namespace << " \n\n " ;
169
164
}
170
165
171
- auto &SubRegIndices = Bank .getSubRegIndices ();
166
+ auto &SubRegIndices = RegBank .getSubRegIndices ();
172
167
if (!SubRegIndices.empty ()) {
173
168
OS << " \n // Subregister indices\n\n " ;
174
169
std::string Namespace = SubRegIndices.front ().getNamespace ();
@@ -187,9 +182,9 @@ void RegisterInfoEmitter::runEnums(raw_ostream &OS, CodeGenTarget &Target,
187
182
if (!Namespace.empty ())
188
183
OS << " namespace " << Namespace << " {\n " ;
189
184
OS << " enum RegisterPressureSets {\n " ;
190
- unsigned NumSets = Bank .getNumRegPressureSets ();
185
+ unsigned NumSets = RegBank .getNumRegPressureSets ();
191
186
for (unsigned i = 0 ; i < NumSets; ++i) {
192
- const RegUnitSet &RegUnits = Bank .getRegSetAt (i);
187
+ const RegUnitSet &RegUnits = RegBank .getRegSetAt (i);
193
188
OS << " " << RegUnits.Name << " = " << i << " ,\n " ;
194
189
}
195
190
OS << " };\n " ;
@@ -204,8 +199,7 @@ void RegisterInfoEmitter::runEnums(raw_ostream &OS, CodeGenTarget &Target,
204
199
static void printInt (raw_ostream &OS, int Val) { OS << Val; }
205
200
206
201
void RegisterInfoEmitter::EmitRegUnitPressure (raw_ostream &OS,
207
- const CodeGenRegBank &RegBank,
208
- const std::string &ClassName) {
202
+ StringRef ClassName) {
209
203
unsigned NumRCs = RegBank.getRegClasses ().size ();
210
204
unsigned NumSets = RegBank.getNumRegPressureSets ();
211
205
@@ -683,10 +677,9 @@ static bool combine(const CodeGenSubRegIndex *Idx,
683
677
}
684
678
685
679
void RegisterInfoEmitter::emitComposeSubRegIndices (raw_ostream &OS,
686
- CodeGenRegBank &RegBank,
687
- const std::string &ClName) {
680
+ StringRef ClassName) {
688
681
const auto &SubRegIndices = RegBank.getSubRegIndices ();
689
- OS << " unsigned " << ClName
682
+ OS << " unsigned " << ClassName
690
683
<< " ::composeSubRegIndicesImpl(unsigned IdxA, unsigned IdxB) const {\n " ;
691
684
692
685
// Many sub-register indexes are composition-compatible, meaning that
@@ -751,8 +744,8 @@ void RegisterInfoEmitter::emitComposeSubRegIndices(raw_ostream &OS,
751
744
OS << " }\n\n " ;
752
745
}
753
746
754
- void RegisterInfoEmitter::emitComposeSubRegIndexLaneMask (
755
- raw_ostream &OS, CodeGenRegBank &RegBank, const std::string &ClName ) {
747
+ void RegisterInfoEmitter::emitComposeSubRegIndexLaneMask (raw_ostream &OS,
748
+ StringRef ClassName ) {
756
749
// See the comments in computeSubRegLaneMasks() for our goal here.
757
750
const auto &SubRegIndices = RegBank.getSubRegIndices ();
758
751
@@ -815,7 +808,7 @@ void RegisterInfoEmitter::emitComposeSubRegIndexLaneMask(
815
808
}
816
809
OS << " };\n\n " ;
817
810
818
- OS << " LaneBitmask " << ClName
811
+ OS << " LaneBitmask " << ClassName
819
812
<< " ::composeSubRegIndexLaneMaskImpl(unsigned IdxA, LaneBitmask LaneMask)"
820
813
" const {\n "
821
814
" --IdxA; assert(IdxA < "
@@ -836,7 +829,7 @@ void RegisterInfoEmitter::emitComposeSubRegIndexLaneMask(
836
829
" return Result;\n "
837
830
" }\n\n " ;
838
831
839
- OS << " LaneBitmask " << ClName
832
+ OS << " LaneBitmask " << ClassName
840
833
<< " ::reverseComposeSubRegIndexLaneMaskImpl(unsigned IdxA, "
841
834
" LaneBitmask LaneMask) const {\n "
842
835
" LaneMask &= getSubRegIndexLaneMask(IdxA);\n "
@@ -861,8 +854,7 @@ void RegisterInfoEmitter::emitComposeSubRegIndexLaneMask(
861
854
//
862
855
// runMCDesc - Print out MC register descriptions.
863
856
//
864
- void RegisterInfoEmitter::runMCDesc (raw_ostream &OS, CodeGenTarget &Target,
865
- CodeGenRegBank &RegBank) {
857
+ void RegisterInfoEmitter::runMCDesc (raw_ostream &OS) {
866
858
emitSourceFileHeader (" MC Register Information" , OS);
867
859
868
860
OS << " \n #ifdef GET_REGINFO_MC_DESC\n " ;
@@ -1025,7 +1017,7 @@ void RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
1025
1017
<< " const uint8_t " << Name << " Bits[] = {\n " ;
1026
1018
BitVectorEmitter BVE;
1027
1019
for (const Record *Reg : Order) {
1028
- BVE.add (Target. getRegBank () .getReg (Reg)->EnumValue );
1020
+ BVE.add (RegBank .getReg (Reg)->EnumValue );
1029
1021
}
1030
1022
BVE.print (OS);
1031
1023
OS << " \n };\n\n " ;
@@ -1100,9 +1092,7 @@ void RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
1100
1092
OS << " #endif // GET_REGINFO_MC_DESC\n\n " ;
1101
1093
}
1102
1094
1103
- void RegisterInfoEmitter::runTargetHeader (raw_ostream &OS,
1104
- CodeGenTarget &Target,
1105
- CodeGenRegBank &RegBank) {
1095
+ void RegisterInfoEmitter::runTargetHeader (raw_ostream &OS) {
1106
1096
emitSourceFileHeader (" Register Information Header Fragment" , OS);
1107
1097
1108
1098
OS << " \n #ifdef GET_REGINFO_HEADER\n " ;
@@ -1187,8 +1177,7 @@ void RegisterInfoEmitter::runTargetHeader(raw_ostream &OS,
1187
1177
//
1188
1178
// runTargetDesc - Output the target register and register file descriptions.
1189
1179
//
1190
- void RegisterInfoEmitter::runTargetDesc (raw_ostream &OS, CodeGenTarget &Target,
1191
- CodeGenRegBank &RegBank) {
1180
+ void RegisterInfoEmitter::runTargetDesc (raw_ostream &OS) {
1192
1181
emitSourceFileHeader (" Target Register and Register Classes Information" , OS);
1193
1182
1194
1183
OS << " \n #ifdef GET_REGINFO_TARGET_DESC\n " ;
@@ -1491,8 +1480,8 @@ void RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, CodeGenTarget &Target,
1491
1480
std::distance (SubRegIndices.begin (), SubRegIndices.end ());
1492
1481
1493
1482
if (!SubRegIndices.empty ()) {
1494
- emitComposeSubRegIndices (OS, RegBank, ClassName);
1495
- emitComposeSubRegIndexLaneMask (OS, RegBank, ClassName);
1483
+ emitComposeSubRegIndices (OS, ClassName);
1484
+ emitComposeSubRegIndexLaneMask (OS, ClassName);
1496
1485
}
1497
1486
1498
1487
if (!SubRegIndices.empty ()) {
@@ -1574,7 +1563,7 @@ void RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, CodeGenTarget &Target,
1574
1563
<< " return TV ? getRegClass(TV - 1) : nullptr;\n }\n\n " ;
1575
1564
}
1576
1565
1577
- EmitRegUnitPressure (OS, RegBank, ClassName);
1566
+ EmitRegUnitPressure (OS, ClassName);
1578
1567
1579
1568
// Emit register base class mapper
1580
1569
if (!RegisterClasses.empty ()) {
@@ -1816,25 +1805,23 @@ void RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, CodeGenTarget &Target,
1816
1805
}
1817
1806
1818
1807
void RegisterInfoEmitter::run (raw_ostream &OS) {
1819
- CodeGenRegBank &RegBank = Target.getRegBank ();
1820
1808
Records.startTimer (" Print enums" );
1821
- runEnums (OS, Target, RegBank );
1809
+ runEnums (OS);
1822
1810
1823
1811
Records.startTimer (" Print MC registers" );
1824
- runMCDesc (OS, Target, RegBank );
1812
+ runMCDesc (OS);
1825
1813
1826
1814
Records.startTimer (" Print header fragment" );
1827
- runTargetHeader (OS, Target, RegBank );
1815
+ runTargetHeader (OS);
1828
1816
1829
1817
Records.startTimer (" Print target registers" );
1830
- runTargetDesc (OS, Target, RegBank );
1818
+ runTargetDesc (OS);
1831
1819
1832
1820
if (RegisterInfoDebug)
1833
1821
debugDump (errs ());
1834
1822
}
1835
1823
1836
1824
void RegisterInfoEmitter::debugDump (raw_ostream &OS) {
1837
- CodeGenRegBank &RegBank = Target.getRegBank ();
1838
1825
const CodeGenHwModes &CGH = Target.getHwModes ();
1839
1826
unsigned NumModes = CGH.getNumModeIds ();
1840
1827
auto getModeName = [CGH](unsigned M) -> StringRef {
0 commit comments