Have getRegPressureSetLimit take a MachineFunction so that a

we can inspect the subtarget and function when computing values.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231951 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eric Christopher 2015-03-11 18:34:58 +00:00
parent 9c2d178707
commit 138fe781d2
5 changed files with 11 additions and 7 deletions

View File

@ -656,7 +656,8 @@ public:
/// Get the register unit pressure limit for this dimension. /// Get the register unit pressure limit for this dimension.
/// This limit must be adjusted dynamically for reserved registers. /// This limit must be adjusted dynamically for reserved registers.
virtual unsigned getRegPressureSetLimit(unsigned Idx) const = 0; virtual unsigned getRegPressureSetLimit(const MachineFunction &MF,
unsigned Idx) const = 0;
/// Get the dimensions of register pressure impacted by this register class. /// Get the dimensions of register pressure impacted by this register class.
/// Returns a -1 terminated array of pressure set IDs. /// Returns a -1 terminated array of pressure set IDs.

View File

@ -176,6 +176,6 @@ unsigned RegisterClassInfo::computePSetLimit(unsigned Idx) const {
} }
compute(RC); compute(RC);
unsigned NReserved = RC->getNumRegs() - getNumAllocatableRegs(RC); unsigned NReserved = RC->getNumRegs() - getNumAllocatableRegs(RC);
return TRI->getRegPressureSetLimit(Idx) return TRI->getRegPressureSetLimit(*MF, Idx) -
- TRI->getRegClassWeight(RC).RegWeight * NReserved; TRI->getRegClassWeight(RC).RegWeight * NReserved;
} }

View File

@ -66,7 +66,8 @@ BitVector SIRegisterInfo::getReservedRegs(const MachineFunction &MF) const {
return Reserved; return Reserved;
} }
unsigned SIRegisterInfo::getRegPressureSetLimit(unsigned Idx) const { unsigned SIRegisterInfo::getRegPressureSetLimit(const MachineFunction &MF,
unsigned Idx) const {
// FIXME: We should adjust the max number of waves based on LDS size. // FIXME: We should adjust the max number of waves based on LDS size.
unsigned SGPRLimit = getNumSGPRsAllowed(ST.getGeneration(), unsigned SGPRLimit = getNumSGPRsAllowed(ST.getGeneration(),

View File

@ -28,7 +28,8 @@ struct SIRegisterInfo : public AMDGPURegisterInfo {
BitVector getReservedRegs(const MachineFunction &MF) const override; BitVector getReservedRegs(const MachineFunction &MF) const override;
unsigned getRegPressureSetLimit(unsigned Idx) const override; unsigned getRegPressureSetLimit(const MachineFunction &MF,
unsigned Idx) const override;
bool requiresRegisterScavenging(const MachineFunction &Fn) const override; bool requiresRegisterScavenging(const MachineFunction &Fn) const override;

View File

@ -247,7 +247,7 @@ EmitRegUnitPressure(raw_ostream &OS, const CodeGenRegBank &RegBank,
OS << "// Get the register unit pressure limit for this dimension.\n" OS << "// Get the register unit pressure limit for this dimension.\n"
<< "// This limit must be adjusted dynamically for reserved registers.\n" << "// This limit must be adjusted dynamically for reserved registers.\n"
<< "unsigned " << ClassName << "::\n" << "unsigned " << ClassName << "::\n"
<< "getRegPressureSetLimit(unsigned Idx) const {\n" << "getRegPressureSetLimit(const MachineFunction &MF, unsigned Idx) const {\n"
<< " static const " << getMinimalTypeForRange(MaxRegUnitWeight) << " static const " << getMinimalTypeForRange(MaxRegUnitWeight)
<< " PressureLimitTable[] = {\n"; << " PressureLimitTable[] = {\n";
for (unsigned i = 0; i < NumSets; ++i ) { for (unsigned i = 0; i < NumSets; ++i ) {
@ -1088,7 +1088,8 @@ RegisterInfoEmitter::runTargetHeader(raw_ostream &OS, CodeGenTarget &Target,
<< " unsigned getRegUnitWeight(unsigned RegUnit) const override;\n" << " unsigned getRegUnitWeight(unsigned RegUnit) const override;\n"
<< " unsigned getNumRegPressureSets() const override;\n" << " unsigned getNumRegPressureSets() const override;\n"
<< " const char *getRegPressureSetName(unsigned Idx) const override;\n" << " const char *getRegPressureSetName(unsigned Idx) const override;\n"
<< " unsigned getRegPressureSetLimit(unsigned Idx) const override;\n" << " unsigned getRegPressureSetLimit(const MachineFunction &MF, unsigned "
"Idx) const override;\n"
<< " const int *getRegClassPressureSets(" << " const int *getRegClassPressureSets("
<< "const TargetRegisterClass *RC) const override;\n" << "const TargetRegisterClass *RC) const override;\n"
<< " const int *getRegUnitPressureSets(" << " const int *getRegUnitPressureSets("