diff --git a/llvm/lib/Target/AMDGPU/GCNRegBankReassign.cpp b/llvm/lib/Target/AMDGPU/GCNRegBankReassign.cpp index 4fd76ba57ad26..137ac5466f4e5 100644 --- a/llvm/lib/Target/AMDGPU/GCNRegBankReassign.cpp +++ b/llvm/lib/Target/AMDGPU/GCNRegBankReassign.cpp @@ -48,6 +48,11 @@ static cl::opt VerifyStallCycles("amdgpu-verify-regbanks-reassign", cl::value_desc("0|1|2"), cl::init(0), cl::Hidden); +// Threshold to keep compile time reasonable. +static cl::opt VRegThresh("amdgpu-regbanks-reassign-threshold", + cl::desc("Max number of vregs to run the regbanks reassign pass"), + cl::init(100000), cl::Hidden); + #define DEBUG_TYPE "amdgpu-regbanks-reassign" #define NUM_VGPR_BANKS 4 @@ -807,6 +812,16 @@ bool GCNRegBankReassign::runOnMachineFunction(MachineFunction &MF) { return false; MRI = &MF.getRegInfo(); + + LLVM_DEBUG(dbgs() << "=== RegBanks reassign analysis on function " << MF.getName() + << "\nNumVirtRegs = " << MRI->getNumVirtRegs() << "\n\n"); + + if (MRI->getNumVirtRegs() > VRegThresh) { + LLVM_DEBUG(dbgs() << "NumVirtRegs > " << VRegThresh + << " threshold, skipping function.\n\n"); + return false; + } + TRI = ST->getRegisterInfo(); MLI = &getAnalysis(); VRM = &getAnalysis(); @@ -826,9 +841,6 @@ bool GCNRegBankReassign::runOnMachineFunction(MachineFunction &MF) { AMDGPU::SReg_32RegClass.getNumRegs() / 2 + 1; RegsUsed.resize(NumRegBanks); - LLVM_DEBUG(dbgs() << "=== RegBanks reassign analysis on function " << MF.getName() - << '\n'); - unsigned StallCycles = collectCandidates(MF); NumStallsDetected += StallCycles;