xref: /llvm-project/llvm/test/Transforms/IROutliner/illegal-phi-nodes.ll (revision f4b925ee7078f058602fd323e25f45f1ae91ca34)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -S -passes=verify,iroutliner -ir-outlining-no-cost < %s | FileCheck %s
3
4; Show that we do not extract phi nodes as it would require extra label and
5; control flow checking.
6
7define void @function1(ptr %a, ptr %b) {
8; CHECK-LABEL: @function1(
9; CHECK-NEXT:  entry:
10; CHECK-NEXT:    br label [[FIRST:%.*]]
11; CHECK:       first:
12; CHECK-NEXT:    [[TMP0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ 3, [[NEXT:%.*]] ]
13; CHECK-NEXT:    call void @outlined_ir_func_0(ptr [[A:%.*]], ptr [[B:%.*]])
14; CHECK-NEXT:    ret void
15; CHECK:       next:
16; CHECK-NEXT:    br label [[FIRST]]
17;
18entry:
19  br label %first
20first:
21  %0 = phi i32 [ 0, %entry ], [ 3, %next ]
22  store i32 2, ptr %a, align 4
23  store i32 3, ptr %b, align 4
24  ret void
25next:
26  br label %first
27}
28
29define void @function2(ptr %a, ptr %b) {
30; CHECK-LABEL: @function2(
31; CHECK-NEXT:  entry:
32; CHECK-NEXT:    br label [[FIRST:%.*]]
33; CHECK:       first:
34; CHECK-NEXT:    [[TMP0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ 3, [[NEXT:%.*]] ]
35; CHECK-NEXT:    call void @outlined_ir_func_0(ptr [[A:%.*]], ptr [[B:%.*]])
36; CHECK-NEXT:    ret void
37; CHECK:       next:
38; CHECK-NEXT:    br label [[FIRST]]
39;
40entry:
41  br label %first
42first:
43  %0 = phi i32 [ 0, %entry ], [ 3, %next ]
44  store i32 2, ptr %a, align 4
45  store i32 3, ptr %b, align 4
46  ret void
47next:
48  br label %first
49}
50