[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / RISCV / setcc-logic.ll
blob6a6c1bcd8dec1388d6a1ed890498ba8a37942811
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
3 ; RUN:   | FileCheck %s -check-prefix=RV32I
4 ; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
5 ; RUN:   | FileCheck %s -check-prefix=RV64I
7 define i1 @and_icmp_eq(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d) nounwind {
8 ; RV32I-LABEL: and_icmp_eq:
9 ; RV32I:       # %bb.0:
10 ; RV32I-NEXT:    xor a0, a0, a1
11 ; RV32I-NEXT:    xor a2, a2, a3
12 ; RV32I-NEXT:    or a0, a0, a2
13 ; RV32I-NEXT:    seqz a0, a0
14 ; RV32I-NEXT:    ret
16 ; RV64I-LABEL: and_icmp_eq:
17 ; RV64I:       # %bb.0:
18 ; RV64I-NEXT:    xor a0, a0, a1
19 ; RV64I-NEXT:    xor a2, a2, a3
20 ; RV64I-NEXT:    or a0, a0, a2
21 ; RV64I-NEXT:    seqz a0, a0
22 ; RV64I-NEXT:    ret
23   %cmp1 = icmp eq i32 %a, %b
24   %cmp2 = icmp eq i32 %c, %d
25   %and = and i1 %cmp1, %cmp2
26   ret i1 %and
29 define i1 @or_icmp_ne(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d) nounwind {
30 ; RV32I-LABEL: or_icmp_ne:
31 ; RV32I:       # %bb.0:
32 ; RV32I-NEXT:    xor a0, a0, a1
33 ; RV32I-NEXT:    xor a2, a2, a3
34 ; RV32I-NEXT:    or a0, a0, a2
35 ; RV32I-NEXT:    snez a0, a0
36 ; RV32I-NEXT:    ret
38 ; RV64I-LABEL: or_icmp_ne:
39 ; RV64I:       # %bb.0:
40 ; RV64I-NEXT:    xor a0, a0, a1
41 ; RV64I-NEXT:    xor a2, a2, a3
42 ; RV64I-NEXT:    or a0, a0, a2
43 ; RV64I-NEXT:    snez a0, a0
44 ; RV64I-NEXT:    ret
45   %cmp1 = icmp ne i32 %a, %b
46   %cmp2 = icmp ne i32 %c, %d
47   %or = or i1 %cmp1, %cmp2
48   ret i1 %or
51 define i1 @or_icmps_const_1bit_diff(i64 %x) nounwind {
52 ; RV32I-LABEL: or_icmps_const_1bit_diff:
53 ; RV32I:       # %bb.0:
54 ; RV32I-NEXT:    addi a2, a0, -13
55 ; RV32I-NEXT:    sltu a0, a2, a0
56 ; RV32I-NEXT:    add a0, a1, a0
57 ; RV32I-NEXT:    addi a0, a0, -1
58 ; RV32I-NEXT:    andi a2, a2, -5
59 ; RV32I-NEXT:    or a0, a2, a0
60 ; RV32I-NEXT:    seqz a0, a0
61 ; RV32I-NEXT:    ret
63 ; RV64I-LABEL: or_icmps_const_1bit_diff:
64 ; RV64I:       # %bb.0:
65 ; RV64I-NEXT:    addi a0, a0, -13
66 ; RV64I-NEXT:    andi a0, a0, -5
67 ; RV64I-NEXT:    seqz a0, a0
68 ; RV64I-NEXT:    ret
69   %a = icmp eq i64 %x, 17
70   %b = icmp eq i64 %x, 13
71   %r = or i1 %a, %b
72   ret i1 %r
75 define i1 @and_icmps_const_1bit_diff(i32 %x) nounwind {
76 ; RV32I-LABEL: and_icmps_const_1bit_diff:
77 ; RV32I:       # %bb.0:
78 ; RV32I-NEXT:    addi a0, a0, -44
79 ; RV32I-NEXT:    andi a0, a0, -17
80 ; RV32I-NEXT:    snez a0, a0
81 ; RV32I-NEXT:    ret
83 ; RV64I-LABEL: and_icmps_const_1bit_diff:
84 ; RV64I:       # %bb.0:
85 ; RV64I-NEXT:    addiw a0, a0, -44
86 ; RV64I-NEXT:    andi a0, a0, -17
87 ; RV64I-NEXT:    snez a0, a0
88 ; RV64I-NEXT:    ret
89   %a = icmp ne i32 %x, 44
90   %b = icmp ne i32 %x, 60
91   %r = and i1 %a, %b
92   ret i1 %r
95 define i1 @and_icmps_const_not1bit_diff(i32 %x) nounwind {
96 ; RV32I-LABEL: and_icmps_const_not1bit_diff:
97 ; RV32I:       # %bb.0:
98 ; RV32I-NEXT:    addi a1, a0, -44
99 ; RV32I-NEXT:    snez a1, a1
100 ; RV32I-NEXT:    addi a0, a0, -92
101 ; RV32I-NEXT:    snez a0, a0
102 ; RV32I-NEXT:    and a0, a1, a0
103 ; RV32I-NEXT:    ret
105 ; RV64I-LABEL: and_icmps_const_not1bit_diff:
106 ; RV64I:       # %bb.0:
107 ; RV64I-NEXT:    sext.w a0, a0
108 ; RV64I-NEXT:    addi a1, a0, -44
109 ; RV64I-NEXT:    snez a1, a1
110 ; RV64I-NEXT:    addi a0, a0, -92
111 ; RV64I-NEXT:    snez a0, a0
112 ; RV64I-NEXT:    and a0, a1, a0
113 ; RV64I-NEXT:    ret
114   %a = icmp ne i32 %x, 44
115   %b = icmp ne i32 %x, 92
116   %r = and i1 %a, %b
117   ret i1 %r
120 define i1 @and_icmp_sge(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d) nounwind {
121 ; RV32I-LABEL: and_icmp_sge:
122 ; RV32I:       # %bb.0:
123 ; RV32I-NEXT:    slt a0, a0, a1
124 ; RV32I-NEXT:    slt a1, a2, a3
125 ; RV32I-NEXT:    or a0, a0, a1
126 ; RV32I-NEXT:    xori a0, a0, 1
127 ; RV32I-NEXT:    ret
129 ; RV64I-LABEL: and_icmp_sge:
130 ; RV64I:       # %bb.0:
131 ; RV64I-NEXT:    slt a0, a0, a1
132 ; RV64I-NEXT:    slt a1, a2, a3
133 ; RV64I-NEXT:    or a0, a0, a1
134 ; RV64I-NEXT:    xori a0, a0, 1
135 ; RV64I-NEXT:    ret
136   %cmp1 = icmp sge i32 %a, %b
137   %cmp2 = icmp sge i32 %c, %d
138   %and = and i1 %cmp1, %cmp2
139   ret i1 %and
142 define i1 @and_icmp_sle(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d) nounwind {
143 ; RV32I-LABEL: and_icmp_sle:
144 ; RV32I:       # %bb.0:
145 ; RV32I-NEXT:    slt a0, a1, a0
146 ; RV32I-NEXT:    slt a1, a3, a2
147 ; RV32I-NEXT:    or a0, a0, a1
148 ; RV32I-NEXT:    xori a0, a0, 1
149 ; RV32I-NEXT:    ret
151 ; RV64I-LABEL: and_icmp_sle:
152 ; RV64I:       # %bb.0:
153 ; RV64I-NEXT:    slt a0, a1, a0
154 ; RV64I-NEXT:    slt a1, a3, a2
155 ; RV64I-NEXT:    or a0, a0, a1
156 ; RV64I-NEXT:    xori a0, a0, 1
157 ; RV64I-NEXT:    ret
158   %cmp1 = icmp sle i32 %a, %b
159   %cmp2 = icmp sle i32 %c, %d
160   %and = and i1 %cmp1, %cmp2
161   ret i1 %and
164 define i1 @and_icmp_uge(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d) nounwind {
165 ; RV32I-LABEL: and_icmp_uge:
166 ; RV32I:       # %bb.0:
167 ; RV32I-NEXT:    sltu a0, a0, a1
168 ; RV32I-NEXT:    sltu a1, a2, a3
169 ; RV32I-NEXT:    or a0, a0, a1
170 ; RV32I-NEXT:    xori a0, a0, 1
171 ; RV32I-NEXT:    ret
173 ; RV64I-LABEL: and_icmp_uge:
174 ; RV64I:       # %bb.0:
175 ; RV64I-NEXT:    sltu a0, a0, a1
176 ; RV64I-NEXT:    sltu a1, a2, a3
177 ; RV64I-NEXT:    or a0, a0, a1
178 ; RV64I-NEXT:    xori a0, a0, 1
179 ; RV64I-NEXT:    ret
180   %cmp1 = icmp uge i32 %a, %b
181   %cmp2 = icmp uge i32 %c, %d
182   %and = and i1 %cmp1, %cmp2
183   ret i1 %and
186 define i1 @and_icmp_ule(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d) nounwind {
187 ; RV32I-LABEL: and_icmp_ule:
188 ; RV32I:       # %bb.0:
189 ; RV32I-NEXT:    sltu a0, a1, a0
190 ; RV32I-NEXT:    sltu a1, a3, a2
191 ; RV32I-NEXT:    or a0, a0, a1
192 ; RV32I-NEXT:    xori a0, a0, 1
193 ; RV32I-NEXT:    ret
195 ; RV64I-LABEL: and_icmp_ule:
196 ; RV64I:       # %bb.0:
197 ; RV64I-NEXT:    sltu a0, a1, a0
198 ; RV64I-NEXT:    sltu a1, a3, a2
199 ; RV64I-NEXT:    or a0, a0, a1
200 ; RV64I-NEXT:    xori a0, a0, 1
201 ; RV64I-NEXT:    ret
202   %cmp1 = icmp ule i32 %a, %b
203   %cmp2 = icmp ule i32 %c, %d
204   %and = and i1 %cmp1, %cmp2
205   ret i1 %and
208 define i1 @or_icmp_sge(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d) nounwind {
209 ; RV32I-LABEL: or_icmp_sge:
210 ; RV32I:       # %bb.0:
211 ; RV32I-NEXT:    slt a0, a0, a1
212 ; RV32I-NEXT:    slt a1, a2, a3
213 ; RV32I-NEXT:    and a0, a0, a1
214 ; RV32I-NEXT:    xori a0, a0, 1
215 ; RV32I-NEXT:    ret
217 ; RV64I-LABEL: or_icmp_sge:
218 ; RV64I:       # %bb.0:
219 ; RV64I-NEXT:    slt a0, a0, a1
220 ; RV64I-NEXT:    slt a1, a2, a3
221 ; RV64I-NEXT:    and a0, a0, a1
222 ; RV64I-NEXT:    xori a0, a0, 1
223 ; RV64I-NEXT:    ret
224   %cmp1 = icmp sge i32 %a, %b
225   %cmp2 = icmp sge i32 %c, %d
226   %and = or i1 %cmp1, %cmp2
227   ret i1 %and
230 define i1 @or_icmp_sle(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d) nounwind {
231 ; RV32I-LABEL: or_icmp_sle:
232 ; RV32I:       # %bb.0:
233 ; RV32I-NEXT:    slt a0, a1, a0
234 ; RV32I-NEXT:    slt a1, a3, a2
235 ; RV32I-NEXT:    and a0, a0, a1
236 ; RV32I-NEXT:    xori a0, a0, 1
237 ; RV32I-NEXT:    ret
239 ; RV64I-LABEL: or_icmp_sle:
240 ; RV64I:       # %bb.0:
241 ; RV64I-NEXT:    slt a0, a1, a0
242 ; RV64I-NEXT:    slt a1, a3, a2
243 ; RV64I-NEXT:    and a0, a0, a1
244 ; RV64I-NEXT:    xori a0, a0, 1
245 ; RV64I-NEXT:    ret
246   %cmp1 = icmp sle i32 %a, %b
247   %cmp2 = icmp sle i32 %c, %d
248   %and = or i1 %cmp1, %cmp2
249   ret i1 %and
252 define i1 @or_icmp_uge(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d) nounwind {
253 ; RV32I-LABEL: or_icmp_uge:
254 ; RV32I:       # %bb.0:
255 ; RV32I-NEXT:    sltu a0, a0, a1
256 ; RV32I-NEXT:    sltu a1, a2, a3
257 ; RV32I-NEXT:    and a0, a0, a1
258 ; RV32I-NEXT:    xori a0, a0, 1
259 ; RV32I-NEXT:    ret
261 ; RV64I-LABEL: or_icmp_uge:
262 ; RV64I:       # %bb.0:
263 ; RV64I-NEXT:    sltu a0, a0, a1
264 ; RV64I-NEXT:    sltu a1, a2, a3
265 ; RV64I-NEXT:    and a0, a0, a1
266 ; RV64I-NEXT:    xori a0, a0, 1
267 ; RV64I-NEXT:    ret
268   %cmp1 = icmp uge i32 %a, %b
269   %cmp2 = icmp uge i32 %c, %d
270   %and = or i1 %cmp1, %cmp2
271   ret i1 %and
274 define i1 @or_icmp_ule(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d) nounwind {
275 ; RV32I-LABEL: or_icmp_ule:
276 ; RV32I:       # %bb.0:
277 ; RV32I-NEXT:    sltu a0, a1, a0
278 ; RV32I-NEXT:    sltu a1, a3, a2
279 ; RV32I-NEXT:    and a0, a0, a1
280 ; RV32I-NEXT:    xori a0, a0, 1
281 ; RV32I-NEXT:    ret
283 ; RV64I-LABEL: or_icmp_ule:
284 ; RV64I:       # %bb.0:
285 ; RV64I-NEXT:    sltu a0, a1, a0
286 ; RV64I-NEXT:    sltu a1, a3, a2
287 ; RV64I-NEXT:    and a0, a0, a1
288 ; RV64I-NEXT:    xori a0, a0, 1
289 ; RV64I-NEXT:    ret
290   %cmp1 = icmp ule i32 %a, %b
291   %cmp2 = icmp ule i32 %c, %d
292   %and = or i1 %cmp1, %cmp2
293   ret i1 %and
296 declare void @bar(...)
298 define void @and_sge_eq(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
299 ; RV32I-LABEL: and_sge_eq:
300 ; RV32I:       # %bb.0:
301 ; RV32I-NEXT:    slt a0, a0, a1
302 ; RV32I-NEXT:    xor a2, a2, a3
303 ; RV32I-NEXT:    snez a1, a2
304 ; RV32I-NEXT:    or a0, a1, a0
305 ; RV32I-NEXT:    bnez a0, .LBB13_2
306 ; RV32I-NEXT:  # %bb.1:
307 ; RV32I-NEXT:    ret
308 ; RV32I-NEXT:  .LBB13_2:
309 ; RV32I-NEXT:    tail bar@plt
311 ; RV64I-LABEL: and_sge_eq:
312 ; RV64I:       # %bb.0:
313 ; RV64I-NEXT:    slt a0, a0, a1
314 ; RV64I-NEXT:    xor a2, a2, a3
315 ; RV64I-NEXT:    snez a1, a2
316 ; RV64I-NEXT:    or a0, a1, a0
317 ; RV64I-NEXT:    bnez a0, .LBB13_2
318 ; RV64I-NEXT:  # %bb.1:
319 ; RV64I-NEXT:    ret
320 ; RV64I-NEXT:  .LBB13_2:
321 ; RV64I-NEXT:    tail bar@plt
322   %5 = icmp sge i32 %0, %1
323   %6 = icmp eq i32 %2, %3
324   %7 = and i1 %5, %6
325   br i1 %7, label %9, label %8
327 8:                                                ; preds = %4
328   tail call void @bar()
329   br label %9
331 9:                                                ; preds = %8, %4
332   ret void
335 define void @and_sle_eq(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
336 ; RV32I-LABEL: and_sle_eq:
337 ; RV32I:       # %bb.0:
338 ; RV32I-NEXT:    slt a0, a1, a0
339 ; RV32I-NEXT:    xor a2, a2, a3
340 ; RV32I-NEXT:    snez a1, a2
341 ; RV32I-NEXT:    or a0, a1, a0
342 ; RV32I-NEXT:    bnez a0, .LBB14_2
343 ; RV32I-NEXT:  # %bb.1:
344 ; RV32I-NEXT:    ret
345 ; RV32I-NEXT:  .LBB14_2:
346 ; RV32I-NEXT:    tail bar@plt
348 ; RV64I-LABEL: and_sle_eq:
349 ; RV64I:       # %bb.0:
350 ; RV64I-NEXT:    slt a0, a1, a0
351 ; RV64I-NEXT:    xor a2, a2, a3
352 ; RV64I-NEXT:    snez a1, a2
353 ; RV64I-NEXT:    or a0, a1, a0
354 ; RV64I-NEXT:    bnez a0, .LBB14_2
355 ; RV64I-NEXT:  # %bb.1:
356 ; RV64I-NEXT:    ret
357 ; RV64I-NEXT:  .LBB14_2:
358 ; RV64I-NEXT:    tail bar@plt
359   %5 = icmp sle i32 %0, %1
360   %6 = icmp eq i32 %2, %3
361   %7 = and i1 %5, %6
362   br i1 %7, label %9, label %8
364 8:                                                ; preds = %4
365   tail call void @bar()
366   br label %9
368 9:                                                ; preds = %8, %4
369   ret void
372 define void @and_uge_eq(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
373 ; RV32I-LABEL: and_uge_eq:
374 ; RV32I:       # %bb.0:
375 ; RV32I-NEXT:    sltu a0, a0, a1
376 ; RV32I-NEXT:    xor a2, a2, a3
377 ; RV32I-NEXT:    snez a1, a2
378 ; RV32I-NEXT:    or a0, a1, a0
379 ; RV32I-NEXT:    bnez a0, .LBB15_2
380 ; RV32I-NEXT:  # %bb.1:
381 ; RV32I-NEXT:    ret
382 ; RV32I-NEXT:  .LBB15_2:
383 ; RV32I-NEXT:    tail bar@plt
385 ; RV64I-LABEL: and_uge_eq:
386 ; RV64I:       # %bb.0:
387 ; RV64I-NEXT:    sltu a0, a0, a1
388 ; RV64I-NEXT:    xor a2, a2, a3
389 ; RV64I-NEXT:    snez a1, a2
390 ; RV64I-NEXT:    or a0, a1, a0
391 ; RV64I-NEXT:    bnez a0, .LBB15_2
392 ; RV64I-NEXT:  # %bb.1:
393 ; RV64I-NEXT:    ret
394 ; RV64I-NEXT:  .LBB15_2:
395 ; RV64I-NEXT:    tail bar@plt
396   %5 = icmp uge i32 %0, %1
397   %6 = icmp eq i32 %2, %3
398   %7 = and i1 %5, %6
399   br i1 %7, label %9, label %8
401 8:                                                ; preds = %4
402   tail call void @bar()
403   br label %9
405 9:                                                ; preds = %8, %4
406   ret void
409 define void @and_ule_eq(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
410 ; RV32I-LABEL: and_ule_eq:
411 ; RV32I:       # %bb.0:
412 ; RV32I-NEXT:    sltu a0, a1, a0
413 ; RV32I-NEXT:    xor a2, a2, a3
414 ; RV32I-NEXT:    snez a1, a2
415 ; RV32I-NEXT:    or a0, a1, a0
416 ; RV32I-NEXT:    bnez a0, .LBB16_2
417 ; RV32I-NEXT:  # %bb.1:
418 ; RV32I-NEXT:    ret
419 ; RV32I-NEXT:  .LBB16_2:
420 ; RV32I-NEXT:    tail bar@plt
422 ; RV64I-LABEL: and_ule_eq:
423 ; RV64I:       # %bb.0:
424 ; RV64I-NEXT:    sltu a0, a1, a0
425 ; RV64I-NEXT:    xor a2, a2, a3
426 ; RV64I-NEXT:    snez a1, a2
427 ; RV64I-NEXT:    or a0, a1, a0
428 ; RV64I-NEXT:    bnez a0, .LBB16_2
429 ; RV64I-NEXT:  # %bb.1:
430 ; RV64I-NEXT:    ret
431 ; RV64I-NEXT:  .LBB16_2:
432 ; RV64I-NEXT:    tail bar@plt
433   %5 = icmp ule i32 %0, %1
434   %6 = icmp eq i32 %2, %3
435   %7 = and i1 %5, %6
436   br i1 %7, label %9, label %8
438 8:                                                ; preds = %4
439   tail call void @bar()
440   br label %9
442 9:                                                ; preds = %8, %4
443   ret void
446 define void @and_sge_ne(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
447 ; RV32I-LABEL: and_sge_ne:
448 ; RV32I:       # %bb.0:
449 ; RV32I-NEXT:    slt a0, a0, a1
450 ; RV32I-NEXT:    xor a2, a2, a3
451 ; RV32I-NEXT:    seqz a1, a2
452 ; RV32I-NEXT:    or a0, a1, a0
453 ; RV32I-NEXT:    bnez a0, .LBB17_2
454 ; RV32I-NEXT:  # %bb.1:
455 ; RV32I-NEXT:    ret
456 ; RV32I-NEXT:  .LBB17_2:
457 ; RV32I-NEXT:    tail bar@plt
459 ; RV64I-LABEL: and_sge_ne:
460 ; RV64I:       # %bb.0:
461 ; RV64I-NEXT:    slt a0, a0, a1
462 ; RV64I-NEXT:    xor a2, a2, a3
463 ; RV64I-NEXT:    seqz a1, a2
464 ; RV64I-NEXT:    or a0, a1, a0
465 ; RV64I-NEXT:    bnez a0, .LBB17_2
466 ; RV64I-NEXT:  # %bb.1:
467 ; RV64I-NEXT:    ret
468 ; RV64I-NEXT:  .LBB17_2:
469 ; RV64I-NEXT:    tail bar@plt
470   %5 = icmp sge i32 %0, %1
471   %6 = icmp ne i32 %2, %3
472   %7 = and i1 %5, %6
473   br i1 %7, label %9, label %8
475 8:                                                ; preds = %4
476   tail call void @bar()
477   br label %9
479 9:                                                ; preds = %8, %4
480   ret void
483 define void @and_sle_ne(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
484 ; RV32I-LABEL: and_sle_ne:
485 ; RV32I:       # %bb.0:
486 ; RV32I-NEXT:    slt a0, a1, a0
487 ; RV32I-NEXT:    xor a2, a2, a3
488 ; RV32I-NEXT:    seqz a1, a2
489 ; RV32I-NEXT:    or a0, a1, a0
490 ; RV32I-NEXT:    bnez a0, .LBB18_2
491 ; RV32I-NEXT:  # %bb.1:
492 ; RV32I-NEXT:    ret
493 ; RV32I-NEXT:  .LBB18_2:
494 ; RV32I-NEXT:    tail bar@plt
496 ; RV64I-LABEL: and_sle_ne:
497 ; RV64I:       # %bb.0:
498 ; RV64I-NEXT:    slt a0, a1, a0
499 ; RV64I-NEXT:    xor a2, a2, a3
500 ; RV64I-NEXT:    seqz a1, a2
501 ; RV64I-NEXT:    or a0, a1, a0
502 ; RV64I-NEXT:    bnez a0, .LBB18_2
503 ; RV64I-NEXT:  # %bb.1:
504 ; RV64I-NEXT:    ret
505 ; RV64I-NEXT:  .LBB18_2:
506 ; RV64I-NEXT:    tail bar@plt
507   %5 = icmp sle i32 %0, %1
508   %6 = icmp ne i32 %2, %3
509   %7 = and i1 %5, %6
510   br i1 %7, label %9, label %8
512 8:                                                ; preds = %4
513   tail call void @bar()
514   br label %9
516 9:                                                ; preds = %8, %4
517   ret void
520 define void @and_uge_ne(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
521 ; RV32I-LABEL: and_uge_ne:
522 ; RV32I:       # %bb.0:
523 ; RV32I-NEXT:    sltu a0, a0, a1
524 ; RV32I-NEXT:    xor a2, a2, a3
525 ; RV32I-NEXT:    seqz a1, a2
526 ; RV32I-NEXT:    or a0, a1, a0
527 ; RV32I-NEXT:    bnez a0, .LBB19_2
528 ; RV32I-NEXT:  # %bb.1:
529 ; RV32I-NEXT:    ret
530 ; RV32I-NEXT:  .LBB19_2:
531 ; RV32I-NEXT:    tail bar@plt
533 ; RV64I-LABEL: and_uge_ne:
534 ; RV64I:       # %bb.0:
535 ; RV64I-NEXT:    sltu a0, a0, a1
536 ; RV64I-NEXT:    xor a2, a2, a3
537 ; RV64I-NEXT:    seqz a1, a2
538 ; RV64I-NEXT:    or a0, a1, a0
539 ; RV64I-NEXT:    bnez a0, .LBB19_2
540 ; RV64I-NEXT:  # %bb.1:
541 ; RV64I-NEXT:    ret
542 ; RV64I-NEXT:  .LBB19_2:
543 ; RV64I-NEXT:    tail bar@plt
544   %5 = icmp uge i32 %0, %1
545   %6 = icmp ne i32 %2, %3
546   %7 = and i1 %5, %6
547   br i1 %7, label %9, label %8
549 8:                                                ; preds = %4
550   tail call void @bar()
551   br label %9
553 9:                                                ; preds = %8, %4
554   ret void
557 define void @and_ule_ne(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
558 ; RV32I-LABEL: and_ule_ne:
559 ; RV32I:       # %bb.0:
560 ; RV32I-NEXT:    sltu a0, a1, a0
561 ; RV32I-NEXT:    xor a2, a2, a3
562 ; RV32I-NEXT:    seqz a1, a2
563 ; RV32I-NEXT:    or a0, a1, a0
564 ; RV32I-NEXT:    bnez a0, .LBB20_2
565 ; RV32I-NEXT:  # %bb.1:
566 ; RV32I-NEXT:    ret
567 ; RV32I-NEXT:  .LBB20_2:
568 ; RV32I-NEXT:    tail bar@plt
570 ; RV64I-LABEL: and_ule_ne:
571 ; RV64I:       # %bb.0:
572 ; RV64I-NEXT:    sltu a0, a1, a0
573 ; RV64I-NEXT:    xor a2, a2, a3
574 ; RV64I-NEXT:    seqz a1, a2
575 ; RV64I-NEXT:    or a0, a1, a0
576 ; RV64I-NEXT:    bnez a0, .LBB20_2
577 ; RV64I-NEXT:  # %bb.1:
578 ; RV64I-NEXT:    ret
579 ; RV64I-NEXT:  .LBB20_2:
580 ; RV64I-NEXT:    tail bar@plt
581   %5 = icmp ule i32 %0, %1
582   %6 = icmp ne i32 %2, %3
583   %7 = and i1 %5, %6
584   br i1 %7, label %9, label %8
586 8:                                                ; preds = %4
587   tail call void @bar()
588   br label %9
590 9:                                                ; preds = %8, %4
591   ret void
594 define void @or_sge_eq(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
595 ; RV32I-LABEL: or_sge_eq:
596 ; RV32I:       # %bb.0:
597 ; RV32I-NEXT:    slt a0, a0, a1
598 ; RV32I-NEXT:    xor a2, a2, a3
599 ; RV32I-NEXT:    snez a1, a2
600 ; RV32I-NEXT:    and a0, a1, a0
601 ; RV32I-NEXT:    bnez a0, .LBB21_2
602 ; RV32I-NEXT:  # %bb.1:
603 ; RV32I-NEXT:    ret
604 ; RV32I-NEXT:  .LBB21_2:
605 ; RV32I-NEXT:    tail bar@plt
607 ; RV64I-LABEL: or_sge_eq:
608 ; RV64I:       # %bb.0:
609 ; RV64I-NEXT:    slt a0, a0, a1
610 ; RV64I-NEXT:    xor a2, a2, a3
611 ; RV64I-NEXT:    snez a1, a2
612 ; RV64I-NEXT:    and a0, a1, a0
613 ; RV64I-NEXT:    bnez a0, .LBB21_2
614 ; RV64I-NEXT:  # %bb.1:
615 ; RV64I-NEXT:    ret
616 ; RV64I-NEXT:  .LBB21_2:
617 ; RV64I-NEXT:    tail bar@plt
618   %5 = icmp sge i32 %0, %1
619   %6 = icmp eq i32 %2, %3
620   %7 = or i1 %5, %6
621   br i1 %7, label %9, label %8
623 8:                                                ; preds = %4
624   tail call void @bar()
625   br label %9
627 9:                                                ; preds = %8, %4
628   ret void
631 define void @or_sle_eq(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
632 ; RV32I-LABEL: or_sle_eq:
633 ; RV32I:       # %bb.0:
634 ; RV32I-NEXT:    slt a0, a1, a0
635 ; RV32I-NEXT:    xor a2, a2, a3
636 ; RV32I-NEXT:    snez a1, a2
637 ; RV32I-NEXT:    and a0, a1, a0
638 ; RV32I-NEXT:    bnez a0, .LBB22_2
639 ; RV32I-NEXT:  # %bb.1:
640 ; RV32I-NEXT:    ret
641 ; RV32I-NEXT:  .LBB22_2:
642 ; RV32I-NEXT:    tail bar@plt
644 ; RV64I-LABEL: or_sle_eq:
645 ; RV64I:       # %bb.0:
646 ; RV64I-NEXT:    slt a0, a1, a0
647 ; RV64I-NEXT:    xor a2, a2, a3
648 ; RV64I-NEXT:    snez a1, a2
649 ; RV64I-NEXT:    and a0, a1, a0
650 ; RV64I-NEXT:    bnez a0, .LBB22_2
651 ; RV64I-NEXT:  # %bb.1:
652 ; RV64I-NEXT:    ret
653 ; RV64I-NEXT:  .LBB22_2:
654 ; RV64I-NEXT:    tail bar@plt
655   %5 = icmp sle i32 %0, %1
656   %6 = icmp eq i32 %2, %3
657   %7 = or i1 %5, %6
658   br i1 %7, label %9, label %8
660 8:                                                ; preds = %4
661   tail call void @bar()
662   br label %9
664 9:                                                ; preds = %8, %4
665   ret void
668 define void @or_uge_eq(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
669 ; RV32I-LABEL: or_uge_eq:
670 ; RV32I:       # %bb.0:
671 ; RV32I-NEXT:    sltu a0, a0, a1
672 ; RV32I-NEXT:    xor a2, a2, a3
673 ; RV32I-NEXT:    snez a1, a2
674 ; RV32I-NEXT:    and a0, a1, a0
675 ; RV32I-NEXT:    bnez a0, .LBB23_2
676 ; RV32I-NEXT:  # %bb.1:
677 ; RV32I-NEXT:    ret
678 ; RV32I-NEXT:  .LBB23_2:
679 ; RV32I-NEXT:    tail bar@plt
681 ; RV64I-LABEL: or_uge_eq:
682 ; RV64I:       # %bb.0:
683 ; RV64I-NEXT:    sltu a0, a0, a1
684 ; RV64I-NEXT:    xor a2, a2, a3
685 ; RV64I-NEXT:    snez a1, a2
686 ; RV64I-NEXT:    and a0, a1, a0
687 ; RV64I-NEXT:    bnez a0, .LBB23_2
688 ; RV64I-NEXT:  # %bb.1:
689 ; RV64I-NEXT:    ret
690 ; RV64I-NEXT:  .LBB23_2:
691 ; RV64I-NEXT:    tail bar@plt
692   %5 = icmp uge i32 %0, %1
693   %6 = icmp eq i32 %2, %3
694   %7 = or i1 %5, %6
695   br i1 %7, label %9, label %8
697 8:                                                ; preds = %4
698   tail call void @bar()
699   br label %9
701 9:                                                ; preds = %8, %4
702   ret void
705 define void @or_ule_eq(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
706 ; RV32I-LABEL: or_ule_eq:
707 ; RV32I:       # %bb.0:
708 ; RV32I-NEXT:    sltu a0, a1, a0
709 ; RV32I-NEXT:    xor a2, a2, a3
710 ; RV32I-NEXT:    snez a1, a2
711 ; RV32I-NEXT:    and a0, a1, a0
712 ; RV32I-NEXT:    bnez a0, .LBB24_2
713 ; RV32I-NEXT:  # %bb.1:
714 ; RV32I-NEXT:    ret
715 ; RV32I-NEXT:  .LBB24_2:
716 ; RV32I-NEXT:    tail bar@plt
718 ; RV64I-LABEL: or_ule_eq:
719 ; RV64I:       # %bb.0:
720 ; RV64I-NEXT:    sltu a0, a1, a0
721 ; RV64I-NEXT:    xor a2, a2, a3
722 ; RV64I-NEXT:    snez a1, a2
723 ; RV64I-NEXT:    and a0, a1, a0
724 ; RV64I-NEXT:    bnez a0, .LBB24_2
725 ; RV64I-NEXT:  # %bb.1:
726 ; RV64I-NEXT:    ret
727 ; RV64I-NEXT:  .LBB24_2:
728 ; RV64I-NEXT:    tail bar@plt
729   %5 = icmp ule i32 %0, %1
730   %6 = icmp eq i32 %2, %3
731   %7 = or i1 %5, %6
732   br i1 %7, label %9, label %8
734 8:                                                ; preds = %4
735   tail call void @bar()
736   br label %9
738 9:                                                ; preds = %8, %4
739   ret void
742 define void @or_sge_ne(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
743 ; RV32I-LABEL: or_sge_ne:
744 ; RV32I:       # %bb.0:
745 ; RV32I-NEXT:    slt a0, a0, a1
746 ; RV32I-NEXT:    xor a2, a2, a3
747 ; RV32I-NEXT:    seqz a1, a2
748 ; RV32I-NEXT:    and a0, a1, a0
749 ; RV32I-NEXT:    bnez a0, .LBB25_2
750 ; RV32I-NEXT:  # %bb.1:
751 ; RV32I-NEXT:    ret
752 ; RV32I-NEXT:  .LBB25_2:
753 ; RV32I-NEXT:    tail bar@plt
755 ; RV64I-LABEL: or_sge_ne:
756 ; RV64I:       # %bb.0:
757 ; RV64I-NEXT:    slt a0, a0, a1
758 ; RV64I-NEXT:    xor a2, a2, a3
759 ; RV64I-NEXT:    seqz a1, a2
760 ; RV64I-NEXT:    and a0, a1, a0
761 ; RV64I-NEXT:    bnez a0, .LBB25_2
762 ; RV64I-NEXT:  # %bb.1:
763 ; RV64I-NEXT:    ret
764 ; RV64I-NEXT:  .LBB25_2:
765 ; RV64I-NEXT:    tail bar@plt
766   %5 = icmp sge i32 %0, %1
767   %6 = icmp ne i32 %2, %3
768   %7 = or i1 %5, %6
769   br i1 %7, label %9, label %8
771 8:                                                ; preds = %4
772   tail call void @bar()
773   br label %9
775 9:                                                ; preds = %8, %4
776   ret void
779 define void @or_sle_ne(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
780 ; RV32I-LABEL: or_sle_ne:
781 ; RV32I:       # %bb.0:
782 ; RV32I-NEXT:    slt a0, a1, a0
783 ; RV32I-NEXT:    xor a2, a2, a3
784 ; RV32I-NEXT:    seqz a1, a2
785 ; RV32I-NEXT:    and a0, a1, a0
786 ; RV32I-NEXT:    bnez a0, .LBB26_2
787 ; RV32I-NEXT:  # %bb.1:
788 ; RV32I-NEXT:    ret
789 ; RV32I-NEXT:  .LBB26_2:
790 ; RV32I-NEXT:    tail bar@plt
792 ; RV64I-LABEL: or_sle_ne:
793 ; RV64I:       # %bb.0:
794 ; RV64I-NEXT:    slt a0, a1, a0
795 ; RV64I-NEXT:    xor a2, a2, a3
796 ; RV64I-NEXT:    seqz a1, a2
797 ; RV64I-NEXT:    and a0, a1, a0
798 ; RV64I-NEXT:    bnez a0, .LBB26_2
799 ; RV64I-NEXT:  # %bb.1:
800 ; RV64I-NEXT:    ret
801 ; RV64I-NEXT:  .LBB26_2:
802 ; RV64I-NEXT:    tail bar@plt
803   %5 = icmp sle i32 %0, %1
804   %6 = icmp ne i32 %2, %3
805   %7 = or i1 %5, %6
806   br i1 %7, label %9, label %8
808 8:                                                ; preds = %4
809   tail call void @bar()
810   br label %9
812 9:                                                ; preds = %8, %4
813   ret void
816 define void @or_uge_ne(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
817 ; RV32I-LABEL: or_uge_ne:
818 ; RV32I:       # %bb.0:
819 ; RV32I-NEXT:    sltu a0, a0, a1
820 ; RV32I-NEXT:    xor a2, a2, a3
821 ; RV32I-NEXT:    seqz a1, a2
822 ; RV32I-NEXT:    and a0, a1, a0
823 ; RV32I-NEXT:    bnez a0, .LBB27_2
824 ; RV32I-NEXT:  # %bb.1:
825 ; RV32I-NEXT:    ret
826 ; RV32I-NEXT:  .LBB27_2:
827 ; RV32I-NEXT:    tail bar@plt
829 ; RV64I-LABEL: or_uge_ne:
830 ; RV64I:       # %bb.0:
831 ; RV64I-NEXT:    sltu a0, a0, a1
832 ; RV64I-NEXT:    xor a2, a2, a3
833 ; RV64I-NEXT:    seqz a1, a2
834 ; RV64I-NEXT:    and a0, a1, a0
835 ; RV64I-NEXT:    bnez a0, .LBB27_2
836 ; RV64I-NEXT:  # %bb.1:
837 ; RV64I-NEXT:    ret
838 ; RV64I-NEXT:  .LBB27_2:
839 ; RV64I-NEXT:    tail bar@plt
840   %5 = icmp uge i32 %0, %1
841   %6 = icmp ne i32 %2, %3
842   %7 = or i1 %5, %6
843   br i1 %7, label %9, label %8
845 8:                                                ; preds = %4
846   tail call void @bar()
847   br label %9
849 9:                                                ; preds = %8, %4
850   ret void
853 define void @or_ule_ne(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
854 ; RV32I-LABEL: or_ule_ne:
855 ; RV32I:       # %bb.0:
856 ; RV32I-NEXT:    sltu a0, a1, a0
857 ; RV32I-NEXT:    xor a2, a2, a3
858 ; RV32I-NEXT:    seqz a1, a2
859 ; RV32I-NEXT:    and a0, a1, a0
860 ; RV32I-NEXT:    bnez a0, .LBB28_2
861 ; RV32I-NEXT:  # %bb.1:
862 ; RV32I-NEXT:    ret
863 ; RV32I-NEXT:  .LBB28_2:
864 ; RV32I-NEXT:    tail bar@plt
866 ; RV64I-LABEL: or_ule_ne:
867 ; RV64I:       # %bb.0:
868 ; RV64I-NEXT:    sltu a0, a1, a0
869 ; RV64I-NEXT:    xor a2, a2, a3
870 ; RV64I-NEXT:    seqz a1, a2
871 ; RV64I-NEXT:    and a0, a1, a0
872 ; RV64I-NEXT:    bnez a0, .LBB28_2
873 ; RV64I-NEXT:  # %bb.1:
874 ; RV64I-NEXT:    ret
875 ; RV64I-NEXT:  .LBB28_2:
876 ; RV64I-NEXT:    tail bar@plt
877   %5 = icmp ule i32 %0, %1
878   %6 = icmp ne i32 %2, %3
879   %7 = or i1 %5, %6
880   br i1 %7, label %9, label %8
882 8:                                                ; preds = %4
883   tail call void @bar()
884   br label %9
886 9:                                                ; preds = %8, %4
887   ret void
890 define void @and_eq_sge(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
891 ; RV32I-LABEL: and_eq_sge:
892 ; RV32I:       # %bb.0:
893 ; RV32I-NEXT:    xor a0, a0, a1
894 ; RV32I-NEXT:    snez a0, a0
895 ; RV32I-NEXT:    slt a1, a2, a3
896 ; RV32I-NEXT:    or a0, a0, a1
897 ; RV32I-NEXT:    bnez a0, .LBB29_2
898 ; RV32I-NEXT:  # %bb.1:
899 ; RV32I-NEXT:    ret
900 ; RV32I-NEXT:  .LBB29_2:
901 ; RV32I-NEXT:    tail bar@plt
903 ; RV64I-LABEL: and_eq_sge:
904 ; RV64I:       # %bb.0:
905 ; RV64I-NEXT:    xor a0, a0, a1
906 ; RV64I-NEXT:    snez a0, a0
907 ; RV64I-NEXT:    slt a1, a2, a3
908 ; RV64I-NEXT:    or a0, a0, a1
909 ; RV64I-NEXT:    bnez a0, .LBB29_2
910 ; RV64I-NEXT:  # %bb.1:
911 ; RV64I-NEXT:    ret
912 ; RV64I-NEXT:  .LBB29_2:
913 ; RV64I-NEXT:    tail bar@plt
914   %5 = icmp eq  i32 %0, %1
915   %6 = icmp sge i32 %2, %3
916   %7 = and i1 %5, %6
917   br i1 %7, label %9, label %8
919 8:                                                ; preds = %4
920   tail call void @bar()
921   br label %9
923 9:                                                ; preds = %8, %4
924   ret void
927 define void @and_eq_sle(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
928 ; RV32I-LABEL: and_eq_sle:
929 ; RV32I:       # %bb.0:
930 ; RV32I-NEXT:    xor a0, a0, a1
931 ; RV32I-NEXT:    snez a0, a0
932 ; RV32I-NEXT:    slt a1, a3, a2
933 ; RV32I-NEXT:    or a0, a0, a1
934 ; RV32I-NEXT:    bnez a0, .LBB30_2
935 ; RV32I-NEXT:  # %bb.1:
936 ; RV32I-NEXT:    ret
937 ; RV32I-NEXT:  .LBB30_2:
938 ; RV32I-NEXT:    tail bar@plt
940 ; RV64I-LABEL: and_eq_sle:
941 ; RV64I:       # %bb.0:
942 ; RV64I-NEXT:    xor a0, a0, a1
943 ; RV64I-NEXT:    snez a0, a0
944 ; RV64I-NEXT:    slt a1, a3, a2
945 ; RV64I-NEXT:    or a0, a0, a1
946 ; RV64I-NEXT:    bnez a0, .LBB30_2
947 ; RV64I-NEXT:  # %bb.1:
948 ; RV64I-NEXT:    ret
949 ; RV64I-NEXT:  .LBB30_2:
950 ; RV64I-NEXT:    tail bar@plt
951   %5 = icmp eq  i32 %0, %1
952   %6 = icmp sle i32 %2, %3
953   %7 = and i1 %5, %6
954   br i1 %7, label %9, label %8
956 8:                                                ; preds = %4
957   tail call void @bar()
958   br label %9
960 9:                                                ; preds = %8, %4
961   ret void
964 define void @and_eq_uge(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
965 ; RV32I-LABEL: and_eq_uge:
966 ; RV32I:       # %bb.0:
967 ; RV32I-NEXT:    xor a0, a0, a1
968 ; RV32I-NEXT:    snez a0, a0
969 ; RV32I-NEXT:    sltu a1, a2, a3
970 ; RV32I-NEXT:    or a0, a0, a1
971 ; RV32I-NEXT:    bnez a0, .LBB31_2
972 ; RV32I-NEXT:  # %bb.1:
973 ; RV32I-NEXT:    ret
974 ; RV32I-NEXT:  .LBB31_2:
975 ; RV32I-NEXT:    tail bar@plt
977 ; RV64I-LABEL: and_eq_uge:
978 ; RV64I:       # %bb.0:
979 ; RV64I-NEXT:    xor a0, a0, a1
980 ; RV64I-NEXT:    snez a0, a0
981 ; RV64I-NEXT:    sltu a1, a2, a3
982 ; RV64I-NEXT:    or a0, a0, a1
983 ; RV64I-NEXT:    bnez a0, .LBB31_2
984 ; RV64I-NEXT:  # %bb.1:
985 ; RV64I-NEXT:    ret
986 ; RV64I-NEXT:  .LBB31_2:
987 ; RV64I-NEXT:    tail bar@plt
988   %5 = icmp eq  i32 %0, %1
989   %6 = icmp uge i32 %2, %3
990   %7 = and i1 %5, %6
991   br i1 %7, label %9, label %8
993 8:                                                ; preds = %4
994   tail call void @bar()
995   br label %9
997 9:                                                ; preds = %8, %4
998   ret void
1001 define void @and_eq_ule(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
1002 ; RV32I-LABEL: and_eq_ule:
1003 ; RV32I:       # %bb.0:
1004 ; RV32I-NEXT:    xor a0, a0, a1
1005 ; RV32I-NEXT:    snez a0, a0
1006 ; RV32I-NEXT:    sltu a1, a3, a2
1007 ; RV32I-NEXT:    or a0, a0, a1
1008 ; RV32I-NEXT:    bnez a0, .LBB32_2
1009 ; RV32I-NEXT:  # %bb.1:
1010 ; RV32I-NEXT:    ret
1011 ; RV32I-NEXT:  .LBB32_2:
1012 ; RV32I-NEXT:    tail bar@plt
1014 ; RV64I-LABEL: and_eq_ule:
1015 ; RV64I:       # %bb.0:
1016 ; RV64I-NEXT:    xor a0, a0, a1
1017 ; RV64I-NEXT:    snez a0, a0
1018 ; RV64I-NEXT:    sltu a1, a3, a2
1019 ; RV64I-NEXT:    or a0, a0, a1
1020 ; RV64I-NEXT:    bnez a0, .LBB32_2
1021 ; RV64I-NEXT:  # %bb.1:
1022 ; RV64I-NEXT:    ret
1023 ; RV64I-NEXT:  .LBB32_2:
1024 ; RV64I-NEXT:    tail bar@plt
1025   %5 = icmp eq  i32 %0, %1
1026   %6 = icmp ule i32 %2, %3
1027   %7 = and i1 %5, %6
1028   br i1 %7, label %9, label %8
1030 8:                                                ; preds = %4
1031   tail call void @bar()
1032   br label %9
1034 9:                                                ; preds = %8, %4
1035   ret void
1038 define void @and_ne_sge(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
1039 ; RV32I-LABEL: and_ne_sge:
1040 ; RV32I:       # %bb.0:
1041 ; RV32I-NEXT:    xor a0, a0, a1
1042 ; RV32I-NEXT:    seqz a0, a0
1043 ; RV32I-NEXT:    slt a1, a2, a3
1044 ; RV32I-NEXT:    or a0, a0, a1
1045 ; RV32I-NEXT:    bnez a0, .LBB33_2
1046 ; RV32I-NEXT:  # %bb.1:
1047 ; RV32I-NEXT:    ret
1048 ; RV32I-NEXT:  .LBB33_2:
1049 ; RV32I-NEXT:    tail bar@plt
1051 ; RV64I-LABEL: and_ne_sge:
1052 ; RV64I:       # %bb.0:
1053 ; RV64I-NEXT:    xor a0, a0, a1
1054 ; RV64I-NEXT:    seqz a0, a0
1055 ; RV64I-NEXT:    slt a1, a2, a3
1056 ; RV64I-NEXT:    or a0, a0, a1
1057 ; RV64I-NEXT:    bnez a0, .LBB33_2
1058 ; RV64I-NEXT:  # %bb.1:
1059 ; RV64I-NEXT:    ret
1060 ; RV64I-NEXT:  .LBB33_2:
1061 ; RV64I-NEXT:    tail bar@plt
1062   %5 = icmp ne  i32 %0, %1
1063   %6 = icmp sge i32 %2, %3
1064   %7 = and i1 %5, %6
1065   br i1 %7, label %9, label %8
1067 8:                                                ; preds = %4
1068   tail call void @bar()
1069   br label %9
1071 9:                                                ; preds = %8, %4
1072   ret void
1075 define void @and_ne_sle(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
1076 ; RV32I-LABEL: and_ne_sle:
1077 ; RV32I:       # %bb.0:
1078 ; RV32I-NEXT:    xor a0, a0, a1
1079 ; RV32I-NEXT:    seqz a0, a0
1080 ; RV32I-NEXT:    slt a1, a3, a2
1081 ; RV32I-NEXT:    or a0, a0, a1
1082 ; RV32I-NEXT:    bnez a0, .LBB34_2
1083 ; RV32I-NEXT:  # %bb.1:
1084 ; RV32I-NEXT:    ret
1085 ; RV32I-NEXT:  .LBB34_2:
1086 ; RV32I-NEXT:    tail bar@plt
1088 ; RV64I-LABEL: and_ne_sle:
1089 ; RV64I:       # %bb.0:
1090 ; RV64I-NEXT:    xor a0, a0, a1
1091 ; RV64I-NEXT:    seqz a0, a0
1092 ; RV64I-NEXT:    slt a1, a3, a2
1093 ; RV64I-NEXT:    or a0, a0, a1
1094 ; RV64I-NEXT:    bnez a0, .LBB34_2
1095 ; RV64I-NEXT:  # %bb.1:
1096 ; RV64I-NEXT:    ret
1097 ; RV64I-NEXT:  .LBB34_2:
1098 ; RV64I-NEXT:    tail bar@plt
1099   %5 = icmp ne  i32 %0, %1
1100   %6 = icmp sle i32 %2, %3
1101   %7 = and i1 %5, %6
1102   br i1 %7, label %9, label %8
1104 8:                                                ; preds = %4
1105   tail call void @bar()
1106   br label %9
1108 9:                                                ; preds = %8, %4
1109   ret void
1112 define void @and_ne_uge(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
1113 ; RV32I-LABEL: and_ne_uge:
1114 ; RV32I:       # %bb.0:
1115 ; RV32I-NEXT:    xor a0, a0, a1
1116 ; RV32I-NEXT:    seqz a0, a0
1117 ; RV32I-NEXT:    sltu a1, a2, a3
1118 ; RV32I-NEXT:    or a0, a0, a1
1119 ; RV32I-NEXT:    bnez a0, .LBB35_2
1120 ; RV32I-NEXT:  # %bb.1:
1121 ; RV32I-NEXT:    ret
1122 ; RV32I-NEXT:  .LBB35_2:
1123 ; RV32I-NEXT:    tail bar@plt
1125 ; RV64I-LABEL: and_ne_uge:
1126 ; RV64I:       # %bb.0:
1127 ; RV64I-NEXT:    xor a0, a0, a1
1128 ; RV64I-NEXT:    seqz a0, a0
1129 ; RV64I-NEXT:    sltu a1, a2, a3
1130 ; RV64I-NEXT:    or a0, a0, a1
1131 ; RV64I-NEXT:    bnez a0, .LBB35_2
1132 ; RV64I-NEXT:  # %bb.1:
1133 ; RV64I-NEXT:    ret
1134 ; RV64I-NEXT:  .LBB35_2:
1135 ; RV64I-NEXT:    tail bar@plt
1136   %5 = icmp ne  i32 %0, %1
1137   %6 = icmp uge i32 %2, %3
1138   %7 = and i1 %5, %6
1139   br i1 %7, label %9, label %8
1141 8:                                                ; preds = %4
1142   tail call void @bar()
1143   br label %9
1145 9:                                                ; preds = %8, %4
1146   ret void
1149 define void @and_ne_ule(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
1150 ; RV32I-LABEL: and_ne_ule:
1151 ; RV32I:       # %bb.0:
1152 ; RV32I-NEXT:    xor a0, a0, a1
1153 ; RV32I-NEXT:    seqz a0, a0
1154 ; RV32I-NEXT:    sltu a1, a3, a2
1155 ; RV32I-NEXT:    or a0, a0, a1
1156 ; RV32I-NEXT:    bnez a0, .LBB36_2
1157 ; RV32I-NEXT:  # %bb.1:
1158 ; RV32I-NEXT:    ret
1159 ; RV32I-NEXT:  .LBB36_2:
1160 ; RV32I-NEXT:    tail bar@plt
1162 ; RV64I-LABEL: and_ne_ule:
1163 ; RV64I:       # %bb.0:
1164 ; RV64I-NEXT:    xor a0, a0, a1
1165 ; RV64I-NEXT:    seqz a0, a0
1166 ; RV64I-NEXT:    sltu a1, a3, a2
1167 ; RV64I-NEXT:    or a0, a0, a1
1168 ; RV64I-NEXT:    bnez a0, .LBB36_2
1169 ; RV64I-NEXT:  # %bb.1:
1170 ; RV64I-NEXT:    ret
1171 ; RV64I-NEXT:  .LBB36_2:
1172 ; RV64I-NEXT:    tail bar@plt
1173   %5 = icmp ne  i32 %0, %1
1174   %6 = icmp ule i32 %2, %3
1175   %7 = and i1 %5, %6
1176   br i1 %7, label %9, label %8
1178 8:                                                ; preds = %4
1179   tail call void @bar()
1180   br label %9
1182 9:                                                ; preds = %8, %4
1183   ret void
1186 define void @and_sge_gt0(i32 signext %0, i32 signext %1, i32 signext %2) {
1187 ; RV32I-LABEL: and_sge_gt0:
1188 ; RV32I:       # %bb.0:
1189 ; RV32I-NEXT:    slt a0, a0, a1
1190 ; RV32I-NEXT:    slti a1, a2, 1
1191 ; RV32I-NEXT:    or a0, a1, a0
1192 ; RV32I-NEXT:    bnez a0, .LBB37_2
1193 ; RV32I-NEXT:  # %bb.1:
1194 ; RV32I-NEXT:    ret
1195 ; RV32I-NEXT:  .LBB37_2:
1196 ; RV32I-NEXT:    tail bar@plt
1198 ; RV64I-LABEL: and_sge_gt0:
1199 ; RV64I:       # %bb.0:
1200 ; RV64I-NEXT:    slt a0, a0, a1
1201 ; RV64I-NEXT:    slti a1, a2, 1
1202 ; RV64I-NEXT:    or a0, a1, a0
1203 ; RV64I-NEXT:    bnez a0, .LBB37_2
1204 ; RV64I-NEXT:  # %bb.1:
1205 ; RV64I-NEXT:    ret
1206 ; RV64I-NEXT:  .LBB37_2:
1207 ; RV64I-NEXT:    tail bar@plt
1208   %4 = icmp sge i32 %0, %1
1209   %5 = icmp sgt i32 %2, 0
1210   %6 = and i1 %4, %5
1211   br i1 %6, label %8, label %7
1213 7:                                                ; preds = %4
1214   tail call void @bar()
1215   br label %8
1217 8:                                                ; preds = %8, %4
1218   ret void
1221 define void @and_sle_lt1(i32 signext %0, i32 signext %1, i32 signext %2) {
1222 ; RV32I-LABEL: and_sle_lt1:
1223 ; RV32I:       # %bb.0:
1224 ; RV32I-NEXT:    slt a0, a1, a0
1225 ; RV32I-NEXT:    sgtz a1, a2
1226 ; RV32I-NEXT:    or a0, a1, a0
1227 ; RV32I-NEXT:    bnez a0, .LBB38_2
1228 ; RV32I-NEXT:  # %bb.1:
1229 ; RV32I-NEXT:    ret
1230 ; RV32I-NEXT:  .LBB38_2:
1231 ; RV32I-NEXT:    tail bar@plt
1233 ; RV64I-LABEL: and_sle_lt1:
1234 ; RV64I:       # %bb.0:
1235 ; RV64I-NEXT:    slt a0, a1, a0
1236 ; RV64I-NEXT:    sgtz a1, a2
1237 ; RV64I-NEXT:    or a0, a1, a0
1238 ; RV64I-NEXT:    bnez a0, .LBB38_2
1239 ; RV64I-NEXT:  # %bb.1:
1240 ; RV64I-NEXT:    ret
1241 ; RV64I-NEXT:  .LBB38_2:
1242 ; RV64I-NEXT:    tail bar@plt
1243   %4 = icmp sle i32 %0, %1
1244   %5 = icmp slt i32 %2, 1
1245   %6 = and i1 %4, %5
1246   br i1 %6, label %8, label %7
1248 7:                                                ; preds = %4
1249   tail call void @bar()
1250   br label %8
1252 8:                                                ; preds = %8, %4
1253   ret void
1256 define void @or_uge_gt0(i32 signext %0, i32 signext %1, i32 signext %2) {
1257 ; RV32I-LABEL: or_uge_gt0:
1258 ; RV32I:       # %bb.0:
1259 ; RV32I-NEXT:    sltu a0, a0, a1
1260 ; RV32I-NEXT:    slti a1, a2, 1
1261 ; RV32I-NEXT:    and a0, a1, a0
1262 ; RV32I-NEXT:    bnez a0, .LBB39_2
1263 ; RV32I-NEXT:  # %bb.1:
1264 ; RV32I-NEXT:    ret
1265 ; RV32I-NEXT:  .LBB39_2:
1266 ; RV32I-NEXT:    tail bar@plt
1268 ; RV64I-LABEL: or_uge_gt0:
1269 ; RV64I:       # %bb.0:
1270 ; RV64I-NEXT:    sltu a0, a0, a1
1271 ; RV64I-NEXT:    slti a1, a2, 1
1272 ; RV64I-NEXT:    and a0, a1, a0
1273 ; RV64I-NEXT:    bnez a0, .LBB39_2
1274 ; RV64I-NEXT:  # %bb.1:
1275 ; RV64I-NEXT:    ret
1276 ; RV64I-NEXT:  .LBB39_2:
1277 ; RV64I-NEXT:    tail bar@plt
1278   %4 = icmp uge i32 %0, %1
1279   %5 = icmp sgt i32 %2, 0
1280   %6 = or i1 %4, %5
1281   br i1 %6, label %8, label %7
1283 7:                                                ; preds = %4
1284   tail call void @bar()
1285   br label %8
1287 8:                                                ; preds = %8, %4
1288   ret void
1291 define void @or_ule_lt1(i32 signext %0, i32 signext %1, i32 signext %2) {
1292 ; RV32I-LABEL: or_ule_lt1:
1293 ; RV32I:       # %bb.0:
1294 ; RV32I-NEXT:    sltu a0, a1, a0
1295 ; RV32I-NEXT:    sgtz a1, a2
1296 ; RV32I-NEXT:    and a0, a1, a0
1297 ; RV32I-NEXT:    bnez a0, .LBB40_2
1298 ; RV32I-NEXT:  # %bb.1:
1299 ; RV32I-NEXT:    ret
1300 ; RV32I-NEXT:  .LBB40_2:
1301 ; RV32I-NEXT:    tail bar@plt
1303 ; RV64I-LABEL: or_ule_lt1:
1304 ; RV64I:       # %bb.0:
1305 ; RV64I-NEXT:    sltu a0, a1, a0
1306 ; RV64I-NEXT:    sgtz a1, a2
1307 ; RV64I-NEXT:    and a0, a1, a0
1308 ; RV64I-NEXT:    bnez a0, .LBB40_2
1309 ; RV64I-NEXT:  # %bb.1:
1310 ; RV64I-NEXT:    ret
1311 ; RV64I-NEXT:  .LBB40_2:
1312 ; RV64I-NEXT:    tail bar@plt
1313   %4 = icmp ule i32 %0, %1
1314   %5 = icmp slt i32 %2, 1
1315   %6 = or i1 %4, %5
1316   br i1 %6, label %8, label %7
1318 7:                                                ; preds = %4
1319   tail call void @bar()
1320   br label %8
1322 8:                                                ; preds = %8, %4
1323   ret void