mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
23dcf5ab2d
For context of anyone following along, we've not completed the migration of statepoint to the operand bundle form. The only remaining piece is to actually version the statepoint intrinsic to remove the old inline operand sets. That will follow when I have some time; delay is useful here to allow downstream migrations.
173 lines
4.1 KiB
LLVM
173 lines
4.1 KiB
LLVM
; RUN: llc < %s -mtriple="x86_64-pc-linux-gnu" | FileCheck %s
|
|
|
|
declare void @callee()
|
|
|
|
define void @f_0(<1024 x i64> %val) {
|
|
; CHECK: .quad 2882400015
|
|
; CHECK-NEXT: .long .Ltmp0-f_0
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 4
|
|
; Constant(0)
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; Constant(0)
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; Constant(1)
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 1
|
|
; Indirect
|
|
; CHECK-NEXT: .byte 3
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 8192
|
|
; CHECK-NEXT: .short 7
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; Padding
|
|
; CHECK-NEXT: .p2align 3
|
|
call void @callee() [ "deopt"(<1024 x i64> %val) ]
|
|
ret void
|
|
}
|
|
|
|
define void @f_1(<1024 x i8*> %val) {
|
|
; CHECK: .quad 2882400015
|
|
; CHECK-NEXT: .long .Ltmp1-f_1
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 4
|
|
; Constant(0)
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; Constant(0)
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; Constant(1)
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 1
|
|
; Indirect
|
|
; CHECK-NEXT: .byte 3
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 8192
|
|
; CHECK-NEXT: .short 7
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; Padding
|
|
; CHECK-NEXT: .p2align 3
|
|
call void @callee() [ "deopt"(<1024 x i8*> %val) ]
|
|
ret void
|
|
}
|
|
|
|
define void @f_2(<99 x i8*> %val) {
|
|
; CHECK: .quad 2882400015
|
|
; CHECK-NEXT: .long .Ltmp2-f_2
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 4
|
|
; Constant(0)
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; Constant(0)
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; Constant(1)
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 1
|
|
; Indirect
|
|
; CHECK-NEXT: .byte 3
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 792
|
|
; CHECK-NEXT: .short 7
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; CHECK-NEXT: .p2align 3
|
|
call void @callee() [ "deopt"(<99 x i8*> %val) ]
|
|
ret void
|
|
}
|
|
|
|
|
|
define <400 x i8 addrspace(1)*> @f_3(<400 x i8 addrspace(1)*> %obj) gc "statepoint-example" {
|
|
; CHECK: .quad 4242
|
|
; CHECK-NEXT: .long .Ltmp3-f_3
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 5
|
|
; Constant(0)
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; Constant(0)
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; Constant(0)
|
|
; CHECK-NEXT: .byte 4
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 8
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; Indirect
|
|
; CHECK-NEXT: .byte 3
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 3200
|
|
; CHECK-NEXT: .short 7
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; Indirect
|
|
; CHECK-NEXT: .byte 3
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .short 3200
|
|
; CHECK-NEXT: .short 7
|
|
; CHECK-NEXT: .short 0
|
|
; CHECK-NEXT: .long 0
|
|
; Padding
|
|
; CHECK-NEXT: .p2align 3
|
|
%tok = call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 4242, i32 0, void ()* @do_safepoint, i32 0, i32 0, i32 0, i32 0) ["gc-live"(<400 x i8 addrspace(1)*> %obj)]
|
|
%obj.r = call coldcc <400 x i8 addrspace(1)*> @llvm.experimental.gc.relocate.v400p1i8(token %tok, i32 0, i32 0)
|
|
ret <400 x i8 addrspace(1)*> %obj.r
|
|
}
|
|
|
|
declare void @do_safepoint()
|
|
|
|
declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...)
|
|
declare <400 x i8 addrspace(1)*> @llvm.experimental.gc.relocate.v400p1i8(token, i32, i32)
|