mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
906154f438
When we had dynamic call frames (i.e. sp adjustment around each call) we were including that adjustment into offsets calculated based on r6, even though it's only sp that changes. This led to incorrect stack slot accesses. llvm-svn: 348591
24 lines
590 B
LLVM
24 lines
590 B
LLVM
; RUN: llc -o - %s | FileCheck %s
|
|
target triple="arm--"
|
|
|
|
@glob = external global i32*
|
|
|
|
declare void @bar(i32*, [20000 x i8]* byval)
|
|
|
|
; CHECK-LABEL: foo:
|
|
; We should see the stack getting additional alignment
|
|
; CHECK: sub sp, sp, #16
|
|
; CHECK: bic sp, sp, #31
|
|
; And a base pointer getting used.
|
|
; CHECK: mov r6, sp
|
|
; Which is passed to the call
|
|
; CHECK: mov r0, r6
|
|
; CHECK: bl bar
|
|
define void @foo([20000 x i8]* %addr) {
|
|
%tmp = alloca [4 x i32], align 32
|
|
%tmp0 = getelementptr [4 x i32], [4 x i32]* %tmp, i32 0, i32 0
|
|
call void @bar(i32* %tmp0, [20000 x i8]* byval %addr)
|
|
ret void
|
|
}
|
|
|