mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
4bf7d5872e
Upgrade of the IR text tests should be the only thing blocking making typed byval mandatory. Partially done through regex and partially manual.
74 lines
1.5 KiB
LLVM
74 lines
1.5 KiB
LLVM
;PR15293: ARM codegen ice - expected larger existing stack allocation
|
|
;RUN: llc -mtriple=arm-linux-gnueabihf < %s | FileCheck %s
|
|
|
|
;CHECK-LABEL: foo:
|
|
;CHECK: sub sp, sp, #16
|
|
;CHECK: push {r11, lr}
|
|
;CHECK: str r0, [sp, #8]
|
|
;CHECK: add r0, sp, #8
|
|
;CHECK: bl fooUseParam
|
|
;CHECK: pop {r11, lr}
|
|
;CHECK: add sp, sp, #16
|
|
;CHECK: mov pc, lr
|
|
|
|
;CHECK-LABEL: foo2:
|
|
;CHECK: sub sp, sp, #16
|
|
;CHECK: push {r11, lr}
|
|
;CHECK: str r0, [sp, #8]
|
|
;CHECK: add r0, sp, #8
|
|
;CHECK: str r2, [sp, #16]
|
|
;CHECK: bl fooUseParam
|
|
;CHECK: add r0, sp, #16
|
|
;CHECK: bl fooUseParam
|
|
;CHECK: pop {r11, lr}
|
|
;CHECK: add sp, sp, #16
|
|
;CHECK: mov pc, lr
|
|
|
|
;CHECK-LABEL: doFoo:
|
|
;CHECK: push {r11, lr}
|
|
;CHECK: ldr r0,
|
|
;CHECK: ldr r0, [r0]
|
|
;CHECK: bl foo
|
|
;CHECK: pop {r11, lr}
|
|
;CHECK: mov pc, lr
|
|
|
|
|
|
;CHECK-LABEL: doFoo2:
|
|
;CHECK: push {r11, lr}
|
|
;CHECK: ldr r0,
|
|
;CHECK: mov r1, #0
|
|
;CHECK: ldr r0, [r0]
|
|
;CHECK: mov r2, r0
|
|
;CHECK: bl foo2
|
|
;CHECK: pop {r11, lr}
|
|
;CHECK: mov pc, lr
|
|
|
|
|
|
%artz = type { i32 }
|
|
@static_val = constant %artz { i32 777 }
|
|
|
|
declare void @fooUseParam(%artz* )
|
|
|
|
define void @foo(%artz* byval(%artz) %s) {
|
|
call void @fooUseParam(%artz* %s)
|
|
ret void
|
|
}
|
|
|
|
define void @foo2(%artz* byval(%artz) %s, i32 %p, %artz* byval(%artz) %s2) {
|
|
call void @fooUseParam(%artz* %s)
|
|
call void @fooUseParam(%artz* %s2)
|
|
ret void
|
|
}
|
|
|
|
|
|
define void @doFoo() {
|
|
call void @foo(%artz* byval(%artz) @static_val)
|
|
ret void
|
|
}
|
|
|
|
define void @doFoo2() {
|
|
call void @foo2(%artz* byval(%artz) @static_val, i32 0, %artz* byval(%artz) @static_val)
|
|
ret void
|
|
}
|
|
|