;RUN: opt -mem2reg -S < %s | FileCheck %s | |
declare i1 @cond() | |
define i32 @foo() { | |
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 | |
; CHECK: %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 ] | |
%result = load i32, i32* %val | |
ret i32 %result | |
} |