Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion llvm/utils/TableGen/Common/CodeGenRegisters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include "llvm/Support/raw_ostream.h"
#include "llvm/TableGen/Error.h"
#include "llvm/TableGen/Record.h"
#include "llvm/TableGen/TGTimer.h"
#include <algorithm>
#include <cassert>
#include <cstdint>
Expand Down Expand Up @@ -1130,7 +1131,7 @@ CodeGenRegisterCategory::CodeGenRegisterCategory(CodeGenRegBank &RegBank,

CodeGenRegBank::CodeGenRegBank(const RecordKeeper &Records,
const CodeGenHwModes &Modes)
: CGH(Modes) {
: Records(Records), CGH(Modes) {
// Configure register Sets to understand register classes and tuples.
Sets.addFieldExpander("RegisterClass", "MemberList");
Sets.addFieldExpander("CalleeSavedRegs", "SaveList");
Expand Down Expand Up @@ -2202,7 +2203,9 @@ void CodeGenRegBank::computeDerivedInfo() {

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

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

Records.getTimer().startTimer("Compute inferred register classes");

// Use one-before-the-end so it doesn't move forward when new elements are
// added.
auto FirstNewRC = std::prev(RegClasses.end());
Expand Down Expand Up @@ -2481,6 +2486,8 @@ void CodeGenRegBank::computeInferredRegisterClasses() {
}
}

Records.getTimer().startTimer("Extend super-register classes");

// Compute the transitive closure for super-register classes.
//
// By iterating over sub-register indices in topological order, we only ever
Expand All @@ -2491,6 +2498,8 @@ void CodeGenRegBank::computeInferredRegisterClasses() {
for (CodeGenRegisterClass &SubRC : RegClasses)
SubRC.extendSuperRegClasses(SubIdx);
}

Records.getTimer().stopTimer();
}

/// getRegisterClassForRegister - Find the register class that contains the
Expand Down
2 changes: 2 additions & 0 deletions llvm/utils/TableGen/Common/CodeGenRegisters.h
Original file line number Diff line number Diff line change
Expand Up @@ -607,6 +607,8 @@ typedef SmallVector<unsigned, 16> TopoSigId;
// CodeGenRegBank - Represent a target's registers and the relations between
// them.
class CodeGenRegBank {
const RecordKeeper &Records;

SetTheory Sets;

const CodeGenHwModes &CGH;
Expand Down