Skip to content

Commit f421a7a

Browse files
authored
[ARM] Use RegisterClassInfo::getRegPressureSetLimit (#120377)
`RegisterClassInfo::getRegPressureSetLimit` is a wrapper of `TargetRegisterInfo::getRegPressureSetLimit` with some logics to adjust the limit by removing reserved registers. It seems that we shouldn't use `TargetRegisterInfo::getRegPressureSetLimit` directly, just like the comment "This limit must be adjusted dynamically for reserved registers" said. Separate from #118787
1 parent e93d226 commit f421a7a

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

Diff for: llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp

+8-3
Original file line numberDiff line numberDiff line change
@@ -6938,7 +6938,6 @@ bool ARMPipelinerLoopInfo::tooMuchRegisterPressure(SwingSchedulerDAG &SSD,
69386938
RegClassInfo.runOnMachineFunction(*MF);
69396939
RPTracker.init(MF, &RegClassInfo, nullptr, EndLoop->getParent(),
69406940
EndLoop->getParent()->end(), false, false);
6941-
const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo();
69426941

69436942
bumpCrossIterationPressure(RPTracker, CrossIterationNeeds);
69446943

@@ -6980,10 +6979,16 @@ bool ARMPipelinerLoopInfo::tooMuchRegisterPressure(SwingSchedulerDAG &SSD,
69806979
}
69816980

69826981
auto &P = RPTracker.getPressure().MaxSetPressure;
6983-
for (unsigned I = 0, E = P.size(); I < E; ++I)
6984-
if (P[I] > TRI->getRegPressureSetLimit(*MF, I)) {
6982+
for (unsigned I = 0, E = P.size(); I < E; ++I) {
6983+
// Exclude some Neon register classes.
6984+
if (I == ARM::DQuad_with_ssub_0 || I == ARM::DTripleSpc_with_ssub_0 ||
6985+
I == ARM::DTriple_with_qsub_0_in_QPR)
6986+
continue;
6987+
6988+
if (P[I] > RegClassInfo.getRegPressureSetLimit(I)) {
69856989
return true;
69866990
}
6991+
}
69876992
return false;
69886993
}
69896994

0 commit comments

Comments
 (0)