Disable shrink-wrap for Thumb1
authorWeiming Zhao <weimingz@codeaurora.org>
Fri, 8 Jan 2016 18:37:43 +0000 (18:37 +0000)
committerWeiming Zhao <weimingz@codeaurora.org>
Fri, 8 Jan 2016 18:37:43 +0000 (18:37 +0000)
Summary: In ARMConstantIslandPass, which runs after Shrink Wrap pass, long jumps will be fixed up as BL (tBfar) which depends on spilling LR in epilogue.  However, shrink-wrap may remove the LR, which causes issues when the function returns.

Reviewers: qcolombet, rengolin

Subscribers: aemerson, rengolin

Differential Revision: http://reviews.llvm.org/D15984

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@257187 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/Thumb1FrameLowering.h

index 812f9830824de99a61909be5f6d357a7fc6cf485..27faac63683a7769f6780245a62ed8fcfc1e9949 100644 (file)
@@ -53,6 +53,11 @@ public:
   /// \p MBB will be correctly handled by the target.
   bool canUseAsEpilogue(const MachineBasicBlock &MBB) const override;
 
+  /// Disable shrink wrap as tBfar/BL will be used to adjust for long jumps.
+  bool enableShrinkWrapping(const MachineFunction &MF) const override {
+    return false;
+  }
+
 private:
   /// Check if the frame lowering of \p MF needs a special fixup
   /// code sequence for the epilogue.