mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-04 01:11:44 +00:00
5fba38a9da
Caller saved regs differ between SysV and Win64. Use the tail call available set to scavenge from. Refactor register info to create new helper to get at tail call GPRs. Added a new test case for windows. Fixed up a number of X64 tests since now RCX is preferred over RDX on SysV. Differential Revision: http://reviews.llvm.org/D14878 llvm-svn: 253927
39 lines
1.1 KiB
LLVM
39 lines
1.1 KiB
LLVM
; RUN: llc < %s -mtriple=x86_64-pc-win32-coreclr | FileCheck %s -check-prefix=WIN_X64
|
|
; RUN: llc < %s -mtriple=x86_64-pc-linux | FileCheck %s -check-prefix=LINUX
|
|
|
|
%Object = type <{ [0 x i64*]* }>
|
|
|
|
define void @C1(%Object addrspace(1)* %param0) gc "coreclr" {
|
|
entry:
|
|
|
|
; WIN_X64: # BB#0:
|
|
; WIN_X64: pushq %rax
|
|
; LINUX: # BB#0: # %entry
|
|
; LINUX: movq $0, -8(%rsp)
|
|
|
|
%this = alloca %Object addrspace(1)*
|
|
store %Object addrspace(1)* null, %Object addrspace(1)** %this
|
|
store %Object addrspace(1)* %param0, %Object addrspace(1)** %this
|
|
br label %0
|
|
|
|
; <label>:0 ; preds = %entry
|
|
%1 = load %Object addrspace(1)*, %Object addrspace(1)** %this, align 8
|
|
|
|
; WIN_X64: xorl %r8d, %r8d
|
|
; WIN_X64: popq %rax
|
|
; WIN_X64: rex64 jmp C2 # TAILCALL
|
|
; LINUX: xorl %edx, %edx
|
|
; LINUX: jmp C2 # TAILCALL
|
|
|
|
tail call void @C2(%Object addrspace(1)* %1, i32 0, %Object addrspace(1)* null)
|
|
ret void
|
|
}
|
|
|
|
declare void @C2(%Object addrspace(1)*, i32, %Object addrspace(1)*)
|
|
|
|
; Function Attrs: nounwind
|
|
declare void @llvm.localescape(...) #0
|
|
|
|
attributes #0 = { nounwind }
|
|
|