Skip to content

Commit 3be44e2

Browse files
authored
[TableGen] Add some -time-phases support in CodeGenRegisters (#149309)
1 parent d46de86 commit 3be44e2

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

llvm/utils/TableGen/Common/CodeGenRegisters.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "llvm/Support/raw_ostream.h"
3131
#include "llvm/TableGen/Error.h"
3232
#include "llvm/TableGen/Record.h"
33+
#include "llvm/TableGen/TGTimer.h"
3334
#include <algorithm>
3435
#include <cassert>
3536
#include <cstdint>
@@ -1130,7 +1131,7 @@ CodeGenRegisterCategory::CodeGenRegisterCategory(CodeGenRegBank &RegBank,
11301131

11311132
CodeGenRegBank::CodeGenRegBank(const RecordKeeper &Records,
11321133
const CodeGenHwModes &Modes)
1133-
: CGH(Modes) {
1134+
: Records(Records), CGH(Modes) {
11341135
// Configure register Sets to understand register classes and tuples.
11351136
Sets.addFieldExpander("RegisterClass", "MemberList");
11361137
Sets.addFieldExpander("CalleeSavedRegs", "SaveList");
@@ -2202,7 +2203,9 @@ void CodeGenRegBank::computeDerivedInfo() {
22022203

22032204
// Compute a weight for each register unit created during getSubRegs.
22042205
// This may create adopted register units (with unit # >= NumNativeRegUnits).
2206+
Records.getTimer().startTimer("Compute reg unit weights");
22052207
computeRegUnitWeights();
2208+
Records.getTimer().stopTimer();
22062209

22072210
// Compute a unique set of RegUnitSets. One for each RegClass and inferred
22082211
// supersets for the union of overlapping sets.
@@ -2446,6 +2449,8 @@ void CodeGenRegBank::computeInferredRegisterClasses() {
24462449
// and assigned EnumValues yet. That means getSubClasses(),
24472450
// getSuperClasses(), and hasSubClass() functions are defunct.
24482451

2452+
Records.getTimer().startTimer("Compute inferred register classes");
2453+
24492454
// Use one-before-the-end so it doesn't move forward when new elements are
24502455
// added.
24512456
auto FirstNewRC = std::prev(RegClasses.end());
@@ -2481,6 +2486,8 @@ void CodeGenRegBank::computeInferredRegisterClasses() {
24812486
}
24822487
}
24832488

2489+
Records.getTimer().startTimer("Extend super-register classes");
2490+
24842491
// Compute the transitive closure for super-register classes.
24852492
//
24862493
// By iterating over sub-register indices in topological order, we only ever
@@ -2491,6 +2498,8 @@ void CodeGenRegBank::computeInferredRegisterClasses() {
24912498
for (CodeGenRegisterClass &SubRC : RegClasses)
24922499
SubRC.extendSuperRegClasses(SubIdx);
24932500
}
2501+
2502+
Records.getTimer().stopTimer();
24942503
}
24952504

24962505
/// getRegisterClassForRegister - Find the register class that contains the

llvm/utils/TableGen/Common/CodeGenRegisters.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,8 @@ typedef SmallVector<unsigned, 16> TopoSigId;
607607
// CodeGenRegBank - Represent a target's registers and the relations between
608608
// them.
609609
class CodeGenRegBank {
610+
const RecordKeeper &Records;
611+
610612
SetTheory Sets;
611613

612614
const CodeGenHwModes &CGH;

0 commit comments

Comments
 (0)