xref: /llvm-project/llvm/test/CodeGen/X86/pcsections.ll (revision d8a04398f9492f043ffd8fbaf2458778f7d0fcd5)
1; This test should verify that adding !pcsections metadata is encoded properly
2; by the AsmPrinter. For tests to check that metadata is propagated to
3; assembly, see pcsections-*.ll tests.
4
5; RUN: llc -O0 < %s | FileCheck %s --check-prefixes=CHECK,DEFCM
6; RUN: llc -O1 < %s | FileCheck %s --check-prefixes=CHECK,DEFCM
7; RUN: llc -O2 < %s | FileCheck %s --check-prefixes=CHECK,DEFCM
8; RUN: llc -O3 < %s | FileCheck %s --check-prefixes=CHECK,DEFCM
9; RUN: llc -O1 -code-model=large < %s | FileCheck %s --check-prefixes=CHECK,LARGE
10
11target triple = "x86_64-unknown-linux-gnu"
12
13@foo = dso_local global i64 0, align 8
14@bar = dso_local global i64 0, align 8
15
16define void @empty_no_aux() !pcsections !0 {
17; CHECK-LABEL: empty_no_aux:
18; CHECK-NEXT:  .Lfunc_begin0
19; CHECK:       # %bb.0: # %entry
20; CHECK-NEXT:    retq
21; CHECK-NEXT:  .Lfunc_end0:
22; CHECK:       .section	section_no_aux,"awo",@progbits,.{{l?}}text
23; CHECK-NEXT:  .Lpcsection_base0:
24; DEFCM-NEXT:  .long	.Lfunc_begin0-.Lpcsection_base0
25; LARGE-NEXT:  .quad	.Lfunc_begin0-.Lpcsection_base0
26; CHECK-NEXT:  .long	.Lfunc_end0-.Lfunc_begin0
27; CHECK-NEXT:  .{{l?}}text
28entry:
29  ret void
30}
31
32define void @empty_aux() !pcsections !1 {
33; CHECK-LABEL: empty_aux:
34; CHECK-NEXT:  .Lfunc_begin1
35; CHECK:       # %bb.0: # %entry
36; CHECK-NEXT:    retq
37; CHECK-NEXT:  .Lfunc_end1:
38; CHECK:       .section	section_aux,"awo",@progbits,.{{l?}}text
39; CHECK-NEXT:  .Lpcsection_base1:
40; DEFCM-NEXT:  .long	.Lfunc_begin1-.Lpcsection_base1
41; LARGE-NEXT:  .quad	.Lfunc_begin1-.Lpcsection_base1
42; CHECK-NEXT:  .long	.Lfunc_end1-.Lfunc_begin1
43; CHECK-NEXT:  .long	10
44; CHECK-NEXT:  .long	20
45; CHECK-NEXT:  .long	30
46; CHECK-NEXT:  .{{l?}}text
47entry:
48  ret void
49}
50
51define i64 @multiple() !pcsections !0 {
52; CHECK-LABEL: multiple:
53; CHECK-NEXT:  .Lfunc_begin2
54; CHECK:       # %bb.0: # %entry
55; CHECK:       .Lpcsection0:
56; CHECK-NEXT:    movq
57; CHECK-NEXT:    retq
58; CHECK-NEXT:  .Lfunc_end2:
59; CHECK:       .section	section_no_aux,"awo",@progbits,.{{l?}}text
60; CHECK-NEXT:  .Lpcsection_base2:
61; DEFCM-NEXT:  .long	.Lfunc_begin2-.Lpcsection_base2
62; LARGE-NEXT:  .quad	.Lfunc_begin2-.Lpcsection_base2
63; CHECK-NEXT:  .long	.Lfunc_end2-.Lfunc_begin2
64; CHECK-NEXT:  .section	section_aux_42,"awo",@progbits,.{{l?}}text
65; CHECK-NEXT:  .Lpcsection_base3:
66; DEFCM-NEXT:  .long	.Lpcsection0-.Lpcsection_base3
67; LARGE-NEXT:  .quad	.Lpcsection0-.Lpcsection_base3
68; CHECK-NEXT:  .long	42
69; CHECK-NEXT:  .section	section_aux_21264,"awo",@progbits,.{{l?}}text
70; CHECK-NEXT:  .Lpcsection_base4:
71; DEFCM-NEXT:  .long	.Lpcsection0-.Lpcsection_base4
72; LARGE-NEXT:  .quad	.Lpcsection0-.Lpcsection_base4
73; CHECK-NEXT:  .long	21264
74; CHECK-NEXT:  .{{l?}}text
75entry:
76  %0 = load i64, ptr @bar, align 8, !pcsections !2
77  ret i64 %0
78}
79
80define void @multiple_uleb128() !pcsections !6 {
81; CHECK-LABEL: multiple_uleb128:
82; CHECK:       .section	section_aux,"awo",@progbits,.{{l?}}text
83; CHECK-NEXT:  .Lpcsection_base5:
84; DEFCM-NEXT:  .long	.Lfunc_begin3-.Lpcsection_base5
85; LARGE-NEXT:  .quad	.Lfunc_begin3-.Lpcsection_base5
86; CHECK-NEXT:  .uleb128	.Lfunc_end3-.Lfunc_begin3
87; CHECK-NEXT:  .byte	42
88; CHECK-NEXT:  .ascii	"\345\216&"
89; CHECK-NEXT:  .byte	255
90; CHECK-NEXT:  .section	section_aux_21264,"awo",@progbits,.{{l?}}text
91; CHECK-NEXT:  .Lpcsection_base6:
92; DEFCM-NEXT:  .long	.Lfunc_begin3-.Lpcsection_base6
93; LARGE-NEXT:  .quad	.Lfunc_begin3-.Lpcsection_base6
94; CHECK-NEXT:  .long	.Lfunc_end3-.Lfunc_begin3
95; CHECK-NEXT:  .long	21264
96; CHECK-NEXT:  .{{l?}}text
97entry:
98  ret void
99}
100
101!0 = !{!"section_no_aux"}
102!1 = !{!"section_aux", !3}
103!2 = !{!"section_aux_42", !4, !"section_aux_21264", !5}
104!3 = !{i32 10, i32 20, i32 30}
105!4 = !{i32 42}
106!5 = !{i32 21264}
107!6 = !{!"section_aux!C", !7, !"section_aux_21264", !5}
108!7 = !{i64 42, i32 624485, i8 255}
109