mirror of
https://github.com/RPCS3/llvm.git
synced 2026-08-28 05:10:05 -04:00
bfffaf778f
This initial patch doesn't actually do much useful. It's just to show where the new code goes. Once this is in, I'll extend the verification logic to check more useful properties. For those curious, the more complicated version of this patch already found one very suspicious thing. Differential Revision: https://reviews.llvm.org/D33819 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304564 91177308-0d34-0410-b5e6-96231b3b80d8
23 lines
803 B
LLVM
23 lines
803 B
LLVM
; RUN: llc -verify-machineinstrs < %s | FileCheck %s
|
|
; Test to check that Statepoints with X64 far-immediate targets
|
|
; are lowered correctly to an indirect call via a scratch register.
|
|
|
|
target datalayout = "e-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-pc-win64"
|
|
|
|
define void @test_far_call() gc "statepoint-example" {
|
|
; CHECK-LABEL: test_far_call
|
|
; CHECK: pushq %rax
|
|
; CHECK: movabsq $140727162896504, %rax
|
|
; CHECK: callq *%rax
|
|
; CHECK: popq %rax
|
|
; CHECK: retq
|
|
|
|
entry:
|
|
%safepoint_token = call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* inttoptr (i64 140727162896504 to void ()*), i32 0, i32 0, i32 0, i32 0)
|
|
ret void
|
|
}
|
|
|
|
declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...)
|
|
|