[llvm] [AMDGPU] Improved register pressure estimates for rescheduling (PR #213116)
Lucas Ramirez via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 31 04:57:52 PDT 2026
================
@@ -1213,3 +1214,83 @@ LLVM_DUMP_METHOD void llvm::dumpMaxRegPressure(MachineFunction &MF,
}
}
#endif
+
+unsigned llvm::estimateGreedyVGPRPressure(
+ MachineBasicBlock::const_iterator RegionBegin,
+ MachineBasicBlock::const_iterator RegionEnd,
+ const GCNRPTracker::LiveRegSet &LiveIns, LiveIntervals &LIS,
+ const MachineRegisterInfo &MRI, const SIRegisterInfo &TRI) {
+
+ SmallVector<LiveInterval *> RegionIntervals;
+ SmallPtrSet<LiveInterval *, 32> Seen;
+
+ auto IsVGPR = [&MRI, &TRI](Register VReg) {
+ const TargetRegisterClass *RC = MRI.getRegClass(VReg);
+ return TRI.isVGPRClass(RC) || TRI.isVectorSuperClass(RC);
+ };
+
+ // Collect live-ins
+ for (const auto &[RegNum, LaneMask] : LiveIns) {
+ Register VReg(RegNum);
+ if (!VReg.isVirtual() || !LIS.hasInterval(VReg) || !IsVGPR(VReg))
+ continue;
+ LiveInterval &LI = LIS.getInterval(VReg);
+ if (Seen.insert(&LI).second)
+ RegionIntervals.push_back(&LI);
+ }
+
+ // Collect defs in region
+ for (auto I = RegionBegin; I != RegionEnd; ++I) {
+ for (const MachineOperand &MO : I->operands()) {
+ if (!MO.isReg() || !MO.isDef())
+ continue;
+ Register VReg = MO.getReg();
+ if (!VReg.isVirtual() || !LIS.hasInterval(VReg) || !IsVGPR(VReg))
+ continue;
+ LiveInterval &LI = LIS.getInterval(VReg);
+ if (Seen.insert(&LI).second)
+ RegionIntervals.push_back(&LI);
+ }
+ }
+
+ llvm::sort(RegionIntervals, [](auto *LHS, auto *RHS) {
----------------
lucas-rami wrote:
```suggestion
llvm::sort(RegionIntervals, [](LiveInterval *LHS, LiveInterval *RHS) {
```
https://github.com/llvm/llvm-project/pull/213116
More information about the llvm-commits
mailing list