1; RUN: opt -gvn -S < %s | FileCheck %s
2
3define i32 @f1(i32 %x) {
4  ; CHECK-LABEL: define i32 @f1(
5bb0:
6  %cmp = icmp eq i32 %x, 0
7  br i1 %cmp, label %bb2, label %bb1
8bb1:
9  br label %bb2
10bb2:
11  %cond = phi i32 [ %x, %bb0 ], [ 0, %bb1 ]
12  %foo = add i32 %cond, %x
13  ret i32 %foo
14  ; CHECK: bb2:
15  ; CHECK: ret i32 %x
16}
17
18define i32 @f2(i32 %x) {
19  ; CHECK-LABEL: define i32 @f2(
20bb0:
21  %cmp = icmp ne i32 %x, 0
22  br i1 %cmp, label %bb1, label %bb2
23bb1:
24  br label %bb2
25bb2:
26  %cond = phi i32 [ %x, %bb0 ], [ 0, %bb1 ]
27  %foo = add i32 %cond, %x
28  ret i32 %foo
29  ; CHECK: bb2:
30  ; CHECK: ret i32 %x
31}
32
33define i32 @f3(i32 %x) {
34  ; CHECK-LABEL: define i32 @f3(
35bb0:
36  switch i32 %x, label %bb1 [ i32 0, label %bb2]
37bb1:
38  br label %bb2
39bb2:
40  %cond = phi i32 [ %x, %bb0 ], [ 0, %bb1 ]
41  %foo = add i32 %cond, %x
42  ret i32 %foo
43  ; CHECK: bb2:
44  ; CHECK: ret i32 %x
45}
46
47declare void @g(i1)
48define void @f4(i8 * %x)  {
49; CHECK-LABEL: define void @f4(
50bb0:
51  %y = icmp eq i8* null, %x
52  br i1 %y, label %bb2, label %bb1
53bb1:
54  br label %bb2
55bb2:
56  %zed = icmp eq i8* null, %x
57  call void @g(i1 %zed)
58; CHECK: call void @g(i1 %y)
59  ret void
60}
61