From 8b95c3ebfbd492c2ac863df93e40c11fc2e914fd Mon Sep 17 00:00:00 2001 From: Jim Grosbach Date: Wed, 20 Oct 2010 00:02:50 +0000 Subject: [PATCH] Add dynamic realignment when rematerializing the base register. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116886 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARMExpandPseudoInsts.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/Target/ARM/ARMExpandPseudoInsts.cpp b/lib/Target/ARM/ARMExpandPseudoInsts.cpp index bbfd627a0cf..39d7afa853d 100644 --- a/lib/Target/ARM/ARMExpandPseudoInsts.cpp +++ b/lib/Target/ARM/ARMExpandPseudoInsts.cpp @@ -606,6 +606,19 @@ bool ARMExpandPseudo::ExpandMBB(MachineBasicBlock &MBB) { FramePtr, -NumBytes, ARMCC::AL, 0, *TII); } + // If there's dynamic realignment, adjust for it. + if (!RI.needsStackRealignment(MF)) { + MachineFrameInfo *MFI = MF.getFrameInfo(); + unsigned MaxAlign = MFI->getMaxAlignment(); + assert (!AFI->isThumb1OnlyFunction()); + // Emit bic r6, r6, MaxAlign + unsigned bicOpc = AFI->isThumbFunction() ? + ARM::t2BICri : ARM::BICri; + AddDefaultCC(AddDefaultPred(BuildMI(MBB, MBBI, MI.getDebugLoc(), + TII->get(bicOpc), ARM::R6) + .addReg(ARM::R6, RegState::Kill) + .addImm(MaxAlign-1))); + } } MI.eraseFromParent(); -- 2.34.1