diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-12-20 22:15:04 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-12-20 22:15:04 +0000 |
commit | 52346e964ff1108729c2b8990b859c10f09a1822 (patch) | |
tree | 25180d9dd8717b1aef6cb9c889d49a2f5616434f /test/CodeGen/Thumb2/aligned-spill.ll | |
parent | 05c585319b8620178d3032f74704c5be360ab7e7 (diff) | |
download | llvm-52346e964ff1108729c2b8990b859c10f09a1822.tar.gz llvm-52346e964ff1108729c2b8990b859c10f09a1822.tar.bz2 llvm-52346e964ff1108729c2b8990b859c10f09a1822.tar.xz |
Heed spill slot alignment on ARM.
Use the spill slot alignment as well as the local variable alignment to
determine when the stack needs to be realigned. This works now that the
ARM target can always realign the stack by using a base pointer.
Still respect the ARMBaseRegisterInfo::canRealignStack() function
vetoing a realigned stack. Don't use aligned spill code in that case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146997 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/Thumb2/aligned-spill.ll')
-rw-r--r-- | test/CodeGen/Thumb2/aligned-spill.ll | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/test/CodeGen/Thumb2/aligned-spill.ll b/test/CodeGen/Thumb2/aligned-spill.ll new file mode 100644 index 0000000000..1a987d02d0 --- /dev/null +++ b/test/CodeGen/Thumb2/aligned-spill.ll @@ -0,0 +1,22 @@ +; RUN: llc < %s -mcpu=cortex-a8 | FileCheck %s +target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32" +target triple = "thumbv7-apple-ios" + +; CHECK: f +; This function is forced to spill a double. +; Verify that the spill slot is properly aligned. +; +; The caller-saved r4 is used as a scratch register for stack realignment. +; CHECK: push {r4, r7, lr} +; CHECK: bic r4, r4, #7 +; CHECK: mov sp, r4 +define void @f(double* nocapture %p) nounwind ssp { +entry: + %0 = load double* %p, align 4 + tail call void asm sideeffect "", "~{d8},~{d9},~{d10},~{d11},~{d12},~{d13},~{d14},~{d15}"() nounwind + tail call void @g() nounwind + store double %0, double* %p, align 4 + ret void +} + +declare void @g() |