1 ; RUN: llc -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s
2 ; RUN: llc -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -disable-fp-elim < %s | FileCheck %s --check-prefix=CHECK-WITH-FP
4 @bigspace = global [8 x i64] zeroinitializer
6 declare void @use_addr(i8*)
8 define void @test_frame([8 x i64] %val) {
10 ; CHECK: .cfi_startproc
12 %var = alloca i8, i32 1000000
13 ; CHECK: sub sp, sp, #[[SP_INIT_ADJ:[0-9]+]]
15 ; CHECK-NEXT: .cfi_def_cfa sp, [[SP_INIT_ADJ]]
17 ; Make sure the prologue is reasonably efficient
18 ; CHECK-NEXT: stp x29, x30, [sp,
19 ; CHECK-NEXT: stp x25, x26, [sp,
20 ; CHECK-NEXT: stp x23, x24, [sp,
21 ; CHECK-NEXT: stp x21, x22, [sp,
22 ; CHECK-NEXT: stp x19, x20, [sp,
23 ; CHECK-NEXT: sub sp, sp, #160
24 ; CHECK-NEXT: sub sp, sp, #244, lsl #12
26 ; CHECK-NEXT: .cfi_def_cfa sp, 1000080
28 ; CHECK-NEXT: .cfi_offset x30, -8
30 ; CHECK-NEXT: .cfi_offset x29, -16
32 ; CHECK: .cfi_offset x19, -80
35 call void @use_addr(i8* %var)
37 store [8 x i64] %val, [8 x i64]* @bigspace
43 ; CHECK-WITH-FP: test_frame:
45 ; CHECK-WITH-FP: sub sp, sp, #[[SP_INIT_ADJ:[0-9]+]]
46 ; CHECK-WITH-FP-NEXT: .Ltmp
47 ; CHECK-WITH-FP-NEXT: .cfi_def_cfa sp, [[SP_INIT_ADJ]]
49 ; CHECK-WITH-FP: stp x29, x30, [sp, [[OFFSET:#[0-9]+]]]
50 ; CHECK-WITH-FP-NEXT: add x29, sp, [[OFFSET]]
51 ; CHECK-WITH-FP-NEXT: .Ltmp
52 ; CHECK-WITH-FP-NEXT: .cfi_def_cfa x29, 16
54 ; We shouldn't emit any kind of update for the second stack adjustment if the
56 ; CHECK-WITH-FP-NOT: .cfi_def_cfa_offset
58 ; CHECK-WITH-FP: bl use_addr