diff --git a/llvm/lib/CodeGen/MachineLICM.cpp b/llvm/lib/CodeGen/MachineLICM.cpp index d21059189b184..8aaa5605f28b7 100644 --- a/llvm/lib/CodeGen/MachineLICM.cpp +++ b/llvm/lib/CodeGen/MachineLICM.cpp @@ -123,6 +123,7 @@ namespace { const TargetRegisterInfo *TRI = nullptr; const MachineFrameInfo *MFI = nullptr; MachineRegisterInfo *MRI = nullptr; + RegisterClassInfo RegClassInfo; TargetSchedModel SchedModel; bool PreRegAlloc = false; bool HasProfileData = false; @@ -389,6 +390,7 @@ bool MachineLICMImpl::run(MachineFunction &MF) { MFI = &MF.getFrameInfo(); MRI = &MF.getRegInfo(); SchedModel.init(&ST); + RegClassInfo.runOnMachineFunction(MF); HasProfileData = MF.getFunction().hasProfileData(); @@ -405,7 +407,7 @@ bool MachineLICMImpl::run(MachineFunction &MF) { std::fill(RegPressure.begin(), RegPressure.end(), 0); RegLimit.resize(NumRPS); for (unsigned i = 0, e = NumRPS; i != e; ++i) - RegLimit[i] = TRI->getRegPressureSetLimit(MF, i); + RegLimit[i] = RegClassInfo.getRegPressureSetLimit(i); } if (HoistConstLoads) diff --git a/llvm/lib/CodeGen/MachinePipeliner.cpp b/llvm/lib/CodeGen/MachinePipeliner.cpp index 3ee0ba1fea507..e2bbebfc5f546 100644 --- a/llvm/lib/CodeGen/MachinePipeliner.cpp +++ b/llvm/lib/CodeGen/MachinePipeliner.cpp @@ -1326,7 +1326,7 @@ class HighRegisterPressureDetector { // Calculate the upper limit of each pressure set void computePressureSetLimit(const RegisterClassInfo &RCI) { for (unsigned PSet = 0; PSet < PSetNum; PSet++) - PressureSetLimit[PSet] = TRI->getRegPressureSetLimit(MF, PSet); + PressureSetLimit[PSet] = RCI.getRegPressureSetLimit(PSet); } // There are two patterns of last-use. diff --git a/llvm/lib/CodeGen/MachineSink.cpp b/llvm/lib/CodeGen/MachineSink.cpp index 7d0bedab7cdab..d407d8a965ea6 100644 --- a/llvm/lib/CodeGen/MachineSink.cpp +++ b/llvm/lib/CodeGen/MachineSink.cpp @@ -1094,7 +1094,7 @@ bool MachineSinking::registerPressureSetExceedsLimit( std::vector BBRegisterPressure = getBBRegisterPressure(MBB); for (; *PS != -1; PS++) if (Weight + BBRegisterPressure[*PS] >= - TRI->getRegPressureSetLimit(*MBB.getParent(), *PS)) + RegClassInfo.getRegPressureSetLimit(*PS)) return true; return false; } diff --git a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp index e6b37dd916168..8673deddb7057 100644 --- a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp +++ b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp @@ -6936,7 +6936,6 @@ bool ARMPipelinerLoopInfo::tooMuchRegisterPressure(SwingSchedulerDAG &SSD, RegClassInfo.runOnMachineFunction(*MF); RPTracker.init(MF, &RegClassInfo, nullptr, EndLoop->getParent(), EndLoop->getParent()->end(), false, false); - const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo(); bumpCrossIterationPressure(RPTracker, CrossIterationNeeds); @@ -6979,7 +6978,7 @@ bool ARMPipelinerLoopInfo::tooMuchRegisterPressure(SwingSchedulerDAG &SSD, auto &P = RPTracker.getPressure().MaxSetPressure; for (unsigned I = 0, E = P.size(); I < E; ++I) - if (P[I] > TRI->getRegPressureSetLimit(*MF, I)) { + if (P[I] > RegClassInfo.getRegPressureSetLimit(I)) { return true; } return false; diff --git a/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp b/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp index 44f6db5061e21..fa45a7fb7fabe 100644 --- a/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp +++ b/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp @@ -643,8 +643,8 @@ bool PPCInstrInfo::shouldReduceRegisterPressure( }; // For now we only care about float and double type fma. - unsigned VSSRCLimit = TRI->getRegPressureSetLimit( - *MBB->getParent(), PPC::RegisterPressureSets::VSSRC); + unsigned VSSRCLimit = + RegClassInfo->getRegPressureSetLimit(PPC::RegisterPressureSets::VSSRC); // Only reduce register pressure when pressure is high. return GetMBBPressure(MBB)[PPC::RegisterPressureSets::VSSRC] >