xref: /llvm-project/llvm/test/CodeGen/X86/basic-block-address-map-with-mfs.ll (revision acec6419e811a46050b0603dfa72fc6a169aa0f7)
1; COM: Emitting basic-block-address-map when machine function splitting is enabled.
2; RUN: llc < %s -mtriple=x86_64 -function-sections -split-machine-functions -basic-block-address-map | FileCheck %s --check-prefixes=CHECK,BASIC
3
4; COM: Emitting basic-block-address-map with PGO analysis with machine function splitting enabled.
5; RUN: llc < %s -mtriple=x86_64 -function-sections -split-machine-functions -basic-block-address-map -pgo-analysis-map=func-entry-count,bb-freq,br-prob | FileCheck %s --check-prefixes=CHECK,PGO
6
7define void @foo(i1 zeroext %0) nounwind !prof !14 {
8  br i1 %0, label %2, label %4, !prof !15
9
102:                                                ; preds = %1
11  %3 = call i32 @bar()
12  br label %6
13
144:                                                ; preds = %1
15  %5 = call i32 @baz()
16  br label %6
17
186:                                                ; preds = %4, %2
19  %7 = tail call i32 @qux()
20  ret void
21}
22
23declare i32 @bar()
24declare i32 @baz()
25declare i32 @qux()
26
27!llvm.module.flags = !{!0}
28!0 = !{i32 1, !"ProfileSummary", !1}
29!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}
30!2 = !{!"ProfileFormat", !"InstrProf"}
31!3 = !{!"TotalCount", i64 10000}
32!4 = !{!"MaxCount", i64 10}
33!5 = !{!"MaxInternalCount", i64 1}
34!6 = !{!"MaxFunctionCount", i64 1000}
35!7 = !{!"NumCounts", i64 3}
36!8 = !{!"NumFunctions", i64 5}
37!9 = !{!"DetailedSummary", !10}
38!10 = !{!11, !12, !13}
39!11 = !{i32 10000, i64 100, i32 1}
40!12 = !{i32 999900, i64 100, i32 1}
41!13 = !{i32 999999, i64 1, i32 2}
42!14 = !{!"function_entry_count", i64 7000}
43!15 = !{!"branch_weights", i32 7000, i32 0}
44
45; CHECK:          .section .text.hot.foo,"ax",@progbits
46; CHECK-LABEL:  foo:
47; CHECK-LABEL:  .Lfunc_begin0:
48; CHECK-LABEL:  .LBB_END0_0:
49; CHECK-LABEL:  .LBB0_1:
50; CHECK-LABEL:  .LBB_END0_1:
51; CHECK:          .section .text.split.foo,"ax",@progbits
52; CHECK-LABEL:  foo.cold:
53; CHECK-LABEL:  .LBB_END0_2:
54; CHECK-LABEL:  .Lfunc_end0:
55
56; CHECK:                .section        .llvm_bb_addr_map,"o",@llvm_bb_addr_map,.text.hot.foo
57; CHECK-NEXT:   .byte   2               # version
58; BASIC-NEXT:   .byte   8               # feature
59; PGO-NEXT:     .byte   15              # feature
60; CHECK-NEXT:   .byte   2               # number of basic block ranges
61; CHECK-NEXT:   .quad   .Lfunc_begin0   # base address
62; CHECK-NEXT:   .byte   2               # number of basic blocks
63; CHECK-NEXT:   .byte   0               # BB id
64; CHECK-NEXT:   .uleb128 .Lfunc_begin0-.Lfunc_begin0
65; CHECK-NEXT:   .uleb128 .LBB_END0_0-.Lfunc_begin0
66; CHECK-NEXT:   .byte   8
67; CHECK-NEXT:   .byte   1               # BB id
68; CHECK-NEXT:   .uleb128 .LBB0_1-.LBB_END0_0
69; CHECK-NEXT:   .uleb128 .LBB_END0_1-.LBB0_1
70; CHECK-NEXT:   .byte   3
71; CHECK-NEXT:   .quad   foo.cold    # base address
72; CHECK-NEXT:   .byte   1               # number of basic blocks
73; CHECK-NEXT:   .byte   2               # BB id
74; CHECK-NEXT:   .uleb128 foo.cold-foo.cold
75; CHECK-NEXT:   .uleb128 .LBB_END0_2-foo.cold
76; CHECK-NEXT:   .byte   3
77
78;; PGO Analysis Map
79; PGO:         .ascii  "\3306"                            # function entry count
80; PGO-NEXT:    .ascii  "\200\200\200\200\200\200\200 "    # basic block frequency
81; PGO-NEXT:    .byte   2                                  # basic block successor count
82; PGO-NEXT:    .byte   1                                  # successor BB ID
83; PGO-NEXT:    .ascii  "\200\200\200\200\b"               # successor branch probability
84; PGO-NEXT:    .byte   2                                  # successor BB ID
85; PGO-NEXT:    .byte   0                                  # successor branch probability
86; PGO-NEXT:    .ascii  "\200\200\200\374\377\377\377\037" # basic block frequency
87; PGO-NEXT:    .byte   0		                       # basic block successor count
88; PGO-NEXT:    .ascii  "\200\200\200\004"                 # basic block frequency
89; PGO-NEXT:    .byte   0                                  # basic block successor count
90