[llvm] [MachineLICM] Recognize registers clobbered at EH landing pad entry (PR #122446)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 10 04:46:47 PST 2025
================
@@ -639,6 +639,21 @@ void MachineLICMImpl::HoistRegionPostRA(MachineLoop *CurLoop,
if (const uint32_t *Mask = BB->getBeginClobberMask(TRI))
applyBitsNotInRegMaskToRegUnitsMask(*TRI, RUClobbers, Mask);
+ // EH landing pads clobber exception pointer/selector registers
+ if (BB->isEHPad()) {
+ const MachineFunction &MF = *BB->getParent();
+ if (MF.getFunction().hasPersonalityFn()) {
+ auto PersonalityFn = MF.getFunction().getPersonalityFn();
+ const TargetLowering &TLI = *MF.getSubtarget().getTargetLowering();
+ if (unsigned Reg = TLI.getExceptionPointerRegister(PersonalityFn))
+ for (MCRegUnitIterator RUI(Reg, TRI); RUI.isValid(); ++RUI)
+ RUClobbers.set(*RUI);
+ if (unsigned Reg = TLI.getExceptionSelectorRegister(PersonalityFn))
+ for (MCRegUnitIterator RUI(Reg, TRI); RUI.isValid(); ++RUI)
+ RUClobbers.set(*RUI);
+ }
+ }
----------------
arsenm wrote:
This is the wrong place for this. This pass is already inventing its own liveness tracking instead of LiveRegUnits, which it should be using.
Why is this case special? Are these not reserved and/or callee saved?
https://github.com/llvm/llvm-project/pull/122446
More information about the llvm-commits
mailing list