blob: 4c1b7e68e25f38e9b8e9cd083b2f3c9875352cb6 [file] [log] [blame]
Eric Christophercee313d2019-04-17 04:52:47 +00001; 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, 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}