summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/RegisterInfoEmitter.cpp
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2012-04-11 18:16:28 +0000
committerAndrew Trick <atrick@apple.com>2012-04-11 18:16:28 +0000
commit972541503fb8be9a928061d8ee1fefd86ddb839e (patch)
treecfeed148b213c2d371994bfa3c47b3b5e6ffd7f4 /llvm/utils/TableGen/RegisterInfoEmitter.cpp
parent408403c4b59a667806d8537d52a161baf8fcf1b4 (diff)
downloadbcm5719-llvm-972541503fb8be9a928061d8ee1fefd86ddb839e.tar.gz
bcm5719-llvm-972541503fb8be9a928061d8ee1fefd86ddb839e.zip
TableGen's regpressure: emit per-registerclass weight limits.
llvm-svn: 154518
Diffstat (limited to 'llvm/utils/TableGen/RegisterInfoEmitter.cpp')
-rw-r--r--llvm/utils/TableGen/RegisterInfoEmitter.cpp28
1 files changed, 14 insertions, 14 deletions
diff --git a/llvm/utils/TableGen/RegisterInfoEmitter.cpp b/llvm/utils/TableGen/RegisterInfoEmitter.cpp
index 8085955baf1..a2478a7330e 100644
--- a/llvm/utils/TableGen/RegisterInfoEmitter.cpp
+++ b/llvm/utils/TableGen/RegisterInfoEmitter.cpp
@@ -125,19 +125,23 @@ EmitRegUnitPressure(raw_ostream &OS, const CodeGenRegBank &RegBank,
unsigned NumSets = RegBank.getNumRegPressureSets();
OS << "/// Get the weight in units of pressure for this register class.\n"
- << "unsigned " << ClassName << "::\n"
+ << "const RegClassWeight &" << ClassName << "::\n"
<< "getRegClassWeight(const TargetRegisterClass *RC) const {\n"
- << " static const unsigned RCWeightTable[] = {\n";
+ << " static const RegClassWeight RCWeightTable[] = {\n";
for (unsigned i = 0, e = NumRCs; i != e; ++i) {
const CodeGenRegisterClass &RC = *RegBank.getRegClasses()[i];
const CodeGenRegister::Set &Regs = RC.getMembers();
if (Regs.empty())
- OS << " 0";
- else
- OS << " " << (*Regs.begin())->getWeight(RegBank);
- OS << ", \t// " << RC.getName() << "\n";
+ OS << " {0, 0";
+ else {
+ std::vector<unsigned> RegUnits;
+ RC.buildRegUnitSet(RegUnits);
+ OS << " {" << (*Regs.begin())->getWeight(RegBank)
+ << ", " << RegBank.getRegUnitSetWeight(RegUnits);
+ }
+ OS << "}, \t// " << RC.getName() << "\n";
}
- OS << " 0 };\n"
+ OS << " {0, 0} };\n"
<< " return RCWeightTable[RC->getID()];\n"
<< "}\n\n";
@@ -153,12 +157,7 @@ EmitRegUnitPressure(raw_ostream &OS, const CodeGenRegBank &RegBank,
<< " static const unsigned PressureLimitTable[] = {\n";
for (unsigned i = 0; i < NumSets; ++i ) {
const RegUnitSet &RegUnits = RegBank.getRegPressureSet(i);
- unsigned Weight = 0;
- for (RegUnitSet::iterator
- I = RegUnits.Units.begin(), E = RegUnits.Units.end(); I != E; ++I) {
- Weight += RegBank.getRegUnitWeight(*I);
- }
- OS << " " << Weight
+ OS << " " << RegBank.getRegUnitSetWeight(RegUnits.Units)
<< ", \t// " << i << ": " << RegBank.getRegPressureSet(i).Name << "\n";
}
OS << " 0 };\n"
@@ -668,7 +667,8 @@ RegisterInfoEmitter::runTargetHeader(raw_ostream &OS, CodeGenTarget &Target,
<< " const TargetRegisterClass *getMatchingSuperRegClass("
"const TargetRegisterClass*, const TargetRegisterClass*, "
"unsigned) const;\n"
- << " unsigned getRegClassWeight(const TargetRegisterClass *RC) const;\n"
+ << " const RegClassWeight &getRegClassWeight("
+ << "const TargetRegisterClass *RC) const;\n"
<< " unsigned getNumRegPressureSets() const;\n"
<< " unsigned getRegPressureSetLimit(unsigned Idx) const;\n"
<< " const int *getRegClassPressureSets("
OpenPOWER on IntegriCloud