blob: e84bc379ee5581f230ae3fdc0d311c4af298a055 [file] [log] [blame]
Chris Lattnerd9bacc02010-12-13 03:18:54 +00001; RUN: opt < %s -simplifycfg -S | FileCheck %s
Chris Lattnerae509322004-02-24 05:34:44 +00002
Tanya Lattnerbaa370b2008-03-18 03:45:45 +00003declare void @foo1()
Chris Lattnerae509322004-02-24 05:34:44 +00004
Tanya Lattnerbaa370b2008-03-18 03:45:45 +00005declare void @foo2()
6
7define void @test1(i32 %V) {
8 %C1 = icmp eq i32 %V, 4 ; <i1> [#uses=1]
9 %C2 = icmp eq i32 %V, 17 ; <i1> [#uses=1]
10 %CN = or i1 %C1, %C2 ; <i1> [#uses=1]
11 br i1 %CN, label %T, label %F
12T: ; preds = %0
13 call void @foo1( )
14 ret void
15F: ; preds = %0
16 call void @foo2( )
17 ret void
Chris Lattnerd9bacc02010-12-13 03:18:54 +000018; CHECK: @test1
19; CHECK: switch i32 %V, label %F [
20; CHECK: i32 17, label %T
21; CHECK: i32 4, label %T
22; CHECK: ]
Chris Lattnerae509322004-02-24 05:34:44 +000023}
24
Tanya Lattnerbaa370b2008-03-18 03:45:45 +000025define void @test2(i32 %V) {
26 %C1 = icmp ne i32 %V, 4 ; <i1> [#uses=1]
27 %C2 = icmp ne i32 %V, 17 ; <i1> [#uses=1]
28 %CN = and i1 %C1, %C2 ; <i1> [#uses=1]
29 br i1 %CN, label %T, label %F
30T: ; preds = %0
31 call void @foo1( )
32 ret void
33F: ; preds = %0
34 call void @foo2( )
35 ret void
Chris Lattnerd9bacc02010-12-13 03:18:54 +000036; CHECK: @test2
37; CHECK: switch i32 %V, label %T [
38; CHECK: i32 17, label %F
39; CHECK: i32 4, label %F
40; CHECK: ]
Chris Lattnerae509322004-02-24 05:34:44 +000041}
42
Tanya Lattnerbaa370b2008-03-18 03:45:45 +000043define void @test3(i32 %V) {
44 %C1 = icmp eq i32 %V, 4 ; <i1> [#uses=1]
45 br i1 %C1, label %T, label %N
46N: ; preds = %0
47 %C2 = icmp eq i32 %V, 17 ; <i1> [#uses=1]
48 br i1 %C2, label %T, label %F
49T: ; preds = %N, %0
50 call void @foo1( )
51 ret void
52F: ; preds = %N
53 call void @foo2( )
54 ret void
Chris Lattnerd9bacc02010-12-13 03:18:54 +000055
56; CHECK: @test3
57; CHECK: switch i32 %V, label %F [
58; CHECK: i32 4, label %T
59; CHECK: i32 17, label %T
60; CHECK: ]
Chris Lattner272f3522005-02-24 02:13:50 +000061}
62
63
Chris Lattnerd9bacc02010-12-13 03:18:54 +000064
65define i32 @test4(i8 zeroext %c) nounwind ssp noredzone {
66entry:
67 %cmp = icmp eq i8 %c, 62
68 br i1 %cmp, label %lor.end, label %lor.lhs.false
69
70lor.lhs.false: ; preds = %entry
71 %cmp4 = icmp eq i8 %c, 34
72 br i1 %cmp4, label %lor.end, label %lor.rhs
73
74lor.rhs: ; preds = %lor.lhs.false
75 %cmp8 = icmp eq i8 %c, 92
76 br label %lor.end
77
78lor.end: ; preds = %lor.rhs, %lor.lhs.false, %entry
79 %0 = phi i1 [ true, %lor.lhs.false ], [ true, %entry ], [ %cmp8, %lor.rhs ]
80 %lor.ext = zext i1 %0 to i32
81 ret i32 %lor.ext
82
83; CHECK: @test4
84; CHECK: switch i8 %c, label %lor.rhs [
85; CHECK: i8 62, label %lor.end
86; CHECK: i8 34, label %lor.end
87; CHECK: i8 92, label %lor.end
88; CHECK: ]
89}
90
Chris Lattner62cc76e2010-12-13 03:43:57 +000091define i32 @test5(i8 zeroext %c) nounwind ssp noredzone {
92entry:
93 switch i8 %c, label %lor.rhs [
94 i8 62, label %lor.end
95 i8 34, label %lor.end
96 i8 92, label %lor.end
97 ]
98
99lor.rhs: ; preds = %entry
100 %V = icmp eq i8 %c, 92
101 br label %lor.end
102
103lor.end: ; preds = %entry, %entry, %entry, %lor.rhs
104 %0 = phi i1 [ true, %entry ], [ %V, %lor.rhs ], [ true, %entry ], [ true, %entry ]
105 %lor.ext = zext i1 %0 to i32
106 ret i32 %lor.ext
107; CHECK: @test5
108; CHECK: switch i8 %c, label %lor.rhs [
109; CHECK: i8 62, label %lor.end
110; CHECK: i8 34, label %lor.end
111; CHECK: i8 92, label %lor.end
112; CHECK: ]
113}