summaryrefslogtreecommitdiff
path: root/test/Transforms/CondProp/phisimplify.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/Transforms/CondProp/phisimplify.ll')
-rw-r--r--test/Transforms/CondProp/phisimplify.ll43
1 files changed, 43 insertions, 0 deletions
diff --git a/test/Transforms/CondProp/phisimplify.ll b/test/Transforms/CondProp/phisimplify.ll
new file mode 100644
index 0000000000000..5b5a3042eb624
--- /dev/null
+++ b/test/Transforms/CondProp/phisimplify.ll
@@ -0,0 +1,43 @@
+; RUN: llvm-as < %s | opt -condprop | llvm-dis | not grep phi
+
+define i32 @test(i32 %C, i1 %Val) {
+ switch i32 %C, label %T1 [
+ i32 4, label %T2
+ i32 17, label %T3
+ ]
+
+T1: ; preds = %0
+ call void @a( )
+ br label %Cont
+
+T2: ; preds = %0
+ call void @b( )
+ br label %Cont
+
+T3: ; preds = %0
+ call void @c( )
+ br label %Cont
+
+Cont: ; preds = %T3, %T2, %T1
+ ;; PHI becomes dead after threading T2
+ %C2 = phi i1 [ %Val, %T1 ], [ true, %T2 ], [ %Val, %T3 ] ; <i1> [#uses=1]
+ br i1 %C2, label %L2, label %F2
+
+L2: ; preds = %Cont
+ call void @d( )
+ ret i32 17
+
+F2: ; preds = %Cont
+ call void @e( )
+ ret i32 1
+}
+
+declare void @a()
+
+declare void @b()
+
+declare void @c()
+
+declare void @d()
+
+declare void @e()