xref: /llvm-project/llvm/test/Transforms/IROutliner/phi-nodes-simple.ll (revision f4b925ee7078f058602fd323e25f45f1ae91ca34)
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; Show that we are able to outline the simple phi node case of constants when
5; the corresponding labels match.
6
7define void @function1(ptr %a, ptr %b) {
8entry:
9  br label %test
10test:
11  br label %first
12first:
13  %0 = phi i32 [ 0, %test ]
14  store i32 2, ptr %a, align 4
15  store i32 3, ptr %b, align 4
16  ret void
17}
18
19define void @function2(ptr %a, ptr %b) {
20entry:
21  br label %test
22test:
23  br label %first
24first:
25  %0 = phi i32 [ 0, %test ]
26  store i32 2, ptr %a, align 4
27  store i32 3, ptr %b, align 4
28  ret void
29}
30; CHECK-LABEL: @function1(
31; CHECK-NEXT:  entry:
32; CHECK-NEXT:    call void @outlined_ir_func_0(ptr [[A:%.*]], ptr [[B:%.*]])
33; CHECK-NEXT:    ret void
34;
35;
36; CHECK-LABEL: @function2(
37; CHECK-NEXT:  entry:
38; CHECK-NEXT:    call void @outlined_ir_func_0(ptr [[A:%.*]], ptr [[B:%.*]])
39; CHECK-NEXT:    ret void
40;
41;
42; CHECK: define internal void @outlined_ir_func_0(
43; CHECK-NEXT:  newFuncRoot:
44; CHECK-NEXT:    br label [[ENTRY_TO_OUTLINE:%.*]]
45; CHECK:       entry_to_outline:
46; CHECK-NEXT:    br label [[TEST:%.*]]
47; CHECK:       test:
48; CHECK-NEXT:    br label [[FIRST:%.*]]
49; CHECK:       first:
50; CHECK-NEXT:    [[TMP2:%.*]] = phi i32 [ 0, [[TEST]] ]
51; CHECK-NEXT:    store i32 2, ptr [[TMP0:%.*]], align 4
52; CHECK-NEXT:    store i32 3, ptr [[TMP1:%.*]], align 4
53; CHECK-NEXT:    br label [[ENTRY_AFTER_OUTLINE_EXITSTUB:%.*]]
54; CHECK:       entry_after_outline.exitStub:
55; CHECK-NEXT:    ret void
56;
57