aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2010-10-20 00:02:50 +0000
committerJim Grosbach <grosbach@apple.com>2010-10-20 00:02:50 +0000
commit8b95c3ebfbd492c2ac863df93e40c11fc2e914fd (patch)
tree84b5e09de227905a5b68d639aa35f0e18c21b540
parentf6d7df6f21abcf15cfa10a6ac7fbb2f7c959093d (diff)
downloadexternal_llvm-8b95c3ebfbd492c2ac863df93e40c11fc2e914fd.zip
external_llvm-8b95c3ebfbd492c2ac863df93e40c11fc2e914fd.tar.gz
external_llvm-8b95c3ebfbd492c2ac863df93e40c11fc2e914fd.tar.bz2
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
-rw-r--r--lib/Target/ARM/ARMExpandPseudoInsts.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/Target/ARM/ARMExpandPseudoInsts.cpp b/lib/Target/ARM/ARMExpandPseudoInsts.cpp
index bbfd627..39d7afa 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();