aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/ARM/ARMFrameInfo.cpp
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2010-12-10 18:41:15 +0000
committerJim Grosbach <grosbach@apple.com>2010-12-10 18:41:15 +0000
commit568f528c997505706d3d02a31517338ef7dc2d17 (patch)
treea3769ca3f5b80b45577ccef5a864634fd0fe30fd /lib/Target/ARM/ARMFrameInfo.cpp
parentc9672cb8bea13fcbcbdb1cf26708d831c034c089 (diff)
Teach isCSRestore() that ARM/Thumb2 functions will use post-modify LDR
instructions to restore a single register rather than an LDM instruction. rdar://8754999 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121498 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/ARMFrameInfo.cpp')
-rw-r--r--lib/Target/ARM/ARMFrameInfo.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/Target/ARM/ARMFrameInfo.cpp b/lib/Target/ARM/ARMFrameInfo.cpp
index 71b60794f3..e2efbd61fc 100644
--- a/lib/Target/ARM/ARMFrameInfo.cpp
+++ b/lib/Target/ARM/ARMFrameInfo.cpp
@@ -92,6 +92,11 @@ static bool isCSRestore(MachineInstr *MI,
return false;
return true;
}
+ if ((MI->getOpcode() == ARM::LDR_POST ||
+ MI->getOpcode() == ARM::t2LDR_POST) &&
+ isCalleeSavedRegister(MI->getOperand(0).getReg(), CSRegs) &&
+ MI->getOperand(1).getReg() == ARM::SP)
+ return true;
return false;
}