blob: 9ce5254caa8131d11c0f88562b0c3697c9492843 [file] [log] [blame]
Juergen Ributzkae8294752013-12-14 06:53:06 +00001; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx -disable-fp-elim | FileCheck %s
2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx -disable-fp-elim -enable-stackmap-liveness| FileCheck -check-prefix=STACK %s
3; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx -disable-fp-elim -enable-patchpoint-liveness| FileCheck -check-prefix=PATCH %s
4;
5; Note: Print verbose stackmaps using -debug-only=stackmaps.
6
7; CHECK-LABEL: .section __LLVM_STACKMAPS,__llvm_stackmaps
8; CHECK-NEXT: __LLVM_StackMaps:
Juergen Ributzkae1179922014-03-31 22:14:04 +00009; Header
10; CHECK-NEXT: .byte 1
11; CHECK-NEXT: .byte 0
12; CHECK-NEXT: .short 0
Juergen Ributzkafb4d6482014-01-30 18:58:27 +000013; Num Functions
14; CHECK-NEXT: .long 2
Juergen Ributzkae8294752013-12-14 06:53:06 +000015; Num LargeConstants
16; CHECK-NEXT: .long 0
17; Num Callsites
18; CHECK-NEXT: .long 5
Juergen Ributzkae1179922014-03-31 22:14:04 +000019
20; Functions and stack size
21; CHECK-NEXT: .quad _stackmap_liveness
22; CHECK-NEXT: .quad 8
23; CHECK-NEXT: .quad _mixed_liveness
24; CHECK-NEXT: .quad 8
25
Juergen Ributzkae8294752013-12-14 06:53:06 +000026define void @stackmap_liveness() {
27entry:
28 %a1 = call <2 x double> asm sideeffect "", "={xmm2}"() nounwind
29; StackMap 1 (no liveness information available)
30; CHECK-LABEL: .long L{{.*}}-_stackmap_liveness
31; CHECK-NEXT: .short 0
32; CHECK-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +000033; Padding
34; CHECK-NEXT: .short 0
Juergen Ributzkae8294752013-12-14 06:53:06 +000035; Num LiveOut Entries: 0
36; CHECK-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +000037; Align
38; CHECK-NEXT: .align 3
Juergen Ributzkae8294752013-12-14 06:53:06 +000039
40; StackMap 1 (stackmap liveness information enabled)
41; STACK-LABEL: .long L{{.*}}-_stackmap_liveness
42; STACK-NEXT: .short 0
43; STACK-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +000044; Padding
45; STACK-NEXT: .short 0
Juergen Ributzkae8294752013-12-14 06:53:06 +000046; Num LiveOut Entries: 2
47; STACK-NEXT: .short 2
48; LiveOut Entry 1: %RSP (8 bytes)
49; STACK-NEXT: .short 7
50; STACK-NEXT: .byte 0
51; STACK-NEXT: .byte 8
52; LiveOut Entry 2: %YMM2 (16 bytes) --> %XMM2
53; STACK-NEXT: .short 19
54; STACK-NEXT: .byte 0
55; STACK-NEXT: .byte 16
Juergen Ributzkae1179922014-03-31 22:14:04 +000056; Align
57; STACK-NEXT: .align 3
Juergen Ributzkae8294752013-12-14 06:53:06 +000058
59; StackMap 1 (patchpoint liveness information enabled)
60; PATCH-LABEL: .long L{{.*}}-_stackmap_liveness
61; PATCH-NEXT: .short 0
62; PATCH-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +000063; Padding
64; PATCH-NEXT: .short 0
Juergen Ributzkae8294752013-12-14 06:53:06 +000065; Num LiveOut Entries: 0
66; PATCH-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +000067; Align
68; PATCH-NEXT: .align 3
Juergen Ributzkae8294752013-12-14 06:53:06 +000069 call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 1, i32 5)
70 %a2 = call i64 asm sideeffect "", "={r8}"() nounwind
71 %a3 = call i8 asm sideeffect "", "={ah}"() nounwind
72 %a4 = call <4 x double> asm sideeffect "", "={ymm0}"() nounwind
73 %a5 = call <4 x double> asm sideeffect "", "={ymm1}"() nounwind
74
75; StackMap 2 (no liveness information available)
76; CHECK-LABEL: .long L{{.*}}-_stackmap_liveness
77; CHECK-NEXT: .short 0
78; CHECK-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +000079; Padding
80; CHECK-NEXT: .short 0
Juergen Ributzkae8294752013-12-14 06:53:06 +000081; Num LiveOut Entries: 0
82; CHECK-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +000083; Align
84; CHECK-NEXT: .align 3
Juergen Ributzkae8294752013-12-14 06:53:06 +000085
86; StackMap 2 (stackmap liveness information enabled)
87; STACK-LABEL: .long L{{.*}}-_stackmap_liveness
88; STACK-NEXT: .short 0
89; STACK-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +000090; Padding
91; STACK-NEXT: .short 0
Juergen Ributzkae8294752013-12-14 06:53:06 +000092; Num LiveOut Entries: 6
93; STACK-NEXT: .short 6
Juergen Ributzkae1179922014-03-31 22:14:04 +000094; LiveOut Entry 1: %RAX (1 bytes) --> %AL or %AH
Juergen Ributzkae8294752013-12-14 06:53:06 +000095; STACK-NEXT: .short 0
96; STACK-NEXT: .byte 0
97; STACK-NEXT: .byte 1
98; LiveOut Entry 2: %RSP (8 bytes)
99; STACK-NEXT: .short 7
100; STACK-NEXT: .byte 0
101; STACK-NEXT: .byte 8
Juergen Ributzkae1179922014-03-31 22:14:04 +0000102; LiveOut Entry 3: %R8 (8 bytes)
Juergen Ributzkae8294752013-12-14 06:53:06 +0000103; STACK-NEXT: .short 8
104; STACK-NEXT: .byte 0
105; STACK-NEXT: .byte 8
Juergen Ributzkae1179922014-03-31 22:14:04 +0000106; LiveOut Entry 4: %YMM0 (32 bytes)
Juergen Ributzkae8294752013-12-14 06:53:06 +0000107; STACK-NEXT: .short 17
108; STACK-NEXT: .byte 0
109; STACK-NEXT: .byte 32
Juergen Ributzkae1179922014-03-31 22:14:04 +0000110; LiveOut Entry 5: %YMM1 (32 bytes)
Juergen Ributzkae8294752013-12-14 06:53:06 +0000111; STACK-NEXT: .short 18
112; STACK-NEXT: .byte 0
113; STACK-NEXT: .byte 32
Juergen Ributzkae1179922014-03-31 22:14:04 +0000114; LiveOut Entry 6: %YMM2 (16 bytes) --> %XMM2
Juergen Ributzkae8294752013-12-14 06:53:06 +0000115; STACK-NEXT: .short 19
116; STACK-NEXT: .byte 0
117; STACK-NEXT: .byte 16
Juergen Ributzkae1179922014-03-31 22:14:04 +0000118; Align
119; STACK-NEXT: .align 3
Juergen Ributzkae8294752013-12-14 06:53:06 +0000120
121; StackMap 2 (patchpoint liveness information enabled)
122; PATCH-LABEL: .long L{{.*}}-_stackmap_liveness
123; PATCH-NEXT: .short 0
124; PATCH-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +0000125; Padding
126; PATCH-NEXT: .short 0
Juergen Ributzkae8294752013-12-14 06:53:06 +0000127; Num LiveOut Entries: 0
128; PATCH-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +0000129; Align
130; PATCH-NEXT: .align 3
Juergen Ributzkae8294752013-12-14 06:53:06 +0000131 call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 2, i32 5)
132 call void asm sideeffect "", "{r8},{ah},{ymm0},{ymm1}"(i64 %a2, i8 %a3, <4 x double> %a4, <4 x double> %a5) nounwind
133
134; StackMap 3 (no liveness information available)
135; CHECK-LABEL: .long L{{.*}}-_stackmap_liveness
136; CHECK-NEXT: .short 0
137; CHECK-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +0000138; Padding
139; CHECK-NEXT: .short 0
Juergen Ributzkae8294752013-12-14 06:53:06 +0000140; Num LiveOut Entries: 0
141; CHECK-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +0000142; Align
143; CHECK-NEXT: .align 3
Juergen Ributzkae8294752013-12-14 06:53:06 +0000144
145; StackMap 3 (stackmap liveness information enabled)
146; STACK-LABEL: .long L{{.*}}-_stackmap_liveness
147; STACK-NEXT: .short 0
148; STACK-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +0000149; Padding
150; STACK-NEXT: .short 0
Juergen Ributzkae8294752013-12-14 06:53:06 +0000151; Num LiveOut Entries: 2
152; STACK-NEXT: .short 2
Juergen Ributzkae1179922014-03-31 22:14:04 +0000153; LiveOut Entry 1: %RSP (8 bytes)
Juergen Ributzkae8294752013-12-14 06:53:06 +0000154; STACK-NEXT: .short 7
155; STACK-NEXT: .byte 0
156; STACK-NEXT: .byte 8
157; LiveOut Entry 2: %YMM2 (16 bytes) --> %XMM2
158; STACK-NEXT: .short 19
159; STACK-NEXT: .byte 0
160; STACK-NEXT: .byte 16
Juergen Ributzkae1179922014-03-31 22:14:04 +0000161; Align
162; STACK-NEXT: .align 3
Juergen Ributzkae8294752013-12-14 06:53:06 +0000163
164; StackMap 3 (patchpoint liveness information enabled)
165; PATCH-LABEL: .long L{{.*}}-_stackmap_liveness
166; PATCH-NEXT: .short 0
167; PATCH-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +0000168; Padding
169; PATCH-NEXT: .short 0
Juergen Ributzkae8294752013-12-14 06:53:06 +0000170; Num LiveOut Entries: 0
171; PATCH-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +0000172; Align
173; PATCH-NEXT: .align 3
Juergen Ributzkae8294752013-12-14 06:53:06 +0000174 call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 3, i32 5)
175 call void asm sideeffect "", "{xmm2}"(<2 x double> %a1) nounwind
176 ret void
177}
178
179define void @mixed_liveness() {
180entry:
181 %a1 = call <2 x double> asm sideeffect "", "={xmm2}"() nounwind
182; StackMap 4 (stackmap liveness information enabled)
183; STACK-LABEL: .long L{{.*}}-_mixed_liveness
184; STACK-NEXT: .short 0
185; STACK-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +0000186; Padding
187; STACK-NEXT: .short 0
Juergen Ributzkae8294752013-12-14 06:53:06 +0000188; Num LiveOut Entries: 1
189; STACK-NEXT: .short 1
190; LiveOut Entry 1: %YMM2 (16 bytes) --> %XMM2
191; STACK-NEXT: .short 19
192; STACK-NEXT: .byte 0
193; STACK-NEXT: .byte 16
Juergen Ributzkae1179922014-03-31 22:14:04 +0000194; Align
195; STACK-NEXT: .align 3
196
197
Juergen Ributzkae8294752013-12-14 06:53:06 +0000198; StackMap 5 (stackmap liveness information enabled)
199; STACK-LABEL: .long L{{.*}}-_mixed_liveness
200; STACK-NEXT: .short 0
201; STACK-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +0000202; Padding
203; STACK-NEXT: .short 0
Juergen Ributzkae8294752013-12-14 06:53:06 +0000204; Num LiveOut Entries: 0
205; STACK-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +0000206; Align
207; STACK-NEXT: .align 3
Juergen Ributzkae8294752013-12-14 06:53:06 +0000208
209; StackMap 4 (patchpoint liveness information enabled)
210; PATCH-LABEL: .long L{{.*}}-_mixed_liveness
211; PATCH-NEXT: .short 0
212; PATCH-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +0000213; Padding
214; PATCH-NEXT: .short 0
Juergen Ributzkae8294752013-12-14 06:53:06 +0000215; Num LiveOut Entries: 0
216; PATCH-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +0000217; Align
218; PATCH-NEXT: .align 3
219
Juergen Ributzkae8294752013-12-14 06:53:06 +0000220; StackMap 5 (patchpoint liveness information enabled)
221; PATCH-LABEL: .long L{{.*}}-_mixed_liveness
222; PATCH-NEXT: .short 0
223; PATCH-NEXT: .short 0
Juergen Ributzkae1179922014-03-31 22:14:04 +0000224; Padding
225; PATCH-NEXT: .short 0
Juergen Ributzkae8294752013-12-14 06:53:06 +0000226; Num LiveOut Entries: 2
227; PATCH-NEXT: .short 2
228; LiveOut Entry 1: %RSP (8 bytes)
229; PATCH-NEXT: .short 7
230; PATCH-NEXT: .byte 0
231; PATCH-NEXT: .byte 8
Juergen Ributzkae1179922014-03-31 22:14:04 +0000232; LiveOut Entry 2: %YMM2 (16 bytes) --> %XMM2
Juergen Ributzkae8294752013-12-14 06:53:06 +0000233; PATCH-NEXT: .short 19
234; PATCH-NEXT: .byte 0
235; PATCH-NEXT: .byte 16
Juergen Ributzkae1179922014-03-31 22:14:04 +0000236; Align
237; PATCH-NEXT: .align 3
Juergen Ributzkae8294752013-12-14 06:53:06 +0000238 call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 4, i32 5)
239 call anyregcc void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 5, i32 0, i8* null, i32 0)
240 call void asm sideeffect "", "{xmm2}"(<2 x double> %a1) nounwind
241 ret void
242}
243
244declare void @llvm.experimental.stackmap(i64, i32, ...)
245declare void @llvm.experimental.patchpoint.void(i64, i32, i8*, i32, ...)