[llvm] d66f653 - [MachinePipeliner] Skip reserved registers when computing register pressure (#120694)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 20 02:30:20 PST 2024
Author: Pengcheng Wang
Date: 2024-12-20T18:30:17+08:00
New Revision: d66f653c8db90d0c643f8f2740bbdc01bf647f18
URL: https://github.com/llvm/llvm-project/commit/d66f653c8db90d0c643f8f2740bbdc01bf647f18
DIFF: https://github.com/llvm/llvm-project/commit/d66f653c8db90d0c643f8f2740bbdc01bf647f18.diff
LOG: [MachinePipeliner] Skip reserved registers when computing register pressure (#120694)
We used to skip fixed registers, but fixed registers are not enough
because there are some runtime unusable registers like registers
reserved by `-ffixed-xxx` options.
Here we change to use reserved registers so that the estimated
pressure is more accurate.
Added:
Modified:
llvm/lib/CodeGen/MachinePipeliner.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/MachinePipeliner.cpp b/llvm/lib/CodeGen/MachinePipeliner.cpp
index d2eb7e72ac6b2a..db12b9c343b6bb 100644
--- a/llvm/lib/CodeGen/MachinePipeliner.cpp
+++ b/llvm/lib/CodeGen/MachinePipeliner.cpp
@@ -1283,9 +1283,9 @@ class HighRegisterPressureDetector {
}
}
- // Return true if Reg is fixed one, for example, stack pointer
- bool isFixedRegister(Register Reg) const {
- return Reg.isPhysical() && TRI->isFixedRegister(MF, Reg.asMCReg());
+ // Return true if Reg is reserved one, for example, stack pointer
+ bool isReservedRegister(Register Reg) const {
+ return Reg.isPhysical() && MRI.isReserved(Reg.asMCReg());
}
bool isDefinedInThisLoop(Register Reg) const {
@@ -1311,7 +1311,7 @@ class HighRegisterPressureDetector {
// because it's used only at the first iteration.
if (MI.isPHI() && Reg != getLoopPhiReg(MI, OrigMBB))
continue;
- if (isFixedRegister(Reg))
+ if (isReservedRegister(Reg))
continue;
if (isDefinedInThisLoop(Reg))
continue;
@@ -1423,7 +1423,7 @@ class HighRegisterPressureDetector {
const auto InsertReg = [this, &CurSetPressure](RegSetTy &RegSet,
Register Reg) {
- if (!Reg.isValid() || isFixedRegister(Reg))
+ if (!Reg.isValid() || isReservedRegister(Reg))
return;
bool Inserted = RegSet.insert(Reg).second;
@@ -1437,7 +1437,7 @@ class HighRegisterPressureDetector {
const auto EraseReg = [this, &CurSetPressure](RegSetTy &RegSet,
Register Reg) {
- if (!Reg.isValid() || isFixedRegister(Reg))
+ if (!Reg.isValid() || isReservedRegister(Reg))
return;
// live-in register
More information about the llvm-commits
mailing list