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 3 4 @bigspace = global [8 x i64] zeroinitializer 5 6 declare void @use_addr(i8*) 7 8 define void @test_frame([8 x i64] %val) { 9 ; CHECK: test_frame: 10 ; CHECK: .cfi_startproc 11 12 %var = alloca i8, i32 1000000 13 ; CHECK: sub sp, sp, #[[SP_INIT_ADJ:[0-9]+]] 14 ; CHECK-NEXT: .Ltmp 15 ; CHECK-NEXT: .cfi_def_cfa sp, [[SP_INIT_ADJ]] 16 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 25 ; CHECK-NEXT: .Ltmp 26 ; CHECK-NEXT: .cfi_def_cfa sp, 1000080 27 ; CHECK-NEXT: .Ltmp 28 ; CHECK-NEXT: .cfi_offset x30, -8 29 ; CHECK-NEXT: .Ltmp 30 ; CHECK-NEXT: .cfi_offset x29, -16 31 ; [...] 32 ; CHECK: .cfi_offset x19, -80 33 34 ; CHECK: bl use_addr 35 call void @use_addr(i8* %var) 36 37 store [8 x i64] %val, [8 x i64]* @bigspace 38 ret void 39 ; CHECK: ret 40 ; CHECK: .cfi_endproc 41 } 42 43 ; CHECK-WITH-FP: test_frame: 44 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]] 48 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 53 54 ; We shouldn't emit any kind of update for the second stack adjustment if the 55 ; FP is in use. 56 ; CHECK-WITH-FP-NOT: .cfi_def_cfa_offset 57 58 ; CHECK-WITH-FP: bl use_addr 59