1 ; RUN: llc < %s -mtriple="x86_64-pc-linux-gnu" | FileCheck %s
5 define void @f_0(<1024 x i64> %val) {
6 ; CHECK: .quad 2882400015
7 ; CHECK-NEXT: .long .Ltmp0-f_0
13 ; CHECK-NEXT: .short 8
14 ; CHECK-NEXT: .short 0
15 ; CHECK-NEXT: .short 0
20 ; CHECK-NEXT: .short 8
21 ; CHECK-NEXT: .short 0
22 ; CHECK-NEXT: .short 0
27 ; CHECK-NEXT: .short 8
28 ; CHECK-NEXT: .short 0
29 ; CHECK-NEXT: .short 0
34 ; CHECK-NEXT: .short 8192
35 ; CHECK-NEXT: .short 7
36 ; CHECK-NEXT: .short 0
39 ; CHECK-NEXT: .p2align 3
40 call void @callee() [ "deopt"(<1024 x i64> %val) ]
44 define void @f_1(<1024 x ptr> %val) {
45 ; CHECK: .quad 2882400015
46 ; CHECK-NEXT: .long .Ltmp1-f_1
47 ; CHECK-NEXT: .short 0
48 ; CHECK-NEXT: .short 4
52 ; CHECK-NEXT: .short 8
53 ; CHECK-NEXT: .short 0
54 ; CHECK-NEXT: .short 0
59 ; CHECK-NEXT: .short 8
60 ; CHECK-NEXT: .short 0
61 ; CHECK-NEXT: .short 0
66 ; CHECK-NEXT: .short 8
67 ; CHECK-NEXT: .short 0
68 ; CHECK-NEXT: .short 0
73 ; CHECK-NEXT: .short 8192
74 ; CHECK-NEXT: .short 7
75 ; CHECK-NEXT: .short 0
78 ; CHECK-NEXT: .p2align 3
79 call void @callee() [ "deopt"(<1024 x ptr> %val) ]
83 define void @f_2(<99 x ptr> %val) {
84 ; CHECK: .quad 2882400015
85 ; CHECK-NEXT: .long .Ltmp2-f_2
86 ; CHECK-NEXT: .short 0
87 ; CHECK-NEXT: .short 4
91 ; CHECK-NEXT: .short 8
92 ; CHECK-NEXT: .short 0
93 ; CHECK-NEXT: .short 0
98 ; CHECK-NEXT: .short 8
99 ; CHECK-NEXT: .short 0
100 ; CHECK-NEXT: .short 0
101 ; CHECK-NEXT: .long 0
103 ; CHECK-NEXT: .byte 4
104 ; CHECK-NEXT: .byte 0
105 ; CHECK-NEXT: .short 8
106 ; CHECK-NEXT: .short 0
107 ; CHECK-NEXT: .short 0
108 ; CHECK-NEXT: .long 1
110 ; CHECK-NEXT: .byte 3
111 ; CHECK-NEXT: .byte 0
112 ; CHECK-NEXT: .short 792
113 ; CHECK-NEXT: .short 7
114 ; CHECK-NEXT: .short 0
115 ; CHECK-NEXT: .long 0
116 ; CHECK-NEXT: .p2align 3
117 call void @callee() [ "deopt"(<99 x ptr> %val) ]
122 define <400 x ptr addrspace(1)> @f_3(<400 x ptr addrspace(1)> %obj) gc "statepoint-example" {
124 ; CHECK-NEXT: .long .Ltmp3-f_3
125 ; CHECK-NEXT: .short 0
126 ; CHECK-NEXT: .short 5
128 ; CHECK-NEXT: .byte 4
129 ; CHECK-NEXT: .byte 0
130 ; CHECK-NEXT: .short 8
131 ; CHECK-NEXT: .short 0
132 ; CHECK-NEXT: .short 0
133 ; CHECK-NEXT: .long 0
135 ; CHECK-NEXT: .byte 4
136 ; CHECK-NEXT: .byte 0
137 ; CHECK-NEXT: .short 8
138 ; CHECK-NEXT: .short 0
139 ; CHECK-NEXT: .short 0
140 ; CHECK-NEXT: .long 0
142 ; CHECK-NEXT: .byte 4
143 ; CHECK-NEXT: .byte 0
144 ; CHECK-NEXT: .short 8
145 ; CHECK-NEXT: .short 0
146 ; CHECK-NEXT: .short 0
147 ; CHECK-NEXT: .long 0
149 ; CHECK-NEXT: .byte 3
150 ; CHECK-NEXT: .byte 0
151 ; CHECK-NEXT: .short 3200
152 ; CHECK-NEXT: .short 7
153 ; CHECK-NEXT: .short 0
154 ; CHECK-NEXT: .long 0
156 ; CHECK-NEXT: .byte 3
157 ; CHECK-NEXT: .byte 0
158 ; CHECK-NEXT: .short 3200
159 ; CHECK-NEXT: .short 7
160 ; CHECK-NEXT: .short 0
161 ; CHECK-NEXT: .long 0
163 ; CHECK-NEXT: .p2align 3
164 %tok = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 4242, i32 0, ptr elementtype(void ()) @do_safepoint, i32 0, i32 0, i32 0, i32 0) ["gc-live"(<400 x ptr addrspace(1)> %obj)]
165 %obj.r = call coldcc <400 x ptr addrspace(1)> @llvm.experimental.gc.relocate.v400p1(token %tok, i32 0, i32 0)
166 ret <400 x ptr addrspace(1)> %obj.r
169 declare void @do_safepoint()
171 declare token @llvm.experimental.gc.statepoint.p0(i64, i32, ptr, i32, i32, ...)
172 declare <400 x ptr addrspace(1)> @llvm.experimental.gc.relocate.v400p1(token, i32, i32)