[sanitizer] Improve FreeBSD ASLR detection
[llvm-project.git] / llvm / test / Transforms / ConstraintElimination / uge.ll
blob55419c1022401592e893afe00ed60c39c376ac1c
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s
4 declare void @use(i1)
6 define void @test_1_variable_constraint(i8 %x, i8 %y, i8 %z) {
7 ; CHECK-LABEL: @test_1_variable_constraint(
8 ; CHECK-NEXT:  entry:
9 ; CHECK-NEXT:    [[C_1:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]
10 ; CHECK-NEXT:    br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
11 ; CHECK:       bb1:
12 ; CHECK-NEXT:    [[T_1:%.*]] = icmp uge i8 [[X]], [[Y]]
13 ; CHECK-NEXT:    call void @use(i1 true)
14 ; CHECK-NEXT:    [[C_2:%.*]] = icmp uge i8 [[X]], 10
15 ; CHECK-NEXT:    call void @use(i1 [[C_2]])
16 ; CHECK-NEXT:    [[C_3:%.*]] = icmp uge i8 [[Y]], [[X]]
17 ; CHECK-NEXT:    call void @use(i1 [[C_3]])
18 ; CHECK-NEXT:    [[C_4:%.*]] = icmp uge i8 10, [[X]]
19 ; CHECK-NEXT:    call void @use(i1 [[C_4]])
20 ; CHECK-NEXT:    ret void
21 ; CHECK:       bb2:
22 ; CHECK-NEXT:    [[T_2:%.*]] = icmp uge i8 [[Y]], [[X]]
23 ; CHECK-NEXT:    call void @use(i1 true)
24 ; CHECK-NEXT:    [[F_1:%.*]] = icmp uge i8 [[X]], [[Y]]
25 ; CHECK-NEXT:    call void @use(i1 false)
26 ; CHECK-NEXT:    [[C_5:%.*]] = icmp uge i8 [[X]], 10
27 ; CHECK-NEXT:    call void @use(i1 [[C_5]])
28 ; CHECK-NEXT:    [[C_6:%.*]] = icmp uge i8 10, [[X]]
29 ; CHECK-NEXT:    call void @use(i1 [[C_6]])
30 ; CHECK-NEXT:    ret void
32 entry:
33   %c.1 = icmp uge i8 %x, %y
34   br i1 %c.1, label %bb1, label %bb2
36 bb1:
37   %t.1 = icmp uge i8 %x, %y
38   call void @use(i1 %t.1)
39   %c.2 = icmp uge i8 %x, 10
40   call void @use(i1 %c.2)
41   %c.3 = icmp uge i8 %y, %x
42   call void @use(i1 %c.3)
43   %c.4 = icmp uge i8 10, %x
44   call void @use(i1 %c.4)
45   ret void
47 bb2:
48   %t.2 = icmp uge i8 %y, %x
49   call void @use(i1 %t.2)
50   %f.1 = icmp uge i8 %x, %y
51   call void @use(i1 %f.1)
52   %c.5 = icmp uge i8 %x, 10
53   call void @use(i1 %c.5)
54   %c.6 = icmp uge i8 10, %x
55   call void @use(i1 %c.6)
56   ret void
59 define void @test_1_constant_constraint(i8 %x) {
60 ; CHECK-LABEL: @test_1_constant_constraint(
61 ; CHECK-NEXT:  entry:
62 ; CHECK-NEXT:    [[C_1:%.*]] = icmp uge i8 [[X:%.*]], 10
63 ; CHECK-NEXT:    br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
64 ; CHECK:       bb1:
65 ; CHECK-NEXT:    [[T_1:%.*]] = icmp uge i8 [[X]], 10
66 ; CHECK-NEXT:    call void @use(i1 true)
67 ; CHECK-NEXT:    [[T_2:%.*]] = icmp uge i8 [[X]], 9
68 ; CHECK-NEXT:    call void @use(i1 true)
69 ; CHECK-NEXT:    [[C_2:%.*]] = icmp uge i8 [[X]], 11
70 ; CHECK-NEXT:    call void @use(i1 [[C_2]])
71 ; CHECK-NEXT:    [[C_4:%.*]] = icmp uge i8 10, [[X]]
72 ; CHECK-NEXT:    call void @use(i1 [[C_4]])
73 ; CHECK-NEXT:    ret void
74 ; CHECK:       bb2:
75 ; CHECK-NEXT:    [[T_3:%.*]] = icmp uge i8 11, [[X]]
76 ; CHECK-NEXT:    call void @use(i1 true)
77 ; CHECK-NEXT:    [[F_1:%.*]] = icmp uge i8 [[X]], 10
78 ; CHECK-NEXT:    call void @use(i1 false)
79 ; CHECK-NEXT:    [[F_1_1:%.*]] = icmp uge i8 [[X]], 10
80 ; CHECK-NEXT:    call void @use(i1 false)
81 ; CHECK-NEXT:    [[C_5:%.*]] = icmp uge i8 [[X]], 9
82 ; CHECK-NEXT:    call void @use(i1 [[C_5]])
83 ; CHECK-NEXT:    [[C_6:%.*]] = icmp uge i8 1, [[X]]
84 ; CHECK-NEXT:    call void @use(i1 [[C_6]])
85 ; CHECK-NEXT:    ret void
87 entry:
88   %c.1 = icmp uge i8 %x, 10
89   br i1 %c.1, label %bb1, label %bb2
91 bb1:
92   %t.1 = icmp uge i8 %x, 10
93   call void @use(i1 %t.1)
94   %t.2 = icmp uge i8 %x, 9
95   call void @use(i1 %t.2)
96   %c.2 = icmp uge i8 %x, 11
97   call void @use(i1 %c.2)
98   %c.4 = icmp uge i8 10, %x
99   call void @use(i1 %c.4)
100   ret void
102 bb2:
103   %t.3 = icmp uge i8 11, %x
104   call void @use(i1 %t.3)
105   %f.1 = icmp uge i8 %x, 10
106   call void @use(i1 %f.1)
109   %f.1.1 = icmp uge i8 %x, 10
110   call void @use(i1 %f.1.1)
111   %c.5 = icmp uge i8 %x, 9
112   call void @use(i1 %c.5)
113   %c.6 = icmp uge i8 1, %x
114   call void @use(i1 %c.6)
115   ret void
118 define i8 @test1(i8 %x, i8 %y, i8 %z) {
119 ; CHECK-LABEL: @test1(
120 ; CHECK-NEXT:  entry:
121 ; CHECK-NEXT:    [[C_1:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]
122 ; CHECK-NEXT:    br i1 [[C_1]], label [[BB1:%.*]], label [[EXIT:%.*]]
123 ; CHECK:       bb1:
124 ; CHECK-NEXT:    [[C_2:%.*]] = icmp uge i8 [[Y]], [[Z:%.*]]
125 ; CHECK-NEXT:    br i1 [[C_2]], label [[BB2:%.*]], label [[EXIT]]
126 ; CHECK:       bb2:
127 ; CHECK-NEXT:    [[C_3:%.*]] = icmp uge i8 [[X]], [[Z]]
128 ; CHECK-NEXT:    br i1 true, label [[BB3:%.*]], label [[EXIT]]
129 ; CHECK:       bb3:
130 ; CHECK-NEXT:    ret i8 10
131 ; CHECK:       exit:
132 ; CHECK-NEXT:    ret i8 20
134 entry:
135   %c.1 = icmp uge i8 %x, %y
136   br i1 %c.1, label %bb1, label %exit
138 bb1:
139   %c.2 = icmp uge i8 %y, %z
140   br i1 %c.2, label %bb2, label %exit
142 bb2:
143   %c.3 = icmp uge i8 %x, %z
144   br i1 %c.3, label %bb3, label %exit
146 bb3:
147   ret i8 10
149 exit:
150   ret i8 20
154 define i8 @test2(i8 %x, i8 %y, i8 %z, i8 %a) {
155 ; CHECK-LABEL: @test2(
156 ; CHECK-NEXT:  entry:
157 ; CHECK-NEXT:    [[C_1:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]
158 ; CHECK-NEXT:    br i1 [[C_1]], label [[BB1:%.*]], label [[EXIT:%.*]]
159 ; CHECK:       bb1:
160 ; CHECK-NEXT:    [[C_2:%.*]] = icmp uge i8 [[Y]], [[Z:%.*]]
161 ; CHECK-NEXT:    br i1 [[C_2]], label [[BB2:%.*]], label [[EXIT]]
162 ; CHECK:       bb2:
163 ; CHECK-NEXT:    [[C_3:%.*]] = icmp uge i8 [[X]], [[A:%.*]]
164 ; CHECK-NEXT:    br i1 [[C_3]], label [[BB3:%.*]], label [[EXIT]]
165 ; CHECK:       bb3:
166 ; CHECK-NEXT:    ret i8 10
167 ; CHECK:       exit:
168 ; CHECK-NEXT:    ret i8 20
170 entry:
171   %c.1 = icmp uge i8 %x, %y
172   br i1 %c.1, label %bb1, label %exit
174 bb1:
175   %c.2 = icmp uge i8 %y, %z
176   br i1 %c.2, label %bb2, label %exit
178 bb2:
179   %c.3 = icmp uge i8 %x, %a
180   br i1 %c.3, label %bb3, label %exit
182 bb3:
183   ret i8 10
185 exit:
186   ret i8 20
190 define i8 @test3(i8 %x, i8 %y) {
191 ; CHECK-LABEL: @test3(
192 ; CHECK-NEXT:  entry:
193 ; CHECK-NEXT:    [[C_1:%.*]] = icmp uge i8 [[X:%.*]], 10
194 ; CHECK-NEXT:    br i1 [[C_1]], label [[BB1:%.*]], label [[EXIT:%.*]]
195 ; CHECK:       bb1:
196 ; CHECK-NEXT:    [[C_2:%.*]] = icmp uge i8 [[Y:%.*]], 20
197 ; CHECK-NEXT:    br i1 [[C_2]], label [[BB2:%.*]], label [[EXIT]]
198 ; CHECK:       bb2:
199 ; CHECK-NEXT:    ret i8 10
200 ; CHECK:       exit:
201 ; CHECK-NEXT:    ret i8 20
203 entry:
204   %c.1 = icmp uge i8 %x, 10
205   br i1 %c.1, label %bb1, label %exit
207 bb1:
208   %c.2 = icmp uge i8 %y, 20
209   br i1 %c.2, label %bb2, label %exit
211 bb2:
212   ret i8 10
214 exit:
215   ret i8 20
218 define i8 @test4(i8 %x, i8 %y, i8 %z) {
219 ; CHECK-LABEL: @test4(
220 ; CHECK-NEXT:  entry:
221 ; CHECK-NEXT:    [[C_1:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]
222 ; CHECK-NEXT:    br i1 [[C_1]], label [[BB1:%.*]], label [[EXIT:%.*]]
223 ; CHECK:       bb1:
224 ; CHECK-NEXT:    [[C_2:%.*]] = icmp uge i8 [[Y]], [[Z:%.*]]
225 ; CHECK-NEXT:    br i1 [[C_2]], label [[BB2:%.*]], label [[EXIT]]
226 ; CHECK:       bb2:
227 ; CHECK-NEXT:    [[T_1:%.*]] = icmp uge i8 [[X]], [[Z]]
228 ; CHECK-NEXT:    call void @use(i1 true)
229 ; CHECK-NEXT:    [[U_1:%.*]] = icmp eq i8 [[X]], [[Z]]
230 ; CHECK-NEXT:    call void @use(i1 [[U_1]])
231 ; CHECK-NEXT:    ret i8 10
232 ; CHECK:       exit:
233 ; CHECK-NEXT:    ret i8 20
235 entry:
236   %c.1 = icmp uge i8 %x, %y
237   br i1 %c.1, label %bb1, label %exit
239 bb1:
240   %c.2 = icmp uge i8 %y, %z
241   br i1 %c.2, label %bb2, label %exit
243 bb2:
244   %t.1 = icmp uge i8 %x, %z
245   call void @use(i1 %t.1)
246   %u.1 = icmp eq i8 %x, %z
247   call void @use(i1 %u.1)
248   ret i8 10
251 exit:
252   ret i8 20