1; RUN: opt < %s -simplifycfg -adce -S | \
2; RUN:   not grep "call void @f1"
3; END.
4
5declare void @f1()
6
7declare void @f2()
8
9declare void @f3()
10
11declare void @f4()
12
13define i32 @test1(i32 %X, i1 %D) {
14E:
15	%C = icmp eq i32 %X, 0		; <i1> [#uses=2]
16	br i1 %C, label %T, label %F
17T:		; preds = %A, %E
18	br i1 %C, label %B, label %A
19A:		; preds = %T
20	call void @f1( )
21	br i1 %D, label %T, label %F
22B:		; preds = %T
23	call void @f2( )
24	ret i32 345
25F:		; preds = %A, %E
26	call void @f3( )
27	ret i32 123
28}
29
30define i32 @test2(i32 %X, i1 %D) {
31E:
32	%C = icmp eq i32 %X, 0		; <i1> [#uses=2]
33	br i1 %C, label %T, label %F
34T:		; preds = %A, %E
35	%P = phi i1 [ true, %E ], [ %C, %A ]		; <i1> [#uses=1]
36	br i1 %P, label %B, label %A
37A:		; preds = %T
38	call void @f1( )
39	br i1 %D, label %T, label %F
40B:		; preds = %T
41	call void @f2( )
42	ret i32 345
43F:		; preds = %A, %E
44	call void @f3( )
45	ret i32 123
46}
47
48define i32 @test3(i32 %X, i1 %D, i32* %AP, i32* %BP) {
49E:
50	%C = icmp eq i32 %X, 0		; <i1> [#uses=2]
51	br i1 %C, label %T, label %F
52T:		; preds = %A, %E
53	call void @f3( )
54	%XX = load i32* %AP		; <i32> [#uses=1]
55	store i32 %XX, i32* %BP
56	br i1 %C, label %B, label %A
57A:		; preds = %T
58	call void @f1( )
59	br i1 %D, label %T, label %F
60B:		; preds = %T
61	call void @f2( )
62	ret i32 345
63F:		; preds = %A, %E
64	call void @f3( )
65	ret i32 123
66}
67