summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2011-10-18 05:28:00 +0000
committerChad Rosier <mcrosier@apple.com>2011-10-18 05:28:00 +0000
commitfe04757f5e06ab15208ac0a2ab8d7e83c62b9f0d (patch)
tree679d85c4d3576a429a1419196494da9ecb339d96 /test
parent895ede819f0558574fce66cc1eca80eee2deaa4e (diff)
downloadllvm-fe04757f5e06ab15208ac0a2ab8d7e83c62b9f0d.tar.gz
llvm-fe04757f5e06ab15208ac0a2ab8d7e83c62b9f0d.tar.bz2
llvm-fe04757f5e06ab15208ac0a2ab8d7e83c62b9f0d.tar.xz
Add support for dynamic stack realignment when in thumb1 mode.
rdar://10288916 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142337 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/CodeGen/ARM/thumb1-dynrealign.ll40
1 files changed, 40 insertions, 0 deletions
diff --git a/test/CodeGen/ARM/thumb1-dynrealign.ll b/test/CodeGen/ARM/thumb1-dynrealign.ll
new file mode 100644
index 0000000000..fa14fb42a3
--- /dev/null
+++ b/test/CodeGen/ARM/thumb1-dynrealign.ll
@@ -0,0 +1,40 @@
+; RUN: llc < %s -mtriple=thumbv6-apple-darwin | FileCheck %s
+
+; Normal load from SP
+define void @SP(i32 %i) nounwind uwtable ssp {
+entry:
+; CHECK: @SP
+; CHECK: push {r7, lr}
+; CHECK-NEXT: mov r7, sp
+; CHECK-NEXT: sub sp, #4
+; CHECK-NEXT: mov r1, sp
+; CHECK-NEXT: str r0, [r1]
+; CHECK-NEXT: mov r0, sp
+; CHECK-NEXT: blx _SP_
+; CHECK-NEXT: add sp, #4
+; CHECK-NEXT: pop {r7, pc}
+ %i.addr = alloca i32, align 4
+ store i32 %i, i32* %i.addr, align 4
+ call void @SP_(i32* %i.addr)
+ ret void
+}
+
+declare void @SP_(i32*)
+
+; Dynamic stack realignment
+define void @FP(double %a) nounwind uwtable ssp {
+entry:
+; CHECK: mov r4, sp
+; CHECK-NEXT: lsrs r4, r4, #3
+; CHECK-NEXT: lsls r4, r4, #3
+; CHECK-NEXT: mov sp, r4
+; Restore from FP
+; CHECK: subs r4, r7, #4
+; CHECK: mov sp, r4
+ %a.addr = alloca double, align 8
+ store double %a, double* %a.addr, align 8
+ call void @FP_(double* %a.addr)
+ ret void
+}
+
+declare void @FP_(double*)