; RUN: llc -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s ; RUN: llc -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -disable-fp-elim < %s | FileCheck %s --check-prefix=CHECK-WITH-FP @bigspace = global [8 x i64] zeroinitializer declare void @use_addr(i8*) define void @test_frame([8 x i64] %val) { ; CHECK: test_frame: ; CHECK: .cfi_startproc %var = alloca i8, i32 1000000 ; CHECK: sub sp, sp, #[[SP_INIT_ADJ:[0-9]+]] ; CHECK-NEXT: .Ltmp ; CHECK-NEXT: .cfi_def_cfa sp, [[SP_INIT_ADJ]] ; Make sure the prologue is reasonably efficient ; CHECK-NEXT: stp x29, x30, [sp, ; CHECK-NEXT: stp x25, x26, [sp, ; CHECK-NEXT: stp x23, x24, [sp, ; CHECK-NEXT: stp x21, x22, [sp, ; CHECK-NEXT: stp x19, x20, [sp, ; CHECK-NEXT: sub sp, sp, #160 ; CHECK-NEXT: sub sp, sp, #244, lsl #12 ; CHECK-NEXT: .Ltmp ; CHECK-NEXT: .cfi_def_cfa sp, 1000080 ; CHECK-NEXT: .Ltmp ; CHECK-NEXT: .cfi_offset x30, -8 ; CHECK-NEXT: .Ltmp ; CHECK-NEXT: .cfi_offset x29, -16 ; [...] ; CHECK: .cfi_offset x19, -80 ; CHECK: bl use_addr call void @use_addr(i8* %var) store [8 x i64] %val, [8 x i64]* @bigspace ret void ; CHECK: ret ; CHECK: .cfi_endproc } ; CHECK-WITH-FP: test_frame: ; CHECK-WITH-FP: sub sp, sp, #[[SP_INIT_ADJ:[0-9]+]] ; CHECK-WITH-FP-NEXT: .Ltmp ; CHECK-WITH-FP-NEXT: .cfi_def_cfa sp, [[SP_INIT_ADJ]] ; CHECK-WITH-FP: stp x29, x30, [sp, [[OFFSET:#[0-9]+]]] ; CHECK-WITH-FP-NEXT: add x29, sp, [[OFFSET]] ; CHECK-WITH-FP-NEXT: .Ltmp ; CHECK-WITH-FP-NEXT: .cfi_def_cfa x29, 16 ; We shouldn't emit any kind of update for the second stack adjustment if the ; FP is in use. ; CHECK-WITH-FP-NOT: .cfi_def_cfa_offset ; CHECK-WITH-FP: bl use_addr