[llvm] [MachineLICM] Recognize registers clobbered at EH landing pad entry (PR #122446)
Sergei Barannikov via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 13 09:03:11 PDT 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);
+ }
+ }
----------------
s-barannikov wrote:
I wonder whether `livein_iterator` (used just above) should take care of these registers implicitly like `liveout_iterator` does
https://github.com/llvm/llvm-project/blob/66f158d91803875de63d8f2a437ce8ecb22c4141/llvm/include/llvm/CodeGen/MachineBasicBlock.h#L550-L559
https://github.com/llvm/llvm-project/pull/122446
More information about the llvm-commits
mailing list