mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-12 23:40:54 +00:00
d837ce2087
The REX prefix should be used on indirect jmps, but not direct ones. For direct jumps, the unwinder looks at the offset to determine if it's inside the current function. Differential Revision: https://reviews.llvm.org/D24359 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281003 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: 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 }
|
|
|