diff options
| author | Andrew Trick <atrick@apple.com> | 2012-04-11 18:16:28 +0000 |
|---|---|---|
| committer | Andrew Trick <atrick@apple.com> | 2012-04-11 18:16:28 +0000 |
| commit | 972541503fb8be9a928061d8ee1fefd86ddb839e (patch) | |
| tree | cfeed148b213c2d371994bfa3c47b3b5e6ffd7f4 /llvm/utils/TableGen/RegisterInfoEmitter.cpp | |
| parent | 408403c4b59a667806d8537d52a161baf8fcf1b4 (diff) | |
| download | bcm5719-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.cpp | 28 |
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(" |

