Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp
Show First 20 Lines • Show All 952 Lines • ▼ Show 20 Lines | static unsigned getNumSubRegsForSpillOp(unsigned Op) { | ||||
case AMDGPU::SI_SPILL_S512_RESTORE: | case AMDGPU::SI_SPILL_S512_RESTORE: | ||||
case AMDGPU::SI_SPILL_V512_SAVE: | case AMDGPU::SI_SPILL_V512_SAVE: | ||||
case AMDGPU::SI_SPILL_V512_RESTORE: | case AMDGPU::SI_SPILL_V512_RESTORE: | ||||
case AMDGPU::SI_SPILL_A512_SAVE: | case AMDGPU::SI_SPILL_A512_SAVE: | ||||
case AMDGPU::SI_SPILL_A512_RESTORE: | case AMDGPU::SI_SPILL_A512_RESTORE: | ||||
case AMDGPU::SI_SPILL_AV512_SAVE: | case AMDGPU::SI_SPILL_AV512_SAVE: | ||||
case AMDGPU::SI_SPILL_AV512_RESTORE: | case AMDGPU::SI_SPILL_AV512_RESTORE: | ||||
return 16; | return 16; | ||||
case AMDGPU::SI_SPILL_S384_SAVE: | |||||
case AMDGPU::SI_SPILL_S384_RESTORE: | |||||
case AMDGPU::SI_SPILL_V384_SAVE: | |||||
case AMDGPU::SI_SPILL_V384_RESTORE: | |||||
case AMDGPU::SI_SPILL_A384_SAVE: | |||||
case AMDGPU::SI_SPILL_A384_RESTORE: | |||||
case AMDGPU::SI_SPILL_AV384_SAVE: | |||||
case AMDGPU::SI_SPILL_AV384_RESTORE: | |||||
return 12; | |||||
case AMDGPU::SI_SPILL_S352_SAVE: | |||||
case AMDGPU::SI_SPILL_S352_RESTORE: | |||||
case AMDGPU::SI_SPILL_V352_SAVE: | |||||
case AMDGPU::SI_SPILL_V352_RESTORE: | |||||
case AMDGPU::SI_SPILL_A352_SAVE: | |||||
case AMDGPU::SI_SPILL_A352_RESTORE: | |||||
case AMDGPU::SI_SPILL_AV352_SAVE: | |||||
case AMDGPU::SI_SPILL_AV352_RESTORE: | |||||
return 11; | |||||
case AMDGPU::SI_SPILL_S320_SAVE: | |||||
case AMDGPU::SI_SPILL_S320_RESTORE: | |||||
case AMDGPU::SI_SPILL_V320_SAVE: | |||||
case AMDGPU::SI_SPILL_V320_RESTORE: | |||||
case AMDGPU::SI_SPILL_A320_SAVE: | |||||
case AMDGPU::SI_SPILL_A320_RESTORE: | |||||
case AMDGPU::SI_SPILL_AV320_SAVE: | |||||
case AMDGPU::SI_SPILL_AV320_RESTORE: | |||||
return 10; | |||||
case AMDGPU::SI_SPILL_S288_SAVE: | |||||
case AMDGPU::SI_SPILL_S288_RESTORE: | |||||
case AMDGPU::SI_SPILL_V288_SAVE: | |||||
case AMDGPU::SI_SPILL_V288_RESTORE: | |||||
case AMDGPU::SI_SPILL_A288_SAVE: | |||||
case AMDGPU::SI_SPILL_A288_RESTORE: | |||||
case AMDGPU::SI_SPILL_AV288_SAVE: | |||||
case AMDGPU::SI_SPILL_AV288_RESTORE: | |||||
return 9; | |||||
case AMDGPU::SI_SPILL_S256_SAVE: | case AMDGPU::SI_SPILL_S256_SAVE: | ||||
case AMDGPU::SI_SPILL_S256_RESTORE: | case AMDGPU::SI_SPILL_S256_RESTORE: | ||||
case AMDGPU::SI_SPILL_V256_SAVE: | case AMDGPU::SI_SPILL_V256_SAVE: | ||||
case AMDGPU::SI_SPILL_V256_RESTORE: | case AMDGPU::SI_SPILL_V256_RESTORE: | ||||
case AMDGPU::SI_SPILL_A256_SAVE: | case AMDGPU::SI_SPILL_A256_SAVE: | ||||
case AMDGPU::SI_SPILL_A256_RESTORE: | case AMDGPU::SI_SPILL_A256_RESTORE: | ||||
case AMDGPU::SI_SPILL_AV256_SAVE: | case AMDGPU::SI_SPILL_AV256_SAVE: | ||||
case AMDGPU::SI_SPILL_AV256_RESTORE: | case AMDGPU::SI_SPILL_AV256_RESTORE: | ||||
▲ Show 20 Lines • Show All 962 Lines • ▼ Show 20 Lines | |||||
/// a VGPR and the stack slot can be safely eliminated when all other users are | /// a VGPR and the stack slot can be safely eliminated when all other users are | ||||
/// handled. | /// handled. | ||||
bool SIRegisterInfo::eliminateSGPRToVGPRSpillFrameIndex( | bool SIRegisterInfo::eliminateSGPRToVGPRSpillFrameIndex( | ||||
MachineBasicBlock::iterator MI, int FI, RegScavenger *RS, | MachineBasicBlock::iterator MI, int FI, RegScavenger *RS, | ||||
SlotIndexes *Indexes, LiveIntervals *LIS) const { | SlotIndexes *Indexes, LiveIntervals *LIS) const { | ||||
switch (MI->getOpcode()) { | switch (MI->getOpcode()) { | ||||
case AMDGPU::SI_SPILL_S1024_SAVE: | case AMDGPU::SI_SPILL_S1024_SAVE: | ||||
case AMDGPU::SI_SPILL_S512_SAVE: | case AMDGPU::SI_SPILL_S512_SAVE: | ||||
case AMDGPU::SI_SPILL_S384_SAVE: | |||||
case AMDGPU::SI_SPILL_S352_SAVE: | |||||
case AMDGPU::SI_SPILL_S320_SAVE: | |||||
case AMDGPU::SI_SPILL_S288_SAVE: | |||||
case AMDGPU::SI_SPILL_S256_SAVE: | case AMDGPU::SI_SPILL_S256_SAVE: | ||||
case AMDGPU::SI_SPILL_S224_SAVE: | case AMDGPU::SI_SPILL_S224_SAVE: | ||||
case AMDGPU::SI_SPILL_S192_SAVE: | case AMDGPU::SI_SPILL_S192_SAVE: | ||||
case AMDGPU::SI_SPILL_S160_SAVE: | case AMDGPU::SI_SPILL_S160_SAVE: | ||||
case AMDGPU::SI_SPILL_S128_SAVE: | case AMDGPU::SI_SPILL_S128_SAVE: | ||||
case AMDGPU::SI_SPILL_S96_SAVE: | case AMDGPU::SI_SPILL_S96_SAVE: | ||||
case AMDGPU::SI_SPILL_S64_SAVE: | case AMDGPU::SI_SPILL_S64_SAVE: | ||||
case AMDGPU::SI_SPILL_S32_SAVE: | case AMDGPU::SI_SPILL_S32_SAVE: | ||||
return spillSGPR(MI, FI, RS, Indexes, LIS, true); | return spillSGPR(MI, FI, RS, Indexes, LIS, true); | ||||
case AMDGPU::SI_SPILL_S1024_RESTORE: | case AMDGPU::SI_SPILL_S1024_RESTORE: | ||||
case AMDGPU::SI_SPILL_S512_RESTORE: | case AMDGPU::SI_SPILL_S512_RESTORE: | ||||
case AMDGPU::SI_SPILL_S384_RESTORE: | |||||
case AMDGPU::SI_SPILL_S352_RESTORE: | |||||
case AMDGPU::SI_SPILL_S320_RESTORE: | |||||
case AMDGPU::SI_SPILL_S288_RESTORE: | |||||
case AMDGPU::SI_SPILL_S256_RESTORE: | case AMDGPU::SI_SPILL_S256_RESTORE: | ||||
case AMDGPU::SI_SPILL_S224_RESTORE: | case AMDGPU::SI_SPILL_S224_RESTORE: | ||||
case AMDGPU::SI_SPILL_S192_RESTORE: | case AMDGPU::SI_SPILL_S192_RESTORE: | ||||
case AMDGPU::SI_SPILL_S160_RESTORE: | case AMDGPU::SI_SPILL_S160_RESTORE: | ||||
case AMDGPU::SI_SPILL_S128_RESTORE: | case AMDGPU::SI_SPILL_S128_RESTORE: | ||||
case AMDGPU::SI_SPILL_S96_RESTORE: | case AMDGPU::SI_SPILL_S96_RESTORE: | ||||
case AMDGPU::SI_SPILL_S64_RESTORE: | case AMDGPU::SI_SPILL_S64_RESTORE: | ||||
case AMDGPU::SI_SPILL_S32_RESTORE: | case AMDGPU::SI_SPILL_S32_RESTORE: | ||||
Show All 21 Lines | bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI, | ||||
Register FrameReg = FrameInfo.isFixedObjectIndex(Index) && hasBasePointer(*MF) | Register FrameReg = FrameInfo.isFixedObjectIndex(Index) && hasBasePointer(*MF) | ||||
? getBaseRegister() | ? getBaseRegister() | ||||
: getFrameRegister(*MF); | : getFrameRegister(*MF); | ||||
switch (MI->getOpcode()) { | switch (MI->getOpcode()) { | ||||
// SGPR register spill | // SGPR register spill | ||||
case AMDGPU::SI_SPILL_S1024_SAVE: | case AMDGPU::SI_SPILL_S1024_SAVE: | ||||
case AMDGPU::SI_SPILL_S512_SAVE: | case AMDGPU::SI_SPILL_S512_SAVE: | ||||
case AMDGPU::SI_SPILL_S384_SAVE: | |||||
case AMDGPU::SI_SPILL_S352_SAVE: | |||||
case AMDGPU::SI_SPILL_S320_SAVE: | |||||
case AMDGPU::SI_SPILL_S288_SAVE: | |||||
case AMDGPU::SI_SPILL_S256_SAVE: | case AMDGPU::SI_SPILL_S256_SAVE: | ||||
case AMDGPU::SI_SPILL_S224_SAVE: | case AMDGPU::SI_SPILL_S224_SAVE: | ||||
case AMDGPU::SI_SPILL_S192_SAVE: | case AMDGPU::SI_SPILL_S192_SAVE: | ||||
case AMDGPU::SI_SPILL_S160_SAVE: | case AMDGPU::SI_SPILL_S160_SAVE: | ||||
case AMDGPU::SI_SPILL_S128_SAVE: | case AMDGPU::SI_SPILL_S128_SAVE: | ||||
case AMDGPU::SI_SPILL_S96_SAVE: | case AMDGPU::SI_SPILL_S96_SAVE: | ||||
case AMDGPU::SI_SPILL_S64_SAVE: | case AMDGPU::SI_SPILL_S64_SAVE: | ||||
case AMDGPU::SI_SPILL_S32_SAVE: { | case AMDGPU::SI_SPILL_S32_SAVE: { | ||||
return spillSGPR(MI, Index, RS); | return spillSGPR(MI, Index, RS); | ||||
} | } | ||||
// SGPR register restore | // SGPR register restore | ||||
case AMDGPU::SI_SPILL_S1024_RESTORE: | case AMDGPU::SI_SPILL_S1024_RESTORE: | ||||
case AMDGPU::SI_SPILL_S512_RESTORE: | case AMDGPU::SI_SPILL_S512_RESTORE: | ||||
case AMDGPU::SI_SPILL_S384_RESTORE: | |||||
case AMDGPU::SI_SPILL_S352_RESTORE: | |||||
case AMDGPU::SI_SPILL_S320_RESTORE: | |||||
case AMDGPU::SI_SPILL_S288_RESTORE: | |||||
case AMDGPU::SI_SPILL_S256_RESTORE: | case AMDGPU::SI_SPILL_S256_RESTORE: | ||||
case AMDGPU::SI_SPILL_S224_RESTORE: | case AMDGPU::SI_SPILL_S224_RESTORE: | ||||
case AMDGPU::SI_SPILL_S192_RESTORE: | case AMDGPU::SI_SPILL_S192_RESTORE: | ||||
case AMDGPU::SI_SPILL_S160_RESTORE: | case AMDGPU::SI_SPILL_S160_RESTORE: | ||||
case AMDGPU::SI_SPILL_S128_RESTORE: | case AMDGPU::SI_SPILL_S128_RESTORE: | ||||
case AMDGPU::SI_SPILL_S96_RESTORE: | case AMDGPU::SI_SPILL_S96_RESTORE: | ||||
case AMDGPU::SI_SPILL_S64_RESTORE: | case AMDGPU::SI_SPILL_S64_RESTORE: | ||||
case AMDGPU::SI_SPILL_S32_RESTORE: { | case AMDGPU::SI_SPILL_S32_RESTORE: { | ||||
return restoreSGPR(MI, Index, RS); | return restoreSGPR(MI, Index, RS); | ||||
} | } | ||||
// VGPR register spill | // VGPR register spill | ||||
case AMDGPU::SI_SPILL_V1024_SAVE: | case AMDGPU::SI_SPILL_V1024_SAVE: | ||||
case AMDGPU::SI_SPILL_V512_SAVE: | case AMDGPU::SI_SPILL_V512_SAVE: | ||||
case AMDGPU::SI_SPILL_V384_SAVE: | |||||
case AMDGPU::SI_SPILL_V352_SAVE: | |||||
case AMDGPU::SI_SPILL_V320_SAVE: | |||||
case AMDGPU::SI_SPILL_V288_SAVE: | |||||
case AMDGPU::SI_SPILL_V256_SAVE: | case AMDGPU::SI_SPILL_V256_SAVE: | ||||
case AMDGPU::SI_SPILL_V224_SAVE: | case AMDGPU::SI_SPILL_V224_SAVE: | ||||
case AMDGPU::SI_SPILL_V192_SAVE: | case AMDGPU::SI_SPILL_V192_SAVE: | ||||
case AMDGPU::SI_SPILL_V160_SAVE: | case AMDGPU::SI_SPILL_V160_SAVE: | ||||
case AMDGPU::SI_SPILL_V128_SAVE: | case AMDGPU::SI_SPILL_V128_SAVE: | ||||
case AMDGPU::SI_SPILL_V96_SAVE: | case AMDGPU::SI_SPILL_V96_SAVE: | ||||
case AMDGPU::SI_SPILL_V64_SAVE: | case AMDGPU::SI_SPILL_V64_SAVE: | ||||
case AMDGPU::SI_SPILL_V32_SAVE: | case AMDGPU::SI_SPILL_V32_SAVE: | ||||
case AMDGPU::SI_SPILL_A1024_SAVE: | case AMDGPU::SI_SPILL_A1024_SAVE: | ||||
case AMDGPU::SI_SPILL_A512_SAVE: | case AMDGPU::SI_SPILL_A512_SAVE: | ||||
case AMDGPU::SI_SPILL_A384_SAVE: | |||||
case AMDGPU::SI_SPILL_A352_SAVE: | |||||
case AMDGPU::SI_SPILL_A320_SAVE: | |||||
case AMDGPU::SI_SPILL_A288_SAVE: | |||||
case AMDGPU::SI_SPILL_A256_SAVE: | case AMDGPU::SI_SPILL_A256_SAVE: | ||||
case AMDGPU::SI_SPILL_A224_SAVE: | case AMDGPU::SI_SPILL_A224_SAVE: | ||||
case AMDGPU::SI_SPILL_A192_SAVE: | case AMDGPU::SI_SPILL_A192_SAVE: | ||||
case AMDGPU::SI_SPILL_A160_SAVE: | case AMDGPU::SI_SPILL_A160_SAVE: | ||||
case AMDGPU::SI_SPILL_A128_SAVE: | case AMDGPU::SI_SPILL_A128_SAVE: | ||||
case AMDGPU::SI_SPILL_A96_SAVE: | case AMDGPU::SI_SPILL_A96_SAVE: | ||||
case AMDGPU::SI_SPILL_A64_SAVE: | case AMDGPU::SI_SPILL_A64_SAVE: | ||||
case AMDGPU::SI_SPILL_A32_SAVE: | case AMDGPU::SI_SPILL_A32_SAVE: | ||||
case AMDGPU::SI_SPILL_AV1024_SAVE: | case AMDGPU::SI_SPILL_AV1024_SAVE: | ||||
case AMDGPU::SI_SPILL_AV512_SAVE: | case AMDGPU::SI_SPILL_AV512_SAVE: | ||||
case AMDGPU::SI_SPILL_AV384_SAVE: | |||||
case AMDGPU::SI_SPILL_AV352_SAVE: | |||||
case AMDGPU::SI_SPILL_AV320_SAVE: | |||||
case AMDGPU::SI_SPILL_AV288_SAVE: | |||||
case AMDGPU::SI_SPILL_AV256_SAVE: | case AMDGPU::SI_SPILL_AV256_SAVE: | ||||
case AMDGPU::SI_SPILL_AV224_SAVE: | case AMDGPU::SI_SPILL_AV224_SAVE: | ||||
case AMDGPU::SI_SPILL_AV192_SAVE: | case AMDGPU::SI_SPILL_AV192_SAVE: | ||||
case AMDGPU::SI_SPILL_AV160_SAVE: | case AMDGPU::SI_SPILL_AV160_SAVE: | ||||
case AMDGPU::SI_SPILL_AV128_SAVE: | case AMDGPU::SI_SPILL_AV128_SAVE: | ||||
case AMDGPU::SI_SPILL_AV96_SAVE: | case AMDGPU::SI_SPILL_AV96_SAVE: | ||||
case AMDGPU::SI_SPILL_AV64_SAVE: | case AMDGPU::SI_SPILL_AV64_SAVE: | ||||
case AMDGPU::SI_SPILL_AV32_SAVE: { | case AMDGPU::SI_SPILL_AV32_SAVE: { | ||||
Show All 16 Lines | switch (MI->getOpcode()) { | ||||
case AMDGPU::SI_SPILL_V32_RESTORE: | case AMDGPU::SI_SPILL_V32_RESTORE: | ||||
case AMDGPU::SI_SPILL_V64_RESTORE: | case AMDGPU::SI_SPILL_V64_RESTORE: | ||||
case AMDGPU::SI_SPILL_V96_RESTORE: | case AMDGPU::SI_SPILL_V96_RESTORE: | ||||
case AMDGPU::SI_SPILL_V128_RESTORE: | case AMDGPU::SI_SPILL_V128_RESTORE: | ||||
case AMDGPU::SI_SPILL_V160_RESTORE: | case AMDGPU::SI_SPILL_V160_RESTORE: | ||||
case AMDGPU::SI_SPILL_V192_RESTORE: | case AMDGPU::SI_SPILL_V192_RESTORE: | ||||
case AMDGPU::SI_SPILL_V224_RESTORE: | case AMDGPU::SI_SPILL_V224_RESTORE: | ||||
case AMDGPU::SI_SPILL_V256_RESTORE: | case AMDGPU::SI_SPILL_V256_RESTORE: | ||||
case AMDGPU::SI_SPILL_V288_RESTORE: | |||||
case AMDGPU::SI_SPILL_V320_RESTORE: | |||||
case AMDGPU::SI_SPILL_V352_RESTORE: | |||||
case AMDGPU::SI_SPILL_V384_RESTORE: | |||||
case AMDGPU::SI_SPILL_V512_RESTORE: | case AMDGPU::SI_SPILL_V512_RESTORE: | ||||
case AMDGPU::SI_SPILL_V1024_RESTORE: | case AMDGPU::SI_SPILL_V1024_RESTORE: | ||||
case AMDGPU::SI_SPILL_A32_RESTORE: | case AMDGPU::SI_SPILL_A32_RESTORE: | ||||
case AMDGPU::SI_SPILL_A64_RESTORE: | case AMDGPU::SI_SPILL_A64_RESTORE: | ||||
case AMDGPU::SI_SPILL_A96_RESTORE: | case AMDGPU::SI_SPILL_A96_RESTORE: | ||||
case AMDGPU::SI_SPILL_A128_RESTORE: | case AMDGPU::SI_SPILL_A128_RESTORE: | ||||
case AMDGPU::SI_SPILL_A160_RESTORE: | case AMDGPU::SI_SPILL_A160_RESTORE: | ||||
case AMDGPU::SI_SPILL_A192_RESTORE: | case AMDGPU::SI_SPILL_A192_RESTORE: | ||||
case AMDGPU::SI_SPILL_A224_RESTORE: | case AMDGPU::SI_SPILL_A224_RESTORE: | ||||
case AMDGPU::SI_SPILL_A256_RESTORE: | case AMDGPU::SI_SPILL_A256_RESTORE: | ||||
case AMDGPU::SI_SPILL_A288_RESTORE: | |||||
case AMDGPU::SI_SPILL_A320_RESTORE: | |||||
case AMDGPU::SI_SPILL_A352_RESTORE: | |||||
case AMDGPU::SI_SPILL_A384_RESTORE: | |||||
case AMDGPU::SI_SPILL_A512_RESTORE: | case AMDGPU::SI_SPILL_A512_RESTORE: | ||||
case AMDGPU::SI_SPILL_A1024_RESTORE: | case AMDGPU::SI_SPILL_A1024_RESTORE: | ||||
case AMDGPU::SI_SPILL_AV32_RESTORE: | case AMDGPU::SI_SPILL_AV32_RESTORE: | ||||
case AMDGPU::SI_SPILL_AV64_RESTORE: | case AMDGPU::SI_SPILL_AV64_RESTORE: | ||||
case AMDGPU::SI_SPILL_AV96_RESTORE: | case AMDGPU::SI_SPILL_AV96_RESTORE: | ||||
case AMDGPU::SI_SPILL_AV128_RESTORE: | case AMDGPU::SI_SPILL_AV128_RESTORE: | ||||
case AMDGPU::SI_SPILL_AV160_RESTORE: | case AMDGPU::SI_SPILL_AV160_RESTORE: | ||||
case AMDGPU::SI_SPILL_AV192_RESTORE: | case AMDGPU::SI_SPILL_AV192_RESTORE: | ||||
case AMDGPU::SI_SPILL_AV224_RESTORE: | case AMDGPU::SI_SPILL_AV224_RESTORE: | ||||
case AMDGPU::SI_SPILL_AV256_RESTORE: | case AMDGPU::SI_SPILL_AV256_RESTORE: | ||||
case AMDGPU::SI_SPILL_AV288_RESTORE: | |||||
case AMDGPU::SI_SPILL_AV320_RESTORE: | |||||
case AMDGPU::SI_SPILL_AV352_RESTORE: | |||||
case AMDGPU::SI_SPILL_AV384_RESTORE: | |||||
case AMDGPU::SI_SPILL_AV512_RESTORE: | case AMDGPU::SI_SPILL_AV512_RESTORE: | ||||
case AMDGPU::SI_SPILL_AV1024_RESTORE: { | case AMDGPU::SI_SPILL_AV1024_RESTORE: { | ||||
const MachineOperand *VData = TII->getNamedOperand(*MI, | const MachineOperand *VData = TII->getNamedOperand(*MI, | ||||
AMDGPU::OpName::vdata); | AMDGPU::OpName::vdata); | ||||
assert(TII->getNamedOperand(*MI, AMDGPU::OpName::soffset)->getReg() == | assert(TII->getNamedOperand(*MI, AMDGPU::OpName::soffset)->getReg() == | ||||
MFI->getStackPtrOffsetReg()); | MFI->getStackPtrOffsetReg()); | ||||
unsigned Opc = ST.enableFlatScratch() ? AMDGPU::SCRATCH_LOAD_DWORD_SADDR | unsigned Opc = ST.enableFlatScratch() ? AMDGPU::SCRATCH_LOAD_DWORD_SADDR | ||||
▲ Show 20 Lines • Show All 1,092 Lines • Show Last 20 Lines |