diff options
author | Evan Cheng <evan.cheng@apple.com> | 2010-08-10 19:30:19 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2010-08-10 19:30:19 +0000 |
commit | ac096808a3accc516ae7c193c9a2c1392bf3301a (patch) | |
tree | 7add14add83e0e065548a9ad801a591251ca6a83 /test/CodeGen/Thumb | |
parent | 98197e55c10176c3ef9100f7d852abbd2347225f (diff) | |
download | external_llvm-ac096808a3accc516ae7c193c9a2c1392bf3301a.zip external_llvm-ac096808a3accc516ae7c193c9a2c1392bf3301a.tar.gz external_llvm-ac096808a3accc516ae7c193c9a2c1392bf3301a.tar.bz2 |
Re-apply r110655 with fixes. Epilogue must restore sp from fp if the function stack frame has a var-sized object.
Also added a test case to check for the added benefit of this patch: it's optimizing away the unnecessary restore of sp from fp for some non-leaf functions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110707 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/Thumb')
-rw-r--r-- | test/CodeGen/Thumb/large-stack.ll | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/test/CodeGen/Thumb/large-stack.ll b/test/CodeGen/Thumb/large-stack.ll index 02de36a..b05e6bf 100644 --- a/test/CodeGen/Thumb/large-stack.ll +++ b/test/CodeGen/Thumb/large-stack.ll @@ -1,20 +1,35 @@ -; RUN: llc < %s -march=thumb | grep {ldr.*LCP} | count 5 +; RUN: llc < %s -mtriple=thumb-apple-darwin | FileCheck %s define void @test1() { +; CHECK: test1: +; CHECK: sub sp, #256 +; CHECK: add sp, #256 %tmp = alloca [ 64 x i32 ] , align 4 ret void } define void @test2() { +; CHECK: test2: +; CHECK: ldr r0, LCPI +; CHECK: add sp, r0 +; CHECK: mov sp, r7 +; CHECK: sub sp, #4 %tmp = alloca [ 4168 x i8 ] , align 4 ret void } define i32 @test3() { - %retval = alloca i32, align 4 - %tmp = alloca i32, align 4 - %a = alloca [805306369 x i8], align 16 - store i32 0, i32* %tmp - %tmp1 = load i32* %tmp - ret i32 %tmp1 +; CHECK: test3: +; CHECK: ldr r1, LCPI +; CHECK: add sp, r1 +; CHECK: ldr r1, LCPI +; CHECK: add r1, sp +; CHECK: mov sp, r7 +; CHECK: sub sp, #4 + %retval = alloca i32, align 4 + %tmp = alloca i32, align 4 + %a = alloca [805306369 x i8], align 16 + store i32 0, i32* %tmp + %tmp1 = load i32* %tmp + ret i32 %tmp1 } |