[opaque pointer type] Add textual IR support for explicit type parameter to the call...
[oota-llvm.git] / test / CodeGen / X86 / statepoint-stackmap-format.ll
1 ; RUN: llc < %s | FileCheck %s
2 ; This test is a sanity check to ensure statepoints are generating StackMap
3 ; sections correctly.  This is not intended to be a rigorous test of the 
4 ; StackMap format (see the stackmap tests for that).
5
6 target datalayout = "e-i64:64-f80:128-n8:16:32:64-S128"
7 target triple = "x86_64-pc-linux-gnu"
8
9 declare zeroext i1 @return_i1()
10
11 define i1 @test(i32 addrspace(1)* %ptr) gc "statepoint-example" {
12 ; CHECK-LABEL: test
13 ; Do we see one spill for the local value and the store to the
14 ; alloca?
15 ; CHECK: subq   $24, %rsp
16 ; CHECK: movq   $0, 8(%rsp)
17 ; CHECK: movq   %rdi, (%rsp)
18 ; CHECK: callq return_i1
19 ; CHECK: addq   $24, %rsp
20 ; CHECK: retq
21 entry:
22   %metadata1 = alloca i32 addrspace(1)*, i32 2, align 8
23   store i32 addrspace(1)* null, i32 addrspace(1)** %metadata1
24   %safepoint_token = tail call i32 (i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 2, i32 addrspace(1)* %ptr, i32 addrspace(1)* null, i32 addrspace(1)* %ptr, i32 addrspace(1)* null)
25   %call1 = call zeroext i1 @llvm.experimental.gc.result.i1(i32 %safepoint_token)
26   %a = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(i32 %safepoint_token, i32 6, i32 6)
27   %b = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(i32 %safepoint_token, i32 7, i32 7)
28
29   ret i1 %call1
30 }
31
32 declare i32 @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()*, i32, i32, ...)
33 declare i1 @llvm.experimental.gc.result.i1(i32)
34 declare i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(i32, i32, i32) #3
35
36
37 ; CHECK-LABEL: .section .llvm_stackmaps
38 ; CHECK-NEXT:  __LLVM_StackMaps:
39 ; Header
40 ; CHECK-NEXT:   .byte 1
41 ; CHECK-NEXT:   .byte 0
42 ; CHECK-NEXT:   .short 0
43 ; Num Functions
44 ; CHECK-NEXT:   .long 1
45 ; Num LargeConstants
46 ; CHECK-NEXT:   .long 0
47 ; Num Callsites
48 ; CHECK-NEXT:   .long 1
49
50 ; Functions and stack size
51 ; CHECK-NEXT:   .quad test
52 ; CHECK-NEXT:   .quad 24
53
54 ; Large Constants
55 ; Statepoint ID only
56 ; CHECK: .quad  2882400000
57
58 ; Callsites
59 ; Constant arguments
60 ; CHECK: .long  .Ltmp1-test
61 ; CHECK: .short 0
62 ; CHECK: .short 8
63 ; SmallConstant (0)
64 ; CHECK: .byte  4
65 ; CHECK: .byte  8
66 ; CHECK: .short 0
67 ; CHECK: .long  0
68 ; SmallConstant (2)
69 ; CHECK: .byte  4
70 ; CHECK: .byte  8
71 ; CHECK: .short 0
72 ; CHECK: .long  2
73 ; Direct Spill Slot [RSP+0]
74 ; CHECK: .byte  2
75 ; CHECK: .byte  8
76 ; CHECK: .short 7
77 ; CHECK: .long  0
78 ; SmallConstant  (0)
79 ; CHECK: .byte  4
80 ; CHECK: .byte  8
81 ; CHECK: .short 0
82 ; CHECK: .long  0
83 ; SmallConstant  (0)
84 ; CHECK: .byte  4
85 ; CHECK: .byte  8
86 ; CHECK: .short 0
87 ; CHECK: .long  0
88 ; SmallConstant  (0)
89 ; CHECK: .byte  4
90 ; CHECK: .byte  8
91 ; CHECK: .short 0
92 ; CHECK: .long  0
93 ; Direct Spill Slot [RSP+0]
94 ; CHECK: .byte  2
95 ; CHECK: .byte  8
96 ; CHECK: .short 7
97 ; CHECK: .long  0
98 ; Direct Spill Slot [RSP+0]
99 ; CHECK: .byte  2
100 ; CHECK: .byte  8
101 ; CHECK: .short 7
102 ; CHECK: .long  0
103
104 ; No Padding or LiveOuts
105 ; CHECK: .short 0
106 ; CHECK: .short 0
107 ; CHECK: .align 8
108
109