ARM-Darwin: keep the frame register reserved even if not updated.
Darwin platforms need the frame register to always point at a valid record even
if it's not updated in a leaf function. Backtraces are more important than one
extra GPR.
llvm-svn: 373738
diff --git a/llvm/test/CodeGen/ARM/r7-fixed-darwin.ll b/llvm/test/CodeGen/ARM/r7-fixed-darwin.ll
new file mode 100644
index 0000000..dc59b6a
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/r7-fixed-darwin.ll
@@ -0,0 +1,15 @@
+; RUN: llc -mtriple=thumbv7k-apple-watchos %s -o - | FileCheck %s
+
+; r7 is FP on Darwin, and should be preserved even if we don't create a new
+; frame record for this leaf function. So make huge register pressure to try &
+; tempt LLVM to use it.
+define void @foo([16 x i32]* %ptr) {
+; CHECK-LABEL: foo:
+; CHECK: push.w
+; CHECK: .cfi_offset r7
+; CHECK-NOT: r7
+; CHECK: pop.w
+ %val = load volatile [16 x i32], [16 x i32]* %ptr
+ store volatile [16 x i32] %val, [16 x i32]* %ptr
+ ret void
+}