1 ; RUN: opt < %s -correlated-propagation -S | FileCheck %s
5 define i32 @test1(i1 %C) nounwind {
6 br i1 %C, label %exit, label %body
10 %A = select i1 %C, i32 10, i32 11 ; <i32> [#uses=1]
24 %cond = tail call i1 @ext() ; <i1> [#uses=2]
25 br i1 %cond, label %bb1, label %bb2
28 %cond2 = tail call i1 @ext() ; <i1> [#uses=1]
29 br i1 %cond2, label %bb3, label %bb2
31 bb2: ; preds = %bb1, %entry
33 %cond_merge = phi i1 [ %cond, %entry ], [ false, %bb1 ] ; <i1> [#uses=1]
38 %res = tail call i1 @ext() ; <i1> [#uses=1]
44 @gv = internal constant i8 7
46 define i8 @test3(i8* %a) nounwind {
48 %cond = icmp eq i8* %a, @gv
49 br i1 %cond, label %bb2, label %bb
55 ; CHECK: %should_be_const = load i8* @gv
56 %should_be_const = load i8* %a
57 ret i8 %should_be_const
62 define i32 @test4(i32) {
64 ; CHECK: icmp sgt i32 %0, 2
65 %.demorgan = icmp sgt i32 %0, 2
66 br i1 %.demorgan, label %GreaterThanTwo, label %LessThanOrEqualToTwo
69 ; CHECK-NOT: icmp eq i32 %0, 2
72 br i1 %1, label %Impossible, label %NotTwoAndGreaterThanTwo
74 NotTwoAndGreaterThanTwo:
84 define i32 @switch1(i32 %s) {
87 %cmp = icmp slt i32 %s, 0
88 br i1 %cmp, label %negative, label %out
91 switch i32 %s, label %out [
92 ; CHECK: switch i32 %s, label %out
98 ; CHECK: i32 -1, label %next
100 ; CHECK: i32 -2, label %next
108 %p = phi i32 [ 1, %entry ], [ -1, %negative ], [ -1, %negative ], [ -1, %negative ], [ -1, %negative ]
112 %q = phi i32 [ 0, %negative ], [ 0, %negative ]
116 define i32 @switch2(i32 %s) {
119 %cmp = icmp sgt i32 %s, 0
120 br i1 %cmp, label %positive, label %out
123 switch i32 %s, label %out [
128 ; CHECK: br label %out
131 %p = phi i32 [ -1, %entry ], [ 1, %positive ], [ 1, %positive ]
135 %q = phi i32 [ 0, %positive ], [ 0, %positive ]
139 define i32 @switch3(i32 %s) {
142 %cmp = icmp sgt i32 %s, 0
143 br i1 %cmp, label %positive, label %out
146 switch i32 %s, label %out [
151 ; CHECK: br label %out
154 %p = phi i32 [ -1, %entry ], [ 1, %positive ], [ 1, %positive ]
158 %q = phi i32 [ 0, %positive ], [ 0, %positive ]
162 define void @switch4(i32 %s) {
165 %cmp = icmp eq i32 %s, 0
166 br i1 %cmp, label %zero, label %out
169 switch i32 %s, label %out [
174 ; CHECK: br label %next