mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
469dd5010d
This is a follow up to D48580 and D48581 which allows reserving arbitrary general purpose registers with the exception of registers with special purpose (X8, X16-X18, X29, X30) and registers used by LLVM (X0, X19). This change also generalizes some of the existing logic to rely entirely on values generated from tablegen. Differential Revision: https://reviews.llvm.org/D56305 llvm-svn: 353957
78 lines
4.4 KiB
LLVM
78 lines
4.4 KiB
LLVM
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x9 -mattr=+call-saved-x9 -o - %s | FileCheck %s --check-prefixes=CHECK-X9
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x9 -mattr=+call-saved-x9 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X9
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x9 -mattr=+call-saved-x9 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X9
|
|
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x10 -mattr=+call-saved-x10 -o - %s | FileCheck %s --check-prefixes=CHECK-X10
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x10 -mattr=+call-saved-x10 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X10
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x10 -mattr=+call-saved-x10 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X10
|
|
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x11 -mattr=+call-saved-x11 -o - %s | FileCheck %s --check-prefixes=CHECK-X11
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x11 -mattr=+call-saved-x11 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X11
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x11 -mattr=+call-saved-x11 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X11
|
|
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x12 -mattr=+call-saved-x12 -o - %s | FileCheck %s --check-prefixes=CHECK-X12
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x12 -mattr=+call-saved-x12 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X12
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x12 -mattr=+call-saved-x12 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X12
|
|
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x13 -mattr=+call-saved-x13 -o - %s | FileCheck %s --check-prefixes=CHECK-X13
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x13 -mattr=+call-saved-x13 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X13
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x13 -mattr=+call-saved-x13 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X13
|
|
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x14 -mattr=+call-saved-x14 -o - %s | FileCheck %s --check-prefixes=CHECK-X14
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x14 -mattr=+call-saved-x14 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X14
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x14 -mattr=+call-saved-x14 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X14
|
|
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x15 -mattr=+call-saved-x15 -o - %s | FileCheck %s --check-prefixes=CHECK-X15
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x15 -mattr=+call-saved-x15 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X15
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x15 -mattr=+call-saved-x15 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X15
|
|
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x18 -mattr=+call-saved-x18 -o - %s | FileCheck %s --check-prefixes=CHECK-X18
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x18 -mattr=+call-saved-x18 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X18
|
|
; RUN: llc -mtriple=arm64-linux-gnu -mattr=+reserve-x18 -mattr=+call-saved-x18 -fast-isel -o - %s | FileCheck %s --check-prefixes=CHECK-X18
|
|
|
|
; 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-X9-NOT: str x9, [sp
|
|
; CHECK-X10-NOT: str x10, [sp
|
|
; CHECK-X11-NOT: str x11, [sp
|
|
; CHECK-X12-NOT: str x12, [sp
|
|
; CHECK-X13-NOT: str x13, [sp
|
|
; CHECK-X14-NOT: str x14, [sp
|
|
; CHECK-X15-NOT: str x15, [sp
|
|
; CHECK-X18-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-X9-NOT: ldr x9
|
|
; CHECK-X10-NOT: ldr x10
|
|
; CHECK-X11-NOT: ldr x11
|
|
; CHECK-X12-NOT: ldr x12
|
|
; CHECK-X13-NOT: ldr x13
|
|
; CHECK-X14-NOT: ldr x14
|
|
; CHECK-X15-NOT: ldr x15
|
|
; CHECK-X18-NOT: ldr x18
|
|
; CHECK-X9-NOT: str x9
|
|
; CHECK-X10-NOT: str x10
|
|
; CHECK-X11-NOT: str x11
|
|
; CHECK-X12-NOT: str x12
|
|
; CHECK-X13-NOT: str x13
|
|
; CHECK-X14-NOT: str x14
|
|
; CHECK-X15-NOT: str x15
|
|
; CHECK-X18-NOT: str x18
|
|
|
|
; CHECK-X9-NOT: ldr x9, [sp
|
|
; CHECK-X10-NOT: ldr x10, [sp
|
|
; CHECK-X11-NOT: ldr x11, [sp
|
|
; CHECK-X12-NOT: ldr x12, [sp
|
|
; CHECK-X13-NOT: ldr x13, [sp
|
|
; CHECK-X14-NOT: ldr x14, [sp
|
|
; CHECK-X15-NOT: ldr x15, [sp
|
|
; CHECK-X18-NOT: ldr x18, [sp
|
|
ret void
|
|
}
|