171 lines
8.1 KiB
LLVM
171 lines
8.1 KiB
LLVM
; RUN: llc -mtriple=arm64-apple-ios -mattr=+reserve-x18 -o - %s | FileCheck %s --check-prefix=CHECK-RESERVE --check-prefix=CHECK-RESERVE-X18
|
|
; RUN: llc -mtriple=arm64-freebsd-gnu -mattr=+reserve-x18 -o - %s | FileCheck %s --check-prefix=CHECK-RESERVE --check-prefix=CHECK-RESERVE-X18
|
|
; RUN: llc -mtriple=arm64-linux-gnu -o - %s | FileCheck %s
|
|
; RUN: llc -mtriple=aarch64-linux-android -o - %s | FileCheck %s --check-prefix=CHECK-RESERVE --check-prefix=CHECK-RESERVE-X18
|
|
; RUN: llc -mtriple=aarch64-fuchsia -o - %s | FileCheck %s --check-prefix=CHECK-RESERVE --check-prefix=CHECK-RESERVE-X18
|
|
; RUN: llc -mtriple=aarch64-windows -o - %s | FileCheck %s --check-prefix=CHECK-RESERVE --check-prefix=CHECK-RESERVE-X18
|
|
|
|
; Test reserve-x# options individually.
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x1 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X1
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x2 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X2
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x3 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X3
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x4 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X4
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x5 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X5
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x6 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X6
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x7 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X7
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x9 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X9
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x10 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X10
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x11 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X11
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x12 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X12
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x13 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X13
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x14 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X14
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x15 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X15
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x20 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X20
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x21 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X21
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x22 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X22
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x23 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X23
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x24 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X24
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x25 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X25
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x26 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X26
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x27 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X27
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x28 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X28
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x30 -o - %s | FileCheck %s --check-prefixes=CHECK-RESERVE,CHECK-RESERVE-X30
|
|
|
|
; Test multiple of reserve-x# options together.
|
|
; RUN: llc -mtriple=arm64-linux-gnu \
|
|
; RUN: -mattr=+reserve-x1 \
|
|
; RUN: -mattr=+reserve-x2 \
|
|
; RUN: -mattr=+reserve-x18 \
|
|
; RUN: -o - %s | FileCheck %s \
|
|
; RUN: --check-prefix=CHECK-RESERVE \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X1 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X2 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X18
|
|
|
|
; Test all reserve-x# options together.
|
|
; RUN: llc -mtriple=arm64-linux-gnu \
|
|
; RUN: -mattr=+reserve-x1 \
|
|
; RUN: -mattr=+reserve-x2 \
|
|
; RUN: -mattr=+reserve-x3 \
|
|
; RUN: -mattr=+reserve-x4 \
|
|
; RUN: -mattr=+reserve-x5 \
|
|
; RUN: -mattr=+reserve-x6 \
|
|
; RUN: -mattr=+reserve-x7 \
|
|
; RUN: -mattr=+reserve-x9 \
|
|
; RUN: -mattr=+reserve-x10 \
|
|
; RUN: -mattr=+reserve-x11 \
|
|
; RUN: -mattr=+reserve-x12 \
|
|
; RUN: -mattr=+reserve-x13 \
|
|
; RUN: -mattr=+reserve-x14 \
|
|
; RUN: -mattr=+reserve-x15 \
|
|
; RUN: -mattr=+reserve-x18 \
|
|
; RUN: -mattr=+reserve-x20 \
|
|
; RUN: -mattr=+reserve-x21 \
|
|
; RUN: -mattr=+reserve-x22 \
|
|
; RUN: -mattr=+reserve-x23 \
|
|
; RUN: -mattr=+reserve-x24 \
|
|
; RUN: -mattr=+reserve-x25 \
|
|
; RUN: -mattr=+reserve-x26 \
|
|
; RUN: -mattr=+reserve-x27 \
|
|
; RUN: -mattr=+reserve-x28 \
|
|
; RUN: -mattr=+reserve-x30 \
|
|
; RUN: -o - %s | FileCheck %s \
|
|
; RUN: --check-prefix=CHECK-RESERVE \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X1 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X2 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X3 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X4 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X5 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X6 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X7 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X9 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X10 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X11 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X12 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X13 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X14 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X15 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X18 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X20 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X21 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X22 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X23 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X24 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X25 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X26 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X27 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X28 \
|
|
; RUN: --check-prefix=CHECK-RESERVE-X30
|
|
|
|
; x18 is reserved as a platform register on Darwin but not on other
|
|
; systems. Create loads of register pressure and make sure this is respected.
|
|
|
|
; Also, fp must always refer to a valid frame record, even if it's not the one
|
|
; of the current function, so it shouldn't be used either.
|
|
|
|
@var = global [30 x i64] zeroinitializer
|
|
|
|
define void @keep_live() {
|
|
%val = load volatile [30 x i64], [30 x i64]* @var
|
|
store volatile [30 x i64] %val, [30 x i64]* @var
|
|
|
|
; CHECK: ldr x18
|
|
; CHECK: str x18
|
|
|
|
; CHECK-RESERVE-NOT: ldr fp
|
|
; CHECK-RESERVE-X1-NOT: ldr x1,
|
|
; CHECK-RESERVE-X2-NOT: ldr x2,
|
|
; CHECK-RESERVE-X3-NOT: ldr x3,
|
|
; CHECK-RESERVE-X4-NOT: ldr x4,
|
|
; CHECK-RESERVE-X5-NOT: ldr x5,
|
|
; CHECK-RESERVE-X6-NOT: ldr x6,
|
|
; CHECK-RESERVE-X7-NOT: ldr x7,
|
|
; CHECK-RESERVE-X9-NOT: ldr x9,
|
|
; CHECK-RESERVE-X10-NOT: ldr x10,
|
|
; CHECK-RESERVE-X11-NOT: ldr x11,
|
|
; CHECK-RESERVE-X12-NOT: ldr x12,
|
|
; CHECK-RESERVE-X13-NOT: ldr x13,
|
|
; CHECK-RESERVE-X14-NOT: ldr x14,
|
|
; CHECK-RESERVE-X15-NOT: ldr x15,
|
|
; CHECK-RESERVE-X18-NOT: ldr x18
|
|
; CHECK-RESERVE-X20-NOT: ldr x20
|
|
; CHECK-RESERVE-X21-NOT: ldr x21
|
|
; CHECK-RESERVE-X22-NOT: ldr x22
|
|
; CHECK-RESERVE-X23-NOT: ldr x23
|
|
; CHECK-RESERVE-X24-NOT: ldr x24
|
|
; CHECK-RESERVE-X25-NOT: ldr x25
|
|
; CHECK-RESERVE-X26-NOT: ldr x26
|
|
; CHECK-RESERVE-X27-NOT: ldr x27
|
|
; CHECK-RESERVE-X28-NOT: ldr x28
|
|
; CHECK-RESERVE-X30-NOT: ldr x30
|
|
; CHECK-RESERVE: Spill
|
|
; CHECK-RESERVE-NOT: ldr fp
|
|
; CHECK-RESERVE-X1-NOT: ldr x1,
|
|
; CHECK-RESERVE-X2-NOT: ldr x2,
|
|
; CHECK-RESERVE-X3-NOT: ldr x3,
|
|
; CHECK-RESERVE-X4-NOT: ldr x4,
|
|
; CHECK-RESERVE-X5-NOT: ldr x5,
|
|
; CHECK-RESERVE-X6-NOT: ldr x6,
|
|
; CHECK-RESERVE-X7-NOT: ldr x7,
|
|
; CHECK-RESERVE-X9-NOT: ldr x9,
|
|
; CHECK-RESERVE-X10-NOT: ldr x10,
|
|
; CHECK-RESERVE-X11-NOT: ldr x11,
|
|
; CHECK-RESERVE-X12-NOT: ldr x12,
|
|
; CHECK-RESERVE-X13-NOT: ldr x13,
|
|
; CHECK-RESERVE-X14-NOT: ldr x14,
|
|
; CHECK-RESERVE-X15-NOT: ldr x15,
|
|
; CHECK-RESERVE-X18-NOT: ldr x18
|
|
; CHECK-RESERVE-X20-NOT: ldr x20
|
|
; CHECK-RESERVE-X21-NOT: ldr x21
|
|
; CHECK-RESERVE-X22-NOT: ldr x22
|
|
; CHECK-RESERVE-X23-NOT: ldr x23
|
|
; CHECK-RESERVE-X24-NOT: ldr x24
|
|
; CHECK-RESERVE-X25-NOT: ldr x25
|
|
; CHECK-RESERVE-X26-NOT: ldr x26
|
|
; CHECK-RESERVE-X27-NOT: ldr x27
|
|
; CHECK-RESERVE-X28-NOT: ldr x28
|
|
; CHECK-RESERVE-X30-NOT: ldr x30
|
|
; CHECK-RESERVE: ret
|
|
ret void
|
|
}
|