blob: c19ba69866b46e8938249a4e631f1c84c6823e60 [file] [log] [blame]
Dan Gohmanf2f6ce62009-09-11 18:01:28 +00001; RUN: opt < %s -simplifycfg -adce -S | \
Chandler Carruth1de43ed2012-07-02 19:09:46 +00002; RUN: not grep "call void @f1"
Reid Spencer9aafdcf2007-04-15 09:21:47 +00003; END.
4
Tanya Lattnerf04d8d12008-03-18 03:45:45 +00005declare void @f1()
Chris Lattnerb6e2b7e2005-09-19 23:48:04 +00006
Tanya Lattnerf04d8d12008-03-18 03:45:45 +00007declare void @f2()
Chris Lattnerb6e2b7e2005-09-19 23:48:04 +00008
Tanya Lattnerf04d8d12008-03-18 03:45:45 +00009declare void @f3()
10
11declare void @f4()
12
13define i32 @test1(i32 %X, i1 %D) {
Chris Lattnerecd7b6d2005-09-20 00:41:55 +000014E:
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000015 %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
Chris Lattnerecd7b6d2005-09-20 00:41:55 +000028}
29
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000030define i32 @test2(i32 %X, i1 %D) {
Chris Lattnerb6e2b7e2005-09-19 23:48:04 +000031E:
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000032 %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
Chris Lattnerb6e2b7e2005-09-19 23:48:04 +000046}
47
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000048define i32 @test3(i32 %X, i1 %D, i32* %AP, i32* %BP) {
Chris Lattner055135d2005-09-20 01:43:41 +000049E:
Tanya Lattnerf04d8d12008-03-18 03:45:45 +000050 %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
Chris Lattner055135d2005-09-20 01:43:41 +000066}