Add dynamic realignment when rematerializing the base register.
authorJim Grosbach <grosbach@apple.com>
Wed, 20 Oct 2010 00:02:50 +0000 (00:02 +0000)
committerJim Grosbach <grosbach@apple.com>
Wed, 20 Oct 2010 00:02:50 +0000 (00:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116886 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMExpandPseudoInsts.cpp

index bbfd627a0cfaaa4426d9407e0514efc0be6de5af..39d7afa853dae58a117fb2218672df9836d639ae 100644 (file)
@@ -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();