blob: 60ef813659821c72552f9d5a803d9d364b49ff14 [file] [log] [blame]
Chad Rosier25cfb7d2016-05-05 15:39:18 +00001; RUN: opt %s -S -simplifycfg | FileCheck %s
2
3; cmp1 implies cmp2 is false
4; CHECK-LABEL: @test1
5; CHECK-NOT: call void @is(i1 true)
6; CHECK: call void @is(i1 false)
7define void @test1(i32 %a) {
8 %cmp1 = icmp eq i32 %a, 0
9 br i1 %cmp1, label %taken, label %untaken
10
11taken:
12 %cmp2 = icmp eq i32 %a, 1
13 br i1 %cmp2, label %istrue, label %isfalse
14
15istrue:
16 call void @is(i1 true)
17 ret void
18
19isfalse:
20 call void @is(i1 false)
21 ret void
22
23untaken:
24 ret void
25}
26
27; cmp1 implies cmp2 is false
28; CHECK-LABEL: @test2
29; CHECK-NOT: call void @is(i1 true)
30; CHECK: call void @is(i1 false)
31define void @test2(i32 %a) {
32 %cmp1 = icmp ugt i32 %a, 5
33 br i1 %cmp1, label %untaken, label %taken
34
35taken:
36 %cmp2 = icmp ugt i32 %a, 6
37 br i1 %cmp2, label %istrue, label %isfalse
38
39istrue:
40 call void @is(i1 true)
41 ret void
42
43isfalse:
44 call void @is(i1 false)
45 ret void
46
47untaken:
48 ret void
49}
50
51; cmp1 implies cmp2 is false
52; CHECK-LABEL: @test3
53; CHECK-NOT: call void @is(i1 true)
54; CHECK: call void @is(i1 false)
55define void @test3(i32 %a) {
56 %cmp1 = icmp ugt i32 %a, 1
57 br i1 %cmp1, label %taken, label %untaken
58
59taken:
60 %cmp2 = icmp eq i32 %a, 0
61 br i1 %cmp2, label %istrue, label %isfalse
62
63istrue:
64 call void @is(i1 true)
65 ret void
66
67isfalse:
68 call void @is(i1 false)
69 ret void
70
71untaken:
72 ret void
73}
74
75; cmp1 implies cmp2 is true
76; CHECK-LABEL: @test4
77; CHECK: call void @is(i1 true)
78; CHECK-NOT: call void @is(i1 false)
79define void @test4(i32 %a) {
80 %cmp1 = icmp sgt i32 %a, 1
81 br i1 %cmp1, label %taken, label %untaken
82
83taken:
84 %cmp2 = icmp ugt i32 %a, 0
85 br i1 %cmp2, label %istrue, label %isfalse
86
87istrue:
88 call void @is(i1 true)
89 ret void
90
91isfalse:
92 call void @is(i1 false)
93 ret void
94
95untaken:
96 ret void
97}
98
99; cmp1 implies cmp2 is true
100; CHECK-LABEL: @test5
101; CHECK: call void @is(i1 true)
102; CHECK-NOT: call void @is(i1 false)
103define void @test5(i32 %a) {
104 %cmp1 = icmp sgt i32 %a, 5
105 br i1 %cmp1, label %taken, label %untaken
106
107taken:
108 %cmp2 = icmp sgt i32 %a, -1
109 br i1 %cmp2, label %istrue, label %isfalse
110
111istrue:
112 call void @is(i1 true)
113 ret void
114
115isfalse:
116 call void @is(i1 false)
117 ret void
118
119untaken:
120 ret void
121}
122
123declare void @is(i1)