xref: /llvm-project/llvm/test/CodeGen/AArch64/arm64-reserve-call-saved-reg.ll (revision 5ddce70ef0e5a641d7fea95e31fc5e2439cb98cb)
1; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x9 -mattr=+call-saved-x9 -o - %s | FileCheck %s --check-prefixes=CHECK-X9
2; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x9 -mattr=+call-saved-x9 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X9
3; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x9 -mattr=+call-saved-x9 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X9
4
5; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x10 -mattr=+call-saved-x10 -o - %s | FileCheck %s --check-prefixes=CHECK-X10
6; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x10 -mattr=+call-saved-x10 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X10
7; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x10 -mattr=+call-saved-x10 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X10
8
9; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x11 -mattr=+call-saved-x11 -o - %s | FileCheck %s --check-prefixes=CHECK-X11
10; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x11 -mattr=+call-saved-x11 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X11
11; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x11 -mattr=+call-saved-x11 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X11
12
13; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x12 -mattr=+call-saved-x12 -o - %s | FileCheck %s --check-prefixes=CHECK-X12
14; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x12 -mattr=+call-saved-x12 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X12
15; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x12 -mattr=+call-saved-x12 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X12
16
17; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x13 -mattr=+call-saved-x13 -o - %s | FileCheck %s --check-prefixes=CHECK-X13
18; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x13 -mattr=+call-saved-x13 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X13
19; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x13 -mattr=+call-saved-x13 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X13
20
21; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x14 -mattr=+call-saved-x14 -o - %s | FileCheck %s --check-prefixes=CHECK-X14
22; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x14 -mattr=+call-saved-x14 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X14
23; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x14 -mattr=+call-saved-x14 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X14
24
25; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x15 -mattr=+call-saved-x15 -o - %s | FileCheck %s --check-prefixes=CHECK-X15
26; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x15 -mattr=+call-saved-x15 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X15
27; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x15 -mattr=+call-saved-x15 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X15
28
29; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x18 -mattr=+call-saved-x18 -o - %s | FileCheck %s --check-prefixes=CHECK-X18
30; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x18 -mattr=+call-saved-x18 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X18
31; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x18 -mattr=+call-saved-x18 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X18
32
33; Used to exhaust the supply of GPRs.
34@var = global [30 x i64] zeroinitializer
35
36; If a register is specified to be both reserved and callee-saved, then it
37; should not be allocated and should not be spilled onto the stack.
38define void @foo() {
39; CHECK-X9-NOT: str x9, [sp
40; CHECK-X10-NOT: str x10, [sp
41; CHECK-X11-NOT: str x11, [sp
42; CHECK-X12-NOT: str x12, [sp
43; CHECK-X13-NOT: str x13, [sp
44; CHECK-X14-NOT: str x14, [sp
45; CHECK-X15-NOT: str x15, [sp
46; CHECK-X18-NOT: str x18, [sp
47
48  %val = load volatile [30 x i64], ptr @var
49  store volatile [30 x i64] %val, ptr @var
50
51; CHECK-X9-NOT: ldr x9
52; CHECK-X10-NOT: ldr x10
53; CHECK-X11-NOT: ldr x11
54; CHECK-X12-NOT: ldr x12
55; CHECK-X13-NOT: ldr x13
56; CHECK-X14-NOT: ldr x14
57; CHECK-X15-NOT: ldr x15
58; CHECK-X18-NOT: ldr x18
59; CHECK-X9-NOT: str x9
60; CHECK-X10-NOT: str x10
61; CHECK-X11-NOT: str x11
62; CHECK-X12-NOT: str x12
63; CHECK-X13-NOT: str x13
64; CHECK-X14-NOT: str x14
65; CHECK-X15-NOT: str x15
66; CHECK-X18-NOT: str x18
67
68; CHECK-X9-NOT: ldr x9, [sp
69; CHECK-X10-NOT: ldr x10, [sp
70; CHECK-X11-NOT: ldr x11, [sp
71; CHECK-X12-NOT: ldr x12, [sp
72; CHECK-X13-NOT: ldr x13, [sp
73; CHECK-X14-NOT: ldr x14, [sp
74; CHECK-X15-NOT: ldr x15, [sp
75; CHECK-X18-NOT: ldr x18, [sp
76  ret void
77}
78