mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-13 23:18:58 +00:00
77a84a9451
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253927 91177308-0d34-0410-b5e6-96231b3b80d8
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 }
|
|
|