xref: /llvm-project/llvm/test/Transforms/IROutliner/outlining-first-instruction.ll (revision 9dd9575c55c74810675d5de40f56b37dd38fe3c3)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs
2; RUN: opt -S -passes=verify,iroutliner -ir-outlining-no-cost < %s | FileCheck %s
3
4; Make sure that we outline from all three of these functions, and that
5; the first instruction in the module is included when it is the only
6; instruction in the first basic block.
7
8define void @f1() {
9bb:
10  br label %bb1
11bb1:
12  br label %bb2
13bb2:
14  ret void
15}
16
17define void @f2() {
18bb:
19  br label %bb1
20bb1:
21  br label %bb2
22bb2:
23  ret void
24}
25
26define void @f3() {
27bb:
28  br label %bb1
29bb1:
30  br label %bb2
31bb2:
32  ret void
33}
34; CHECK-LABEL: @f1(
35; CHECK-NEXT:  bb:
36; CHECK-NEXT:    call void @outlined_ir_func_0()
37; CHECK-NEXT:    br label [[BB2:%.*]]
38; CHECK:       bb2:
39; CHECK-NEXT:    ret void
40;
41;
42; CHECK-LABEL: @f2(
43; CHECK-NEXT:  bb:
44; CHECK-NEXT:    call void @outlined_ir_func_0()
45; CHECK-NEXT:    br label [[BB2:%.*]]
46; CHECK:       bb2:
47; CHECK-NEXT:    ret void
48;
49;
50; CHECK-LABEL: @f3(
51; CHECK-NEXT:  bb:
52; CHECK-NEXT:    call void @outlined_ir_func_0()
53; CHECK-NEXT:    br label [[BB2:%.*]]
54; CHECK:       bb2:
55; CHECK-NEXT:    ret void
56;
57;
58; CHECK-LABEL: define internal void @outlined_ir_func_0(
59; CHECK-NEXT:  newFuncRoot:
60; CHECK-NEXT:    br label [[BB_TO_OUTLINE:%.*]]
61; CHECK:       bb_to_outline:
62; CHECK-NEXT:    br label [[BB1:%.*]]
63; CHECK:       bb1:
64; CHECK-NEXT:    br label [[BB2_EXITSTUB:%.*]]
65; CHECK:       bb2.exitStub:
66; CHECK-NEXT:    ret void
67;
68