716 lines · plain
1; REQUIRES: aarch64-registered-target2; REQUIRES: x86-registered-target3 4; COM: Machine function splitting with FDO profiles5; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -split-machine-functions | FileCheck %s -check-prefixes=MFS-DEFAULTS,MFS-DEFAULTS-X86,MFS-NOBBSECTIONS6; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -split-machine-functions -mfs-psi-cutoff=0 -mfs-count-threshold=2000 | FileCheck %s --dump-input=always -check-prefixes=MFS-OPTS1,MFS-OPTS1-X867; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -split-machine-functions -mfs-psi-cutoff=950000 | FileCheck %s -check-prefixes=MFS-OPTS2,MFS-OPTS2-X868; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -split-machine-functions -mfs-split-ehcode | FileCheck %s -check-prefixes=MFS-EH-SPLIT,MFS-EH-SPLIT-X869; RUN: llc < %s -mtriple=x86_64 -split-machine-functions -O0 -mfs-psi-cutoff=0 -mfs-count-threshold=10000 | FileCheck %s -check-prefixes=MFS-O0,MFS-O0-X8610 11; COM: Machine function splitting along with -basic-block-sections profile12; RUN: echo 'v1' > %t13; RUN: echo 'ffoo21' >> %t14; RUN: echo 'c0' >> %t15; RUN: echo 'ffoo22' >> %t16; RUN: echo 'c0 1' >> %t17; RUN: echo 'c2' >> %t18; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -basic-block-sections=%t -split-machine-functions | FileCheck %s --check-prefixes=MFS-BBSECTIONS19 20; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -aarch64-min-jump-table-entries=4 -enable-split-machine-functions | FileCheck %s -check-prefixes=MFS-DEFAULTS,MFS-DEFAULTS-AARCH6421; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -aarch64-min-jump-table-entries=4 -enable-split-machine-functions -mfs-psi-cutoff=0 -mfs-count-threshold=2000 | FileCheck %s --dump-input=always -check-prefixes=MFS-OPTS1,MFS-OPTS1-AARCH6422; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -aarch64-min-jump-table-entries=4 -enable-split-machine-functions -mfs-psi-cutoff=950000 | FileCheck %s -check-prefixes=MFS-OPTS2,MFS-OPTS2-AARCH6423; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -aarch64-min-jump-table-entries=4 -enable-split-machine-functions -mfs-split-ehcode | FileCheck %s -check-prefixes=MFS-EH-SPLIT,MFS-EH-SPLIT-AARCH6424; RUN: llc < %s -mtriple=aarch64 -split-machine-functions -O0 -mfs-psi-cutoff=0 -mfs-count-threshold=10000 | FileCheck %s -check-prefixes=MFS-O0,MFS-O0-AARCH6425; RUN: llc < %s -mtriple=aarch64 -enable-split-machine-functions -aarch64-redzone | FileCheck %s -check-prefixes=MFS-REDZONE-AARCH6426 27; COM: Machine function splitting with AFDO profiles28; RUN: sed 's/InstrProf/SampleProfile/g' %s > %t.ll29; RUN: llc < %t.ll -mtriple=x86_64-unknown-linux-gnu -split-machine-functions | FileCheck %s --check-prefix=FSAFDO-MFS30; RUN: llc < %t.ll -mtriple=x86_64-unknown-linux-gnu -split-machine-functions | FileCheck %s --check-prefix=FSAFDO-MFS231 32define void @foo1(i1 zeroext %0) nounwind !prof !14 !section_prefix !15 {33;; Check that cold block is moved to .text.split.34; MFS-DEFAULTS-LABEL: foo135; MFS-DEFAULTS: .section .text.split.foo136; MFS-DEFAULTS-NEXT: foo1.cold:37; MFS-DEFAULTS-X86-NOT: callq bar38; MFS-DEFAULTS-X86-NEXT: callq baz39; MFS-DEFAULTS-AARCH64-NOT: bl bar40; MFS-DEFAULTS-AARCH64-NEXT: bl baz41 br i1 %0, label %2, label %4, !prof !1742 432: ; preds = %144 %3 = call i32 @bar()45 br label %646 474: ; preds = %148 %5 = call i32 @baz()49 br label %650 516: ; preds = %4, %252 %7 = tail call i32 @qux()53 ret void54}55 56define void @foo2(i1 zeroext %0) nounwind !prof !23 !section_prefix !16 {57;; Check that function marked unlikely is not split.58; MFS-DEFAULTS-LABEL: foo259; MFS-DEFAULTS-NOT: foo2.cold:60 br i1 %0, label %2, label %4, !prof !1761 622: ; preds = %163 %3 = call i32 @bar()64 br label %665 664: ; preds = %167 %5 = call i32 @baz()68 br label %669 706: ; preds = %4, %271 %7 = tail call i32 @qux()72 ret void73}74 75define void @foo3(i1 zeroext %0) nounwind !section_prefix !15 {76;; Check that function without profile data is not split.77; MFS-DEFAULTS-LABEL: foo378; MFS-DEFAULTS-NOT: foo3.cold:79 br i1 %0, label %2, label %480 812: ; preds = %182 %3 = call i32 @bar()83 br label %684 854: ; preds = %186 %5 = call i32 @baz()87 br label %688 896: ; preds = %4, %290 %7 = tail call i32 @qux()91 ret void92}93 94define void @foo4(i1 zeroext %0, i1 zeroext %1) nounwind !prof !20 {95;; Check that count threshold works.96; MFS-OPTS1-LABEL: foo497; MFS-OPTS1: .section .text.split.foo498; MFS-OPTS1-NEXT: foo4.cold:99; MFS-OPTS1-X86-NOT: callq bar100; MFS-OPTS1-X86-NOT: callq baz101; MFS-OPTS1-X86-NEXT: callq bam102; MFS-OPTS1-AARCH64-NOT: bl bar103; MFS-OPTS1-AARCH64-NOT: bl baz104; MFS-OPTS1-AARCH64-NEXT: bl bam105 br i1 %0, label %3, label %7, !prof !18106 1073:108 %4 = call i32 @bar()109 br label %7110 1115:112 %6 = call i32 @baz()113 br label %7114 1157:116 br i1 %1, label %8, label %10, !prof !19117 1188:119 %9 = call i32 @bam()120 br label %12121 12210:123 %11 = call i32 @baz()124 br label %12125 12612:127 %13 = tail call i32 @qux()128 ret void129}130 131define void @foo5(i1 zeroext %0, i1 zeroext %1) nounwind !prof !20 {132;; Check that profile summary info cutoff works.133; MFS-OPTS2-LABEL: foo5134; MFS-OPTS2: .section .text.split.foo5135; MFS-OPTS2-NEXT: foo5.cold:136; MFS-OPTS2-X86-NOT: callq bar137; MFS-OPTS2-X86-NOT: callq baz138; MFS-OPTS2-X86-NEXT: callq bam139; MFS-OPTS2-AARCH64-NOT: bl bar140; MFS-OPTS2-AARCH64-NOT: bl baz141; MFS-OPTS2-AARCH64-NEXT: bl bam142 br i1 %0, label %3, label %7, !prof !21143 1443:145 %4 = call i32 @bar()146 br label %7147 1485:149 %6 = call i32 @baz()150 br label %7151 1527:153 br i1 %1, label %8, label %10, !prof !22154 1558:156 %9 = call i32 @bam()157 br label %12158 15910:160 %11 = call i32 @baz()161 br label %12162 16312:164 %13 = call i32 @qux()165 ret void166}167 168define void @foo6(i1 zeroext %0) nounwind section "nosplit" !prof !14 {169;; Check that function with section attribute is not split.170; MFS-DEFAULTS-LABEL: foo6171; MFS-DEFAULTS-NOT: foo6.cold:172 br i1 %0, label %2, label %4, !prof !17173 1742: ; preds = %1175 %3 = call i32 @bar()176 br label %6177 1784: ; preds = %1179 %5 = call i32 @baz()180 br label %6181 1826: ; preds = %4, %2183 %7 = tail call i32 @qux()184 ret void185}186 187define i32 @foo7(i1 zeroext %0) personality ptr @__gxx_personality_v0 !prof !14 {188;; Check that a single cold ehpad is split out.189; MFS-DEFAULTS-LABEL: foo7190; MFS-DEFAULTS: .section .text.split.foo7,"ax",@progbits191; MFS-DEFAULTS-NEXT: foo7.cold:192; MFS-DEFAULTS-X86: callq baz193; MFS-DEFAULTS-X86: callq _Unwind_Resume@PLT194; MFS-DEFAULTS-AARCH64: bl baz195entry:196 invoke void @_Z1fv()197 to label %try.cont unwind label %lpad198 199lpad:200 %1 = landingpad { ptr, i32 }201 cleanup202 catch ptr @_ZTIi203 resume { ptr, i32 } %1204 205try.cont:206 br i1 %0, label %2, label %4, !prof !17207 2082: ; preds = try.cont209 %3 = call i32 @bar()210 br label %6211 2124: ; preds = %1213 %5 = call i32 @baz()214 br label %6215 2166: ; preds = %4, %2217 %7 = tail call i32 @qux()218 ret i32 %7219}220 221define i32 @foo8(i1 zeroext %0) personality ptr @__gxx_personality_v0 !prof !14 {222;; Check that all ehpads are treated as hot if one of them is hot.223; MFS-DEFAULTS-LABEL: foo8224; MFS-DEFAULTS-X86: callq _Unwind_Resume@PLT225; MFS-DEFAULTS-X86: callq _Unwind_Resume@PLT226; MFS-DEFAULTS: .section .text.split.foo8,"ax",@progbits227; MFS-DEFAULTS-NEXT: foo8.cold:228; MFS-DEFAULTS-X86: callq baz229; MFS-DEFAULTS-AARCH64: bl baz230 231;; Check that all ehpads are by default treated as cold with -mfs-split-ehcode.232; MFS-EH-SPLIT-LABEL: foo8233; MFS-EH-SPLIT-X86: callq baz234; MFS-EH-SPLIT-AARCH64: bl baz235; MFS-EH-SPLIT-X86: .section .text.split.foo8,"ax",@progbits236; MFS-EH-SPLIT-X86-NEXT: foo8.cold:237; MFS-EH-SPLIT-X86: callq _Unwind_Resume@PLT238; MFS-EH-SPLIT-X86: callq _Unwind_Resume@PLT239entry:240 invoke void @_Z1fv()241 to label %try.cont unwind label %lpad1242 243lpad1:244 %1 = landingpad { ptr, i32 }245 cleanup246 catch ptr @_ZTIi247 resume { ptr, i32 } %1248 249try.cont:250 br i1 %0, label %hot, label %cold, !prof !17251 252hot:253 %2 = call i32 @bar()254 invoke void @_Z1fv()255 to label %exit unwind label %lpad2, !prof !21256 257lpad2:258 %3 = landingpad { ptr, i32 }259 cleanup260 catch ptr @_ZTIi261 resume { ptr, i32 } %3262 263cold:264 %4 = call i32 @baz()265 br label %exit266 267exit:268 %5 = tail call i32 @qux()269 ret i32 %5270}271 272define i32 @foo10(i1 zeroext %0) personality ptr @__gxx_personality_v0 !prof !14 {273;; Check that nop is inserted just before the EH pad if it's beginning a section.274; MFS-DEFAULTS-LABEL: foo10275; MFS-DEFAULTS-X86-LABEL: callq baz276; MFS-DEFAULTS-AARCH64: bl baz277; MFS-DEFAULTS-X86: .section .text.split.foo10,"ax",@progbits278; MFS-DEFAULTS-X86-NEXT: foo10.cold:279; MFS-DEFAULTS-X86: nop280; MFS-DEFAULTS-X86: callq _Unwind_Resume@PLT281entry:282 invoke void @_Z1fv()283 to label %try.cont unwind label %lpad, !prof !17284 285lpad:286 %1 = landingpad { ptr, i32 }287 cleanup288 catch ptr @_ZTIi289 resume { ptr, i32 } %1290 291try.cont:292 %2 = call i32 @baz()293 ret i32 %2294}295 296define void @foo11(i1 zeroext %0) personality ptr @__gxx_personality_v0 {297;; Check that function having landing pads are split with mfs-split-ehcode298;; even in the absence of profile data299; MFS-EH-SPLIT-LABEL: foo11300; MFS-EH-SPLIT-X86: .section .text.split.foo11,"ax",@progbits301; MFS-EH-SPLIT-X86-NEXT: foo11.cold:302; MFS-EH-SPLIT-X86: nop303; MFS-EH-SPLIT-X86: callq _Unwind_Resume@PLT304entry:305 invoke void @_Z1fv()306 to label %2 unwind label %lpad307 308lpad:309 %1 = landingpad { ptr, i32 }310 cleanup311 catch ptr @_ZTIi312 resume { ptr, i32 } %1313 3142: ; preds = entry315 %3 = tail call i32 @qux()316 ret void317}318 319define i32 @foo12(i1 zeroext %0) personality ptr @__gxx_personality_v0 !prof !14 {320;; Check that all code reachable from ehpad is split out with cycles.321; MFS-EH-SPLIT-LABEL: foo12322; MFS-EH-SPLIT: .section .text.split.foo12,"ax",@progbits323; MFS-EH-SPLIT-NEXT: foo12.cold:324; MFS-EH-SPLIT-X86: callq bar325; MFS-EH-SPLIT-X86: callq baz326; MFS-EH-SPLIT-X86: callq qux327; MFS-EH-SPLIT-AARCH64: bl bar328; MFS-EH-SPLIT-AARCH64: bl baz329; MFS-EH-SPLIT-AARCH64: bl qux330entry:331 invoke void @_Z1fv()332 to label %8 unwind label %lpad333 334lpad:335 %1 = landingpad { ptr, i32 }336 cleanup337 catch ptr @_ZTIi338 br label %2339 3402: ; preds = lpad341 %3 = call i32 @bar()342 br i1 %0, label %4, label %6343 3444: ; preds = lpad345 %5 = call i32 @baz()346 br label %6347 3486: ; preds = %4, %2349 %7 = tail call i32 @qux()350 br i1 %0, label %2, label %8351 3528: ; preds = %6353 ret i32 0354}355 356define i32 @foo13(i1 zeroext %0) personality ptr @__gxx_personality_v0 !prof !14{357;; Check that all code reachable from EH358;; that is also reachable from outside EH pad359;; is not touched.360; MFS-EH-SPLIT-LABEL: foo13361; MFS-EH-SPLIT-X86: callq bam362; MFS-EH-SPLIT-AARCH64: bl bam363; MFS-EH-SPLIT: .section .text.split.foo13,"ax",@progbits364; MFS-EH-SPLIT-NEXT: foo13.cold:365; MFS-EH-SPLIT-X86: callq baz366; MFS-EH-SPLIT-X86: callq bar367; MFS-EH-SPLIT-X86: callq qux368; MFS-EH-SPLIT-AARCH64: bl baz369; MFS-EH-SPLIT-AARCH64: bl bar370; MFS-EH-SPLIT-AARCH64: bl qux371entry:372 invoke void @_Z1fv()373 to label %try.cont unwind label %lpad, !prof !17374 375lpad:376 %1 = landingpad { ptr, i32 }377 cleanup378 catch ptr @_ZTIi379 br i1 %0, label %2, label %4, !prof !17380 3812: ; preds = lpad382 %3 = call i32 @bar()383 br label %6384 3854: ; preds = lpad386 %5 = call i32 @baz()387 br label %6388 3896: ; preds = %4, %2390 %7 = tail call i32 @qux()391 br i1 %0, label %2, label %try.cont, !prof !17392 393try.cont: ; preds = %entry394 %8 = call i32 @bam()395 ret i32 %8396}397 398define void @foo14(i1 zeroext %0, i1 zeroext %1) nounwind !prof !24 {399; FSAFDO-MFS: .section .text.split.foo14,"ax"400; FSAFDO-MFS: foo14.cold:401 br i1 %0, label %3, label %7, !prof !25402 4033:404 %4 = call i32 @bar()405 br label %7406 4075:408 %6 = call i32 @baz()409 br label %7410 4117:412 br i1 %1, label %8, label %10, !prof !26413 4148:415 %9 = call i32 @bam()416 br label %12417 41810:419 %11 = call i32 @baz()420 br label %12421 42212:423 %13 = tail call i32 @qux()424 ret void425}426 427define void @foo15(i1 zeroext %0, i1 zeroext %1) nounwind !prof !27 {428;; HasAccurateProfile is false, foo15 is hot, but no profile data for429;; blocks, no split should happen.430; FSAFDO-MFS2-NOT: .section .text.split.foo15,"ax"431; FSAFDO-MFS2-NOT: foo15.cold:432 br i1 %0, label %3, label %7433 4343:435 %4 = call i32 @bar()436 br label %7437 4385:439 %6 = call i32 @baz()440 br label %7441 4427:443 br i1 %1, label %8, label %10444 4458:446 %9 = call i32 @bam()447 br label %12448 44910:450 %11 = call i32 @baz()451 br label %12452 45312:454 %13 = tail call i32 @qux()455 ret void456}457 458define void @foo16(i1 zeroext %0) nounwind !prof !14 !section_prefix !15 {459;; Check that an unconditional branch is only appended to a block460;; if it would fall through to the wrong block otherwise.461; MFS-O0-LABEL: foo16462; MFS-O0-X86: jmp463; MFS-O0-X86-NOT: jmp464; MFS-O0-AARCH64: b foo16.cold465; MFS-O0-AARCH64-NOT: b foo16.cold466; MFS-O0: .section .text.split.foo16467; MFS-O0-NEXT: foo16.cold468 %2 = call i32 @baz()469 br i1 false, label %3, label %5, !prof !25470 4713: ; preds = %1472 %4 = call i32 @bar()473 unreachable474 4755: ; preds = %1476 %6 = tail call i32 @qux()477 ret void478}479 480define i32 @foo17(i1 zeroext %0, i32 %a, i32 %b) nounwind !prof !14 !section_prefix !15 {481;; Check that cold blocks in functions with red zones aren't split.482; MFS-DEFAULTS-LABEL: foo17483; MFS-DEFAULTS-X86: foo17.cold:484; MFS-REDZONE-AARCH64-NOT: foo17.cold:485 %a.addr = alloca i32, align 4486 %b.addr = alloca i32, align 4487 %x = alloca i32, align 4488 489 br i1 %0, label %2, label %3, !prof !17490 4912: ; preds = %1492 store i32 %a, ptr %a.addr, align 4493 store i32 %b, ptr %b.addr, align 4494 br label %4495 4963: ; preds = %1497 store i32 %a, ptr %b.addr, align 4498 store i32 %b, ptr %a.addr, align 4499 br label %4500 5014: ; preds = %3, %2502 %tmp = load i32, ptr %a.addr, align 4503 %tmp1 = load i32, ptr %b.addr, align 4504 %add = add nsw i32 %tmp, %tmp1505 store i32 %add, ptr %x, align 4506 %tmp2 = load i32, ptr %x, align 4507 ret i32 %tmp2508}509 510define i32 @foo18(i32 %in) !prof !14 !section_prefix !15 {511;; Check that a cold block targeted by a jump table is not split512;; on AArch64.513; MFS-DEFAULTS-LABEL: foo18514; MFS-DEFAULTS: .section .text.split.foo18515; MFS-DEFAULTS-NEXT: foo18.cold:516; MFS-DEFAULTS-SAME: %common.ret517; MFS-DEFAULTS-X86-DAG: jmp qux518; MFS-DEFAULTS-X86-DAG: jmp bam519; MFS-DEFAULTS-AARCH64-NOT: b bar520; MFS-DEFAULTS-AARCH64-NOT: b baz521; MFS-DEFAULTS-AARCH64-NOT: b qux522; MFS-DEFAULTS-AARCH64-NOT: b bam523 524 switch i32 %in, label %common.ret [525 i32 0, label %hot1526 i32 1, label %hot2527 i32 2, label %cold1528 i32 3, label %cold2529 ], !prof !28530 531common.ret: ; preds = %0532 ret i32 0533 534hot1: ; preds = %0535 %1 = tail call i32 @bar()536 ret i32 %1537 538hot2: ; preds = %0539 %2 = tail call i32 @baz()540 ret i32 %2541 542cold1: ; preds = %0543 %3 = tail call i32 @bam()544 ret i32 %3545 546cold2: ; preds = %0547 %4 = tail call i32 @qux()548 ret i32 %4549}550 551define i32 @foo19(i32 %in) !prof !14 !section_prefix !15 {552;; Check that a cold block that contains a jump table dispatch is553;; not split on AArch64.554; MFS-DEFAULTS-LABEL: foo19555; MFS-DEFAULTS: .section .text.split.foo19556; MFS-DEFAULTS-NEXT: foo19.cold:557; MFS-DEFAULTS-X86: .LJTI17_0558; MFS-DEFAULTS-AARCH64-NOT: .LJTI17_0559; MFS-DEFAULTS: .section .rodata560; MFS-DEFAULTS: .LJTI17_0561 %cmp = icmp sgt i32 %in, 3562 br i1 %cmp, label %hot, label %cold_switch, !prof !17563 564hot: ; preds = %0565ret i32 1566 567cold_switch: ; preds = %0568 switch i32 %in, label %common.ret [569 i32 0, label %hot1570 i32 1, label %hot2571 i32 2, label %cold1572 i32 3, label %cold2573 ], !prof !28574 575common.ret: ; preds = %0576 ret i32 0577 578hot1: ; preds = %0579 %1 = tail call i32 @bar()580 ret i32 %1581 582hot2: ; preds = %0583 %2 = tail call i32 @baz()584 ret i32 %2585 586cold1: ; preds = %0587 %3 = tail call i32 @bam()588 ret i32 %3589 590cold2: ; preds = %0591 %4 = tail call i32 @qux()592 ret i32 %4593}594 595define void @foo20(i1 zeroext %0) !prof !14 !section_prefix !15 {596;; Check that blocks containing or targeted by asm goto aren't split.597; MFS-DEFAULTS-LABEL: foo20598; MFS-DEFAULTS-AARCH64-NOT: foo20.cold:599; MFS-DEFAULTS-X86: .section .text.split.foo20600; MFS-DEFAULTS-X86: foo20.cold:601; MFS-DEFAULTS-X86-DAG: # %cold_asm602; MFS-DEFAULTS-X86-DAG: # %cold_asm_target603 604 br i1 %0, label %hot, label %cold_asm, !prof !17605 606hot:607 %2 = call i32 @bar()608 ret void609 610cold_asm:611 callbr void asm sideeffect "nop", "!i"() #3612 to label %asm.fallthrough [label %cold_asm_target]613 614asm.fallthrough:615 br label %cold_asm_target616 617cold_asm_target:618 %3 = call i32 @baz()619 ret void620}621 622define void @foo21(i1 zeroext %0) {623;; Check that a function with basic-block-sections profile (but no pgo profile)624;; is properly split when the profile is used along with mfs.625; MFS-BBSECTIONS: .section .text.hot.foo21626; MFS-NOBBSECTIONS-NOT: .section .text.hot.foo21627; MFS-BBSECTIONS-LABEL: foo21:628; MFS-NOBBSECTIONS-NOT: foo21.cold:629; MFS-BBSECTIONS: .section .text.split.foo21630; MFS-BBSECTIONS: foo21.cold631 %2 = alloca i8, align 1632 %3 = zext i1 %0 to i8633 store i8 %3, ptr %2, align 1634 %4 = load i8, ptr %2, align 1635 %5 = trunc i8 %4 to i1636 br i1 %5, label %6, label %8637 6386: ; preds = %1639 %7 = call i32 @bar()640 br label %10641 6428: ; preds = %1643 %9 = call i32 @baz()644 br label %10645 64610: ; preds = %8, %6647 ret void648}649 650define void @foo22(i1 zeroext %0) nounwind !prof !14 !section_prefix !15 {651;; Check that when a function has both basic-block-section and pgo profiles652;; only the basic-block-section profile is used for splitting.653 654;; Check that we create two hot sections with -basic-block-sections.655; MFS-BBSECTIONS: .section .text.hot.foo22656; MFS-BBSECTIONS-LABEL: foo22:657; MFS-BBSECTIONS: callq bar658; MFS-BBSECTIONS: .section .text.hot.foo22659; MFS-BBSECTIONS-NEXT: foo22.__part.1:660; MFS-BBSECTIONS: callq baz661; MFS-BBSECTIONS-NOT: .section .text.split.foo22662 br i1 %0, label %2, label %4, !prof !17663 6642: ; preds = %1665 %3 = call i32 @bar()666 br label %6667 6684: ; preds = %1669 %5 = call i32 @baz()670 br label %6671 6726: ; preds = %4, %2673 %7 = tail call i32 @qux()674 ret void675}676 677declare i32 @bar()678declare i32 @baz()679declare i32 @bam()680declare i32 @qux()681declare void @_Z1fv()682declare i32 @__gxx_personality_v0(...)683 684@_ZTIi = external constant ptr685 686!llvm.module.flags = !{!0}687!0 = !{i32 1, !"ProfileSummary", !1}688!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}689!2 = !{!"ProfileFormat", !"InstrProf"}690!3 = !{!"TotalCount", i64 10000}691!4 = !{!"MaxCount", i64 10}692!5 = !{!"MaxInternalCount", i64 1}693!6 = !{!"MaxFunctionCount", i64 1000}694!7 = !{!"NumCounts", i64 3}695!8 = !{!"NumFunctions", i64 5}696!9 = !{!"DetailedSummary", !10}697!10 = !{!11, !12, !13}698!11 = !{i32 10000, i64 100, i32 1}699!12 = !{i32 999900, i64 100, i32 1}700!13 = !{i32 999999, i64 1, i32 2}701!14 = !{!"function_entry_count", i64 7000}702!15 = !{!"function_section_prefix", !"hot"}703!16 = !{!"function_section_prefix", !"unlikely"}704!17 = !{!"branch_weights", i32 7000, i32 0}705!18 = !{!"branch_weights", i32 3000, i32 4000}706!19 = !{!"branch_weights", i32 1000, i32 6000}707!20 = !{!"function_entry_count", i64 10000}708!21 = !{!"branch_weights", i32 6000, i32 4000}709!22 = !{!"branch_weights", i32 80, i32 9920}710!23 = !{!"function_entry_count", i64 7}711!24 = !{!"function_entry_count", i64 10000}712!25 = !{!"branch_weights", i32 0, i32 7000}713!26 = !{!"branch_weights", i32 1000, i32 6000}714!27 = !{!"function_entry_count", i64 10000}715!28 = !{!"branch_weights", i32 0, i32 4000, i32 4000, i32 0, i32 0}716