mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-21 00:32:23 +00:00
8f5c829c1e
The TOC base pointer is passed in r2, and we normally reserve this register so that we can depend on it being there. However, for leaf functions, and specifically those leaf functions that don't do any TOC access of their own (which is generally due to accessing the constant pool, using TLS, etc.), we can treat r2 as an ordinary callee-saved register (it must be callee-saved because, for local direct calls, the linker will not insert any save/restore code). The allocation order has been changed slightly for PPC64/ELF systems to put r2 at the end of the list (while leaving it near the beginning for Darwin systems to prevent unnecessary output changes). While r2 is allocatable, using it still requires spill/restore traffic, and thus comes at the end of the list. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227745 91177308-0d34-0410-b5e6-96231b3b80d8
19 lines
624 B
LLVM
19 lines
624 B
LLVM
; RUN: not llc < %s -mtriple=powerpc-apple-darwin 2>&1 | FileCheck %s --check-prefix=CHECK-NOTPPC32
|
|
; RUN: llc < %s -mtriple=powerpc-unknown-linux-gnu 2>&1 | FileCheck %s
|
|
; RUN: not llc < %s -mtriple=powerpc64-unknown-linux-gnu 2>&1 | FileCheck %s --check-prefix=CHECK-NOTPPC32
|
|
|
|
define i32 @get_reg() nounwind {
|
|
entry:
|
|
; FIXME: Include an allocatable-specific error message
|
|
; CHECK-NOTPPC32: Invalid register name global variable
|
|
%reg = call i32 @llvm.read_register.i32(metadata !0)
|
|
ret i32 %reg
|
|
|
|
; CHECK-LABEL: @get_reg
|
|
; CHECK: mr 3, 2
|
|
}
|
|
|
|
declare i32 @llvm.read_register.i32(metadata) nounwind
|
|
|
|
!0 = !{!"r2\00"}
|