; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ;RUN: opt -passes=mem2reg -S < %s | FileCheck %s declare i1 @cond() define i32 @foo() { ; CHECK-LABEL: @foo( ; CHECK-NEXT: Entry: ; CHECK-NEXT: [[C1:%.*]] = call i1 @cond() ; CHECK-NEXT: br i1 [[C1]], label [[STORE1:%.*]], label [[STORE2:%.*]] ; CHECK: Block1: ; CHECK-NEXT: br label [[JOIN:%.*]] ; CHECK: Block2: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Block3: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Block4: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Block5: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Store1: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Block6: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Block7: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Block8: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Block9: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Block10: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Store2: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Block11: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Block12: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Block13: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Block14: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Block15: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Block16: ; CHECK-NEXT: br label [[JOIN]] ; CHECK: Join: ; CHECK-NEXT: [[VAL_0:%.*]] = phi i32 [ 1, [[STORE1]] ], [ 2, [[STORE2]] ], [ undef, [[BLOCK1:%.*]] ], [ undef, [[BLOCK2:%.*]] ], [ undef, [[BLOCK3:%.*]] ], [ undef, [[BLOCK4:%.*]] ], [ undef, [[BLOCK5:%.*]] ], [ undef, [[BLOCK6:%.*]] ], [ undef, [[BLOCK7:%.*]] ], [ undef, [[BLOCK8:%.*]] ], [ undef, [[BLOCK9:%.*]] ], [ undef, [[BLOCK10:%.*]] ], [ undef, [[BLOCK11:%.*]] ], [ undef, [[BLOCK12:%.*]] ], [ undef, [[BLOCK13:%.*]] ], [ undef, [[BLOCK14:%.*]] ], [ undef, [[BLOCK15:%.*]] ], [ undef, [[BLOCK16:%.*]] ] ; CHECK-NEXT: ret i32 [[VAL_0]] ; Entry: %val = alloca i32 %c1 = call i1 @cond() br i1 %c1, label %Store1, label %Store2 Block1: br label %Join Block2: br label %Join Block3: br label %Join Block4: br label %Join Block5: br label %Join Store1: store i32 1, i32* %val br label %Join Block6: br label %Join Block7: br label %Join Block8: br label %Join Block9: br label %Join Block10: br label %Join Store2: store i32 2, i32* %val br label %Join Block11: br label %Join Block12: br label %Join Block13: br label %Join Block14: br label %Join Block15: br label %Join Block16: br label %Join Join: ; Phi inserted here should have operands appended deterministically %result = load i32, i32* %val ret i32 %result }