30
30
#include " llvm/Support/raw_ostream.h"
31
31
#include " llvm/TableGen/Error.h"
32
32
#include " llvm/TableGen/Record.h"
33
+ #include " llvm/TableGen/TGTimer.h"
33
34
#include < algorithm>
34
35
#include < cassert>
35
36
#include < cstdint>
@@ -1130,7 +1131,7 @@ CodeGenRegisterCategory::CodeGenRegisterCategory(CodeGenRegBank &RegBank,
1130
1131
1131
1132
CodeGenRegBank::CodeGenRegBank (const RecordKeeper &Records,
1132
1133
const CodeGenHwModes &Modes)
1133
- : CGH(Modes) {
1134
+ :Records(Records), CGH(Modes) {
1134
1135
// Configure register Sets to understand register classes and tuples.
1135
1136
Sets.addFieldExpander (" RegisterClass" ," MemberList" );
1136
1137
Sets.addFieldExpander (" CalleeSavedRegs" ," SaveList" );
@@ -2202,7 +2203,9 @@ void CodeGenRegBank::computeDerivedInfo() {
2202
2203
2203
2204
// Compute a weight for each register unit created during getSubRegs.
2204
2205
// This may create adopted register units (with unit # >= NumNativeRegUnits).
2206
+ Records.getTimer ().startTimer (" Compute reg unit weights" );
2205
2207
computeRegUnitWeights ();
2208
+ Records.getTimer ().stopTimer ();
2206
2209
2207
2210
// Compute a unique set of RegUnitSets. One for each RegClass and inferred
2208
2211
// supersets for the union of overlapping sets.
@@ -2446,6 +2449,8 @@ void CodeGenRegBank::computeInferredRegisterClasses() {
2446
2449
// and assigned EnumValues yet. That means getSubClasses(),
2447
2450
// getSuperClasses(), and hasSubClass() functions are defunct.
2448
2451
2452
+ Records.getTimer ().startTimer (" Compute inferred register classes" );
2453
+
2449
2454
// Use one-before-the-end so it doesn't move forward when new elements are
2450
2455
// added.
2451
2456
auto FirstNewRC =std::prev (RegClasses.end ());
@@ -2481,6 +2486,8 @@ void CodeGenRegBank::computeInferredRegisterClasses() {
2481
2486
}
2482
2487
}
2483
2488
2489
+ Records.getTimer ().startTimer (" Extend super-register classes" );
2490
+
2484
2491
// Compute the transitive closure for super-register classes.
2485
2492
//
2486
2493
// By iterating over sub-register indices in topological order, we only ever
@@ -2491,6 +2498,8 @@ void CodeGenRegBank::computeInferredRegisterClasses() {
2491
2498
for (CodeGenRegisterClass &SubRC : RegClasses)
2492
2499
SubRC.extendSuperRegClasses (SubIdx);
2493
2500
}
2501
+
2502
+ Records.getTimer ().stopTimer ();
2494
2503
}
2495
2504
2496
2505
// / getRegisterClassForRegister - Find the register class that contains the