xref: /llvm-project/llvm/test/Transforms/Mem2Reg/undef-order.ll (revision 7ffeb8efe8a08d74649c325a7eb70dc0b853326e)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2;RUN: opt -passes=mem2reg -S < %s | FileCheck %s
3
4declare i1 @cond()
5
6define i32 @foo() {
7; CHECK-LABEL: @foo(
8; CHECK-NEXT:  Entry:
9; CHECK-NEXT:    [[C1:%.*]] = call i1 @cond()
10; CHECK-NEXT:    br i1 [[C1]], label [[STORE1:%.*]], label [[STORE2:%.*]]
11; CHECK:       Block1:
12; CHECK-NEXT:    br label [[JOIN:%.*]]
13; CHECK:       Block2:
14; CHECK-NEXT:    br label [[JOIN]]
15; CHECK:       Block3:
16; CHECK-NEXT:    br label [[JOIN]]
17; CHECK:       Block4:
18; CHECK-NEXT:    br label [[JOIN]]
19; CHECK:       Block5:
20; CHECK-NEXT:    br label [[JOIN]]
21; CHECK:       Store1:
22; CHECK-NEXT:    br label [[JOIN]]
23; CHECK:       Block6:
24; CHECK-NEXT:    br label [[JOIN]]
25; CHECK:       Block7:
26; CHECK-NEXT:    br label [[JOIN]]
27; CHECK:       Block8:
28; CHECK-NEXT:    br label [[JOIN]]
29; CHECK:       Block9:
30; CHECK-NEXT:    br label [[JOIN]]
31; CHECK:       Block10:
32; CHECK-NEXT:    br label [[JOIN]]
33; CHECK:       Store2:
34; CHECK-NEXT:    br label [[JOIN]]
35; CHECK:       Block11:
36; CHECK-NEXT:    br label [[JOIN]]
37; CHECK:       Block12:
38; CHECK-NEXT:    br label [[JOIN]]
39; CHECK:       Block13:
40; CHECK-NEXT:    br label [[JOIN]]
41; CHECK:       Block14:
42; CHECK-NEXT:    br label [[JOIN]]
43; CHECK:       Block15:
44; CHECK-NEXT:    br label [[JOIN]]
45; CHECK:       Block16:
46; CHECK-NEXT:    br label [[JOIN]]
47; CHECK:       Join:
48; CHECK-NEXT:    [[VAL_0:%.*]] = phi i32 [ 1, [[STORE1]] ], [ 2, [[STORE2]] ], [ poison, [[BLOCK1:%.*]] ], [ poison, [[BLOCK2:%.*]] ], [ poison, [[BLOCK3:%.*]] ], [ poison, [[BLOCK4:%.*]] ], [ poison, [[BLOCK5:%.*]] ], [ poison, [[BLOCK6:%.*]] ], [ poison, [[BLOCK7:%.*]] ], [ poison, [[BLOCK8:%.*]] ], [ poison, [[BLOCK9:%.*]] ], [ poison, [[BLOCK10:%.*]] ], [ poison, [[BLOCK11:%.*]] ], [ poison, [[BLOCK12:%.*]] ], [ poison, [[BLOCK13:%.*]] ], [ poison, [[BLOCK14:%.*]] ], [ poison, [[BLOCK15:%.*]] ], [ poison, [[BLOCK16:%.*]] ]
49; CHECK-NEXT:    ret i32 [[VAL_0]]
50;
51Entry:
52  %val = alloca i32
53  %c1 = call i1 @cond()
54  br i1 %c1, label %Store1, label %Store2
55Block1:
56  br label %Join
57Block2:
58  br label %Join
59Block3:
60  br label %Join
61Block4:
62  br label %Join
63Block5:
64  br label %Join
65Store1:
66  store i32 1, ptr %val
67  br label %Join
68Block6:
69  br label %Join
70Block7:
71  br label %Join
72Block8:
73  br label %Join
74Block9:
75  br label %Join
76Block10:
77  br label %Join
78Store2:
79  store i32 2, ptr %val
80  br label %Join
81Block11:
82  br label %Join
83Block12:
84  br label %Join
85Block13:
86  br label %Join
87Block14:
88  br label %Join
89Block15:
90  br label %Join
91Block16:
92  br label %Join
93Join:
94; Phi inserted here should have operands appended deterministically
95  %result = load i32, ptr %val
96  ret i32 %result
97}
98