mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-05-25 10:38:44 +00:00
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:
parent
9c2d178707
commit
138fe781d2
@ -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.
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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(),
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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("
|
||||||
|
Loading…
x
Reference in New Issue
Block a user