| ; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x18 -mattr=+call-saved-x18 \ |
| ; RUN: -o - %s | FileCheck %s |
| |
| ; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x18 -mattr=+call-saved-x18 \ |
| ; RUN: -global-isel \ |
| ; RUN: -o - %s | FileCheck %s |
| |
| ; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x18 -mattr=+call-saved-x18 \ |
| ; RUN: -fast-isel \ |
| ; RUN: -o - %s | FileCheck %s |
| |
| ; Used to exhaust the supply of GPRs. |
| @var = global [30 x i64] zeroinitializer |
| |
| ; If a register is specified to be both reserved and callee-saved, then it |
| ; should not be allocated and should not be spilled onto the stack. |
| define void @foo() { |
| ; CHECK-NOT: str x18, [sp |
| |
| %val = load volatile [30 x i64], [30 x i64]* @var |
| store volatile [30 x i64] %val, [30 x i64]* @var |
| |
| ; CHECK-NOT: ldr x18 |
| ; CHECK-NOT: str x18 |
| |
| ; CHECK-NOT: ldr x18, [sp |
| ret void |
| } |