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