| ;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 %s) { |
| call void @fooUseParam(%artz* %s) |
| ret void |
| } |
| |
| define void @foo2(%artz* byval %s, i32 %p, %artz* byval %s2) { |
| call void @fooUseParam(%artz* %s) |
| call void @fooUseParam(%artz* %s2) |
| ret void |
| } |
| |
| |
| define void @doFoo() { |
| call void @foo(%artz* byval @static_val) |
| ret void |
| } |
| |
| define void @doFoo2() { |
| call void @foo2(%artz* byval @static_val, i32 0, %artz* byval @static_val) |
| ret void |
| } |
| |