AMDGPU: Also track whether SGPRs were spilled

llvm-svn: 252145
This commit is contained in:
Matt Arsenault 2015-11-05 05:27:10 +00:00
parent d41c0dbff0
commit 5b22dfa65d
3 changed files with 20 additions and 2 deletions

View File

@ -484,6 +484,8 @@ void SIInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
int Opcode = -1; int Opcode = -1;
if (RI.isSGPRClass(RC)) { if (RI.isSGPRClass(RC)) {
MFI->setHasSpilledSGPRs();
// We are only allowed to create one new instruction when spilling // We are only allowed to create one new instruction when spilling
// registers, so we need to use pseudo instruction for spilling // registers, so we need to use pseudo instruction for spilling
// SGPRs. // SGPRs.

View File

@ -29,6 +29,7 @@ void SIMachineFunctionInfo::anchor() {}
SIMachineFunctionInfo::SIMachineFunctionInfo(const MachineFunction &MF) SIMachineFunctionInfo::SIMachineFunctionInfo(const MachineFunction &MF)
: AMDGPUMachineFunction(MF), : AMDGPUMachineFunction(MF),
TIDReg(AMDGPU::NoRegister), TIDReg(AMDGPU::NoRegister),
HasSpilledSGPRs(false),
HasSpilledVGPRs(false), HasSpilledVGPRs(false),
PSInputAddr(0), PSInputAddr(0),
NumUserSGPRs(0), NumUserSGPRs(0),

View File

@ -29,6 +29,7 @@ class SIMachineFunctionInfo : public AMDGPUMachineFunction {
void anchor() override; void anchor() override;
unsigned TIDReg; unsigned TIDReg;
bool HasSpilledSGPRs;
bool HasSpilledVGPRs; bool HasSpilledVGPRs;
public: public:
@ -54,8 +55,22 @@ public:
bool hasCalculatedTID() const { return TIDReg != AMDGPU::NoRegister; }; bool hasCalculatedTID() const { return TIDReg != AMDGPU::NoRegister; };
unsigned getTIDReg() const { return TIDReg; }; unsigned getTIDReg() const { return TIDReg; };
void setTIDReg(unsigned Reg) { TIDReg = Reg; } void setTIDReg(unsigned Reg) { TIDReg = Reg; }
bool hasSpilledVGPRs() const { return HasSpilledVGPRs; }
void setHasSpilledVGPRs(bool Spill = true) { HasSpilledVGPRs = Spill; } bool hasSpilledSGPRs() const {
return HasSpilledSGPRs;
}
void setHasSpilledSGPRs(bool Spill = true) {
HasSpilledSGPRs = Spill;
}
bool hasSpilledVGPRs() const {
return HasSpilledVGPRs;
}
void setHasSpilledVGPRs(bool Spill = true) {
HasSpilledVGPRs = Spill;
}
unsigned getMaximumWorkGroupSize(const MachineFunction &MF) const; unsigned getMaximumWorkGroupSize(const MachineFunction &MF) const;
}; };