[SimplifyLibCalls] Remove useless bits of this tests.
[oota-llvm.git] / test / Transforms / InstCombine / sign-test-and-or.ll
1 ; RUN: opt -S -instcombine < %s | FileCheck %s
2
3 declare void @foo()
4
5 define void @test1(i32 %a, i32 %b) nounwind {
6   %1 = icmp slt i32 %a, 0
7   %2 = icmp slt i32 %b, 0
8   %or.cond = or i1 %1, %2
9   br i1 %or.cond, label %if.then, label %if.end
10
11 ; CHECK-LABEL: @test1(
12 ; CHECK-NEXT: %1 = or i32 %a, %b
13 ; CHECK-NEXT: %2 = icmp slt i32 %1, 0
14 ; CHECK-NEXT: br
15
16 if.then:
17   tail call void @foo() nounwind
18   ret void
19
20 if.end:
21   ret void
22 }
23
24 define void @test2(i32 %a, i32 %b) nounwind {
25   %1 = icmp sgt i32 %a, -1
26   %2 = icmp sgt i32 %b, -1
27   %or.cond = or i1 %1, %2
28   br i1 %or.cond, label %if.then, label %if.end
29
30 ; CHECK-LABEL: @test2(
31 ; CHECK-NEXT: %1 = and i32 %a, %b
32 ; CHECK-NEXT: %2 = icmp sgt i32 %1, -1
33 ; CHECK-NEXT: br
34
35 if.then:
36   tail call void @foo() nounwind
37   ret void
38
39 if.end:
40   ret void
41 }
42
43 define void @test3(i32 %a, i32 %b) nounwind {
44   %1 = icmp slt i32 %a, 0
45   %2 = icmp slt i32 %b, 0
46   %or.cond = and i1 %1, %2
47   br i1 %or.cond, label %if.then, label %if.end
48
49 ; CHECK-LABEL: @test3(
50 ; CHECK-NEXT: %1 = and i32 %a, %b
51 ; CHECK-NEXT: %2 = icmp slt i32 %1, 0
52 ; CHECK-NEXT: br
53
54 if.then:
55   tail call void @foo() nounwind
56   ret void
57
58 if.end:
59   ret void
60 }
61
62 define void @test4(i32 %a, i32 %b) nounwind {
63   %1 = icmp sgt i32 %a, -1
64   %2 = icmp sgt i32 %b, -1
65   %or.cond = and i1 %1, %2
66   br i1 %or.cond, label %if.then, label %if.end
67
68 ; CHECK-LABEL: @test4(
69 ; CHECK-NEXT: %1 = or i32 %a, %b
70 ; CHECK-NEXT: %2 = icmp sgt i32 %1, -1
71 ; CHECK-NEXT: br
72
73 if.then:
74   tail call void @foo() nounwind
75   ret void
76
77 if.end:
78   ret void
79 }
80
81 define void @test5(i32 %a) nounwind {
82   %and = and i32 %a, 134217728
83   %1 = icmp eq i32 %and, 0
84   %2 = icmp sgt i32 %a, -1
85   %or.cond = and i1 %1, %2
86   br i1 %or.cond, label %if.then, label %if.end
87
88 ; CHECK-LABEL: @test5(
89 ; CHECK-NEXT: %1 = and i32 %a, -2013265920
90 ; CHECK-NEXT: %2 = icmp eq i32 %1, 0
91 ; CHECK-NEXT: br i1 %2, label %if.then, label %if.end
92
93 if.then:
94   tail call void @foo() nounwind
95   ret void
96
97 if.end:
98   ret void
99 }
100
101 define void @test6(i32 %a) nounwind {
102   %1 = icmp sgt i32 %a, -1
103   %and = and i32 %a, 134217728
104   %2 = icmp eq i32 %and, 0
105   %or.cond = and i1 %1, %2
106   br i1 %or.cond, label %if.then, label %if.end
107
108 ; CHECK-LABEL: @test6(
109 ; CHECK-NEXT: %1 = and i32 %a, -2013265920
110 ; CHECK-NEXT: %2 = icmp eq i32 %1, 0
111 ; CHECK-NEXT: br i1 %2, label %if.then, label %if.end
112
113 if.then:
114   tail call void @foo() nounwind
115   ret void
116
117 if.end:
118   ret void
119 }
120
121 define void @test7(i32 %a) nounwind {
122   %and = and i32 %a, 134217728
123   %1 = icmp ne i32 %and, 0
124   %2 = icmp slt i32 %a, 0
125   %or.cond = or i1 %1, %2
126   br i1 %or.cond, label %if.then, label %if.end
127
128 ; CHECK-LABEL: @test7(
129 ; CHECK-NEXT: %1 = and i32 %a, -2013265920
130 ; CHECK-NEXT: %2 = icmp eq i32 %1, 0
131 ; CHECK-NEXT: br i1 %2, label %if.end, label %if.the
132
133 if.then:
134   tail call void @foo() nounwind
135   ret void
136
137 if.end:
138   ret void
139 }
140
141 define void @test8(i32 %a) nounwind {
142   %1 = icmp slt i32 %a, 0
143   %and = and i32 %a, 134217728
144   %2 = icmp ne i32 %and, 0
145   %or.cond = or i1 %1, %2
146   br i1 %or.cond, label %if.then, label %if.end
147
148 ; CHECK-LABEL: @test8(
149 ; CHECK-NEXT: %1 = and i32 %a, -2013265920
150 ; CHECK-NEXT: %2 = icmp eq i32 %1, 0
151 ; CHECK-NEXT: br i1 %2, label %if.end, label %if.the
152
153 if.then:
154   tail call void @foo() nounwind
155   ret void
156
157 if.end:
158   ret void
159 }
160
161 define void @test9(i32 %a) nounwind {
162   %1 = and i32 %a, 1073741824
163   %2 = icmp ne i32 %1, 0
164   %3 = icmp sgt i32 %a, -1
165   %or.cond = and i1 %2, %3
166   br i1 %or.cond, label %if.then, label %if.end
167
168 ; CHECK-LABEL: @test9(
169 ; CHECK-NEXT: %1 = and i32 %a, -1073741824
170 ; CHECK-NEXT: %2 = icmp eq i32 %1, 1073741824
171 ; CHECK-NEXT: br i1 %2, label %if.then, label %if.end
172
173 if.then:
174   tail call void @foo() nounwind
175   ret void
176
177 if.end:
178   ret void
179 }
180
181 define void @test10(i32 %a) nounwind {
182   %1 = and i32 %a, 2
183   %2 = icmp eq i32 %1, 0
184   %3 = icmp ult i32 %a, 4
185   %or.cond = and i1 %2, %3
186   br i1 %or.cond, label %if.then, label %if.end
187
188 ; CHECK-LABEL: @test10(
189 ; CHECK-NEXT: %1 = icmp ult i32 %a, 2
190 ; CHECK-NEXT: br i1 %1, label %if.then, label %if.end
191
192 if.then:
193   tail call void @foo() nounwind
194   ret void
195
196 if.end:
197   ret void
198 }
199
200 define void @test11(i32 %a) nounwind {
201   %1 = and i32 %a, 2
202   %2 = icmp ne i32 %1, 0
203   %3 = icmp ugt i32 %a, 3
204   %or.cond = or i1 %2, %3
205   br i1 %or.cond, label %if.then, label %if.end
206
207 ; CHECK-LABEL: @test11(
208 ; CHECK-NEXT: %1 = icmp ugt i32 %a, 1
209 ; CHECK-NEXT: br i1 %1, label %if.then, label %if.end
210
211 if.then:
212   tail call void @foo() nounwind
213   ret void
214
215 if.end:
216   ret void
217 }