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