1; RUN: llc -mtriple=aarch64-none-linux-gnu -disable-fp-elim < %s | FileCheck %s
2@var = global i32 0
3
4declare void @bar()
5
6define void @test_w29_reserved() {
7; CHECK-LABEL: test_w29_reserved:
8; CHECK: .cfi_startproc
9; CHECK: .cfi_def_cfa sp, 96
10; CHECK: add x29, sp, #{{[0-9]+}}
11; CHECK: .cfi_def_cfa x29, 16
12; CHECK: .cfi_offset x30, -8
13; CHECK: .cfi_offset x29, -16
14; CHECK: .cfi_offset x28, -24
15; CHECK: .cfi_offset x27, -32
16; CHECK: .cfi_offset x26, -40
17; CHECK: .cfi_offset x25, -48
18; CHECK: .cfi_offset x24, -56
19; CHECK: .cfi_offset x23, -64
20; CHECK: .cfi_offset x22, -72
21; CHECK: .cfi_offset x21, -80
22; CHECK: .cfi_offset x20, -88
23; CHECK: .cfi_offset x19, -96
24
25  %val1 = load volatile i32* @var
26  %val2 = load volatile i32* @var
27  %val3 = load volatile i32* @var
28  %val4 = load volatile i32* @var
29  %val5 = load volatile i32* @var
30  %val6 = load volatile i32* @var
31  %val7 = load volatile i32* @var
32  %val8 = load volatile i32* @var
33  %val9 = load volatile i32* @var
34
35; CHECK-NOT: ldr w29,
36
37  ; Call to prevent fp-elim that occurs regardless in leaf functions.
38  call void @bar()
39
40  store volatile i32 %val1,  i32* @var
41  store volatile i32 %val2,  i32* @var
42  store volatile i32 %val3,  i32* @var
43  store volatile i32 %val4,  i32* @var
44  store volatile i32 %val5,  i32* @var
45  store volatile i32 %val6,  i32* @var
46  store volatile i32 %val7,  i32* @var
47  store volatile i32 %val8,  i32* @var
48  store volatile i32 %val9,  i32* @var
49
50  ret void
51; CHECK: ret
52}
53