From fe04757f5e06ab15208ac0a2ab8d7e83c62b9f0d Mon Sep 17 00:00:00 2001 From: Chad Rosier Date: Tue, 18 Oct 2011 05:28:00 +0000 Subject: 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 --- test/CodeGen/ARM/thumb1-dynrealign.ll | 40 +++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 test/CodeGen/ARM/thumb1-dynrealign.ll (limited to 'test') 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*) -- cgit v1.2.3