Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / PowerPC / p10-setbc-rr.ll
blobd4133a3a89370326af8607ae952b388a4fbdab20
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \
3 ; RUN:     -ppc-asm-full-reg-names -mcpu=pwr10 < %s | FileCheck %s \
4 ; RUN:     --check-prefixes=CHECK,CHECK-LE
5 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O2 \
6 ; RUN:     -ppc-asm-full-reg-names -mcpu=pwr10 < %s | FileCheck %s \
7 ; RUN:     --check-prefixes=CHECK,CHECK-BE
9 ; This file does not contain many test cases involving comparisons and logical
10 ; comparisons (cmplwi, cmpldi). This is because alternative code is generated
11 ; when there is a compare (logical or not), followed by a sign or zero extend.
12 ; This codegen will be re-evaluated at a later time on whether or not it should
13 ; be emitted on P10.
15 @globalVal = common dso_local local_unnamed_addr global i8 0, align 1
16 @globalVal2 = common dso_local local_unnamed_addr global i32 0, align 4
17 @globalVal3 = common dso_local local_unnamed_addr global i64 0, align 8
18 @globalVal4 = common dso_local local_unnamed_addr global i16 0, align 2
20 define dso_local signext i32 @setbc1(i32 signext %a, i32 signext %b) {
21 ; CHECK-LABEL: setbc1:
22 ; CHECK:       # %bb.0: # %entry
23 ; CHECK-NEXT:    cmpw r3, r4
24 ; CHECK-NEXT:    setbc r3, lt
25 ; CHECK-NEXT:    blr
26 entry:
27   %cmp = icmp slt i32 %a, %b
28   %conv = zext i1 %cmp to i32
29   ret i32 %conv
32 define dso_local signext i32 @setbc2(i32 signext %a, i32 signext %b) {
33 ; CHECK-LABEL: setbc2:
34 ; CHECK:       # %bb.0: # %entry
35 ; CHECK-NEXT:    cmpw r3, r4
36 ; CHECK-NEXT:    setbc r3, eq
37 ; CHECK-NEXT:    blr
38 entry:
39   %cmp = icmp eq i32 %a, %b
40   %conv = zext i1 %cmp to i32
41   ret i32 %conv
44 define dso_local signext i32 @setbc3(i32 signext %a, i32 signext %b) {
45 ; CHECK-LABEL: setbc3:
46 ; CHECK:       # %bb.0: # %entry
47 ; CHECK-NEXT:    cmpw r3, r4
48 ; CHECK-NEXT:    setbc r3, gt
49 ; CHECK-NEXT:    blr
50 entry:
51   %cmp = icmp sgt i32 %a, %b
52   %conv = zext i1 %cmp to i32
53   ret i32 %conv
56 define dso_local signext i32 @setbc4(i8 signext %a, i8 signext %b) {
57 ; CHECK-LABEL: setbc4:
58 ; CHECK:       # %bb.0: # %entry
59 ; CHECK-NEXT:    cmpw r3, r4
60 ; CHECK-NEXT:    setbc r3, eq
61 ; CHECK-NEXT:    blr
62 entry:
63   %cmp = icmp eq i8 %a, %b
64   %conv2 = zext i1 %cmp to i32
65   ret i32 %conv2
68 define dso_local void @setbc5(i8 signext %a, i8 signext %b) {
69 ; CHECK-LE-LABEL: setbc5:
70 ; CHECK-LE:       # %bb.0: # %entry
71 ; CHECK-LE-NEXT:    cmpw r3, r4
72 ; CHECK-LE-NEXT:    setbc r3, eq
73 ; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
74 ; CHECK-LE-NEXT:    blr
76 ; CHECK-BE-LABEL: setbc5:
77 ; CHECK-BE:       # %bb.0: # %entry
78 ; CHECK-BE-NEXT:    cmpw r3, r4
79 ; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
80 ; CHECK-BE-NEXT:    setbc r3, eq
81 ; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
82 ; CHECK-BE-NEXT:    blr
83 entry:
84   %cmp = icmp eq i8 %a, %b
85   %conv3 = zext i1 %cmp to i8
86   store i8 %conv3, ptr @globalVal, align 1
87   ret void
90 define dso_local void @setbc6(i32 signext %a, i32 signext %b) {
91 ; CHECK-LE-LABEL: setbc6:
92 ; CHECK-LE:       # %bb.0: # %entry
93 ; CHECK-LE-NEXT:    cmpw r3, r4
94 ; CHECK-LE-NEXT:    setbc r3, eq
95 ; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
96 ; CHECK-LE-NEXT:    blr
98 ; CHECK-BE-LABEL: setbc6:
99 ; CHECK-BE:       # %bb.0: # %entry
100 ; CHECK-BE-NEXT:    cmpw r3, r4
101 ; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
102 ; CHECK-BE-NEXT:    setbc r3, eq
103 ; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
104 ; CHECK-BE-NEXT:    blr
105 entry:
106   %cmp = icmp eq i32 %a, %b
107   %conv = zext i1 %cmp to i32
108   store i32 %conv, ptr @globalVal2, align 4
109   ret void
112 define dso_local signext i32 @setbc7(i64 %a, i64 %b) {
113 ; CHECK-LABEL: setbc7:
114 ; CHECK:       # %bb.0: # %entry
115 ; CHECK-NEXT:    cmpd r3, r4
116 ; CHECK-NEXT:    setbc r3, eq
117 ; CHECK-NEXT:    blr
118 entry:
119   %cmp = icmp eq i64 %a, %b
120   %conv = zext i1 %cmp to i32
121   ret i32 %conv
124 define signext i64 @setbc8(i64 %a, i64 %b) {
125 ; CHECK-LABEL: setbc8:
126 ; CHECK:       # %bb.0: # %entry
127 ; CHECK-NEXT:    cmpd r3, r4
128 ; CHECK-NEXT:    setbc r3, eq
129 ; CHECK-NEXT:    blr
130 entry:
131   %cmp = icmp eq i64 %a, %b
132   %conv = zext i1 %cmp to i64
133   ret i64 %conv
137 define dso_local void @setbc9(i64 %a, i64 %b) {
138 ; CHECK-LE-LABEL: setbc9:
139 ; CHECK-LE:       # %bb.0: # %entry
140 ; CHECK-LE-NEXT:    cmpd r3, r4
141 ; CHECK-LE-NEXT:    setbc r3, eq
142 ; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
143 ; CHECK-LE-NEXT:    blr
145 ; CHECK-BE-LABEL: setbc9:
146 ; CHECK-BE:       # %bb.0: # %entry
147 ; CHECK-BE-NEXT:    cmpd r3, r4
148 ; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
149 ; CHECK-BE-NEXT:    setbc r3, eq
150 ; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
151 ; CHECK-BE-NEXT:    blr
152 entry:
153   %cmp = icmp eq i64 %a, %b
154   %conv1 = zext i1 %cmp to i64
155   store i64 %conv1, ptr @globalVal3, align 8
156   ret void
160 define dso_local signext i32 @setbc10(i16 signext %a, i16 signext %b) {
161 ; CHECK-LABEL: setbc10:
162 ; CHECK:       # %bb.0: # %entry
163 ; CHECK-NEXT:    cmpw r3, r4
164 ; CHECK-NEXT:    setbc r3, eq
165 ; CHECK-NEXT:    blr
166 entry:
167   %cmp = icmp eq i16 %a, %b
168   %conv2 = zext i1 %cmp to i32
169   ret i32 %conv2
173 define dso_local void @setbc11(i16 signext %a, i16 signext %b) {
174 ; CHECK-LE-LABEL: setbc11:
175 ; CHECK-LE:       # %bb.0: # %entry
176 ; CHECK-LE-NEXT:    cmpw r3, r4
177 ; CHECK-LE-NEXT:    setbc r3, eq
178 ; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
179 ; CHECK-LE-NEXT:    blr
181 ; CHECK-BE-LABEL: setbc11:
182 ; CHECK-BE:       # %bb.0: # %entry
183 ; CHECK-BE-NEXT:    cmpw r3, r4
184 ; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
185 ; CHECK-BE-NEXT:    setbc r3, eq
186 ; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
187 ; CHECK-BE-NEXT:    blr
188 entry:
189   %cmp = icmp eq i16 %a, %b
190   %conv3 = zext i1 %cmp to i16
191   store i16 %conv3, ptr @globalVal4, align 2
192   ret void
196 define dso_local signext i32 @setbc12(i8 zeroext %a, i8 zeroext %b) {
197 ; CHECK-LABEL: setbc12:
198 ; CHECK:       # %bb.0: # %entry
199 ; CHECK-NEXT:    cmpw r3, r4
200 ; CHECK-NEXT:    setbc r3, eq
201 ; CHECK-NEXT:    blr
202 entry:
203   %cmp = icmp eq i8 %a, %b
204   %conv2 = zext i1 %cmp to i32
205   ret i32 %conv2
209 define dso_local void @setbc13(i8 zeroext %a, i8 zeroext %b) {
210 ; CHECK-LE-LABEL: setbc13:
211 ; CHECK-LE:       # %bb.0: # %entry
212 ; CHECK-LE-NEXT:    cmpw r3, r4
213 ; CHECK-LE-NEXT:    setbc r3, eq
214 ; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
215 ; CHECK-LE-NEXT:    blr
217 ; CHECK-BE-LABEL: setbc13:
218 ; CHECK-BE:       # %bb.0: # %entry
219 ; CHECK-BE-NEXT:    cmpw r3, r4
220 ; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
221 ; CHECK-BE-NEXT:    setbc r3, eq
222 ; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
223 ; CHECK-BE-NEXT:    blr
224 entry:
225   %cmp = icmp eq i8 %a, %b
226   %conv3 = zext i1 %cmp to i8
227   store i8 %conv3, ptr @globalVal, align 1
228   ret void
232 define dso_local signext i32 @setbc14(i32 zeroext %a, i32 zeroext %b) {
233 ; CHECK-LABEL: setbc14:
234 ; CHECK:       # %bb.0: # %entry
235 ; CHECK-NEXT:    cmpw r3, r4
236 ; CHECK-NEXT:    setbc r3, eq
237 ; CHECK-NEXT:    blr
238 entry:
239   %cmp = icmp eq i32 %a, %b
240   %conv = zext i1 %cmp to i32
241   ret i32 %conv
245 define dso_local void @setbc15(i32 zeroext %a, i32 zeroext %b) {
246 ; CHECK-LE-LABEL: setbc15:
247 ; CHECK-LE:       # %bb.0: # %entry
248 ; CHECK-LE-NEXT:    cmpw r3, r4
249 ; CHECK-LE-NEXT:    setbc r3, eq
250 ; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
251 ; CHECK-LE-NEXT:    blr
253 ; CHECK-BE-LABEL: setbc15:
254 ; CHECK-BE:       # %bb.0: # %entry
255 ; CHECK-BE-NEXT:    cmpw r3, r4
256 ; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
257 ; CHECK-BE-NEXT:    setbc r3, eq
258 ; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
259 ; CHECK-BE-NEXT:    blr
260 entry:
261   %cmp = icmp eq i32 %a, %b
262   %conv = zext i1 %cmp to i32
263   store i32 %conv, ptr @globalVal2, align 4
264   ret void
268 define dso_local signext i32 @setbc16(i16 zeroext %a, i16 zeroext %b) {
269 ; CHECK-LABEL: setbc16:
270 ; CHECK:       # %bb.0: # %entry
271 ; CHECK-NEXT:    cmpw r3, r4
272 ; CHECK-NEXT:    setbc r3, eq
273 ; CHECK-NEXT:    blr
274 entry:
275   %cmp = icmp eq i16 %a, %b
276   %conv2 = zext i1 %cmp to i32
277   ret i32 %conv2
281 define dso_local void @setbc17(i16 zeroext %a, i16 zeroext %b) {
282 ; CHECK-LE-LABEL: setbc17:
283 ; CHECK-LE:       # %bb.0: # %entry
284 ; CHECK-LE-NEXT:    cmpw r3, r4
285 ; CHECK-LE-NEXT:    setbc r3, eq
286 ; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
287 ; CHECK-LE-NEXT:    blr
289 ; CHECK-BE-LABEL: setbc17:
290 ; CHECK-BE:       # %bb.0: # %entry
291 ; CHECK-BE-NEXT:    cmpw r3, r4
292 ; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
293 ; CHECK-BE-NEXT:    setbc r3, eq
294 ; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
295 ; CHECK-BE-NEXT:    blr
296 entry:
297   %cmp = icmp eq i16 %a, %b
298   %conv3 = zext i1 %cmp to i16
299   store i16 %conv3, ptr @globalVal4, align 2
300   ret void
304 define dso_local signext i32 @setbc18(i8 signext %a, i8 signext %b) {
305 ; CHECK-LABEL: setbc18:
306 ; CHECK:       # %bb.0: # %entry
307 ; CHECK-NEXT:    cmpw r3, r4
308 ; CHECK-NEXT:    setbc r3, gt
309 ; CHECK-NEXT:    blr
310 entry:
311   %cmp = icmp sgt i8 %a, %b
312   %conv2 = zext i1 %cmp to i32
313   ret i32 %conv2
317 define dso_local void @setbc19(i8 signext %a, i8 signext %b) {
318 ; CHECK-LE-LABEL: setbc19:
319 ; CHECK-LE:       # %bb.0: # %entry
320 ; CHECK-LE-NEXT:    cmpw r3, r4
321 ; CHECK-LE-NEXT:    setbc r3, gt
322 ; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
323 ; CHECK-LE-NEXT:    blr
325 ; CHECK-BE-LABEL: setbc19:
326 ; CHECK-BE:       # %bb.0: # %entry
327 ; CHECK-BE-NEXT:    cmpw r3, r4
328 ; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
329 ; CHECK-BE-NEXT:    setbc r3, gt
330 ; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
331 ; CHECK-BE-NEXT:    blr
332 entry:
333   %cmp = icmp sgt i8 %a, %b
334   %conv3 = zext i1 %cmp to i8
335   store i8 %conv3, ptr @globalVal, align 1
336   ret void
340 define dso_local void @setbc20(i32 signext %a, i32 signext %b) {
341 ; CHECK-LE-LABEL: setbc20:
342 ; CHECK-LE:       # %bb.0: # %entry
343 ; CHECK-LE-NEXT:    cmpw r3, r4
344 ; CHECK-LE-NEXT:    setbc r3, gt
345 ; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
346 ; CHECK-LE-NEXT:    blr
348 ; CHECK-BE-LABEL: setbc20:
349 ; CHECK-BE:       # %bb.0: # %entry
350 ; CHECK-BE-NEXT:    cmpw r3, r4
351 ; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
352 ; CHECK-BE-NEXT:    setbc r3, gt
353 ; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
354 ; CHECK-BE-NEXT:    blr
355 entry:
356   %cmp = icmp sgt i32 %a, %b
357   %conv = zext i1 %cmp to i32
358   store i32 %conv, ptr @globalVal2, align 4
359   ret void
363 define dso_local signext i32 @setbc21(i64 %a, i64 %b) {
364 ; CHECK-LABEL: setbc21:
365 ; CHECK:       # %bb.0: # %entry
366 ; CHECK-NEXT:    cmpd r3, r4
367 ; CHECK-NEXT:    setbc r3, gt
368 ; CHECK-NEXT:    blr
369 entry:
370   %cmp = icmp sgt i64 %a, %b
371   %conv = zext i1 %cmp to i32
372   ret i32 %conv
376 define dso_local void @setbc22(i64 %a, i64 %b) {
377 ; CHECK-LE-LABEL: setbc22:
378 ; CHECK-LE:       # %bb.0: # %entry
379 ; CHECK-LE-NEXT:    cmpd r3, r4
380 ; CHECK-LE-NEXT:    setbc r3, gt
381 ; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
382 ; CHECK-LE-NEXT:    blr
384 ; CHECK-BE-LABEL: setbc22:
385 ; CHECK-BE:       # %bb.0: # %entry
386 ; CHECK-BE-NEXT:    cmpd r3, r4
387 ; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
388 ; CHECK-BE-NEXT:    setbc r3, gt
389 ; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
390 ; CHECK-BE-NEXT:    blr
391 entry:
392   %cmp = icmp sgt i64 %a, %b
393   %conv1 = zext i1 %cmp to i64
394   store i64 %conv1, ptr @globalVal3, align 8
395   ret void
399 define dso_local signext i32 @setbc23(i16 signext %a, i16 signext %b) {
400 ; CHECK-LABEL: setbc23:
401 ; CHECK:       # %bb.0: # %entry
402 ; CHECK-NEXT:    cmpw r3, r4
403 ; CHECK-NEXT:    setbc r3, gt
404 ; CHECK-NEXT:    blr
405 entry:
406   %cmp = icmp sgt i16 %a, %b
407   %conv2 = zext i1 %cmp to i32
408   ret i32 %conv2
412 define dso_local void @setbc24(i16 signext %a, i16 signext %b) {
413 ; CHECK-LE-LABEL: setbc24:
414 ; CHECK-LE:       # %bb.0: # %entry
415 ; CHECK-LE-NEXT:    cmpw r3, r4
416 ; CHECK-LE-NEXT:    setbc r3, gt
417 ; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
418 ; CHECK-LE-NEXT:    blr
420 ; CHECK-BE-LABEL: setbc24:
421 ; CHECK-BE:       # %bb.0: # %entry
422 ; CHECK-BE-NEXT:    cmpw r3, r4
423 ; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
424 ; CHECK-BE-NEXT:    setbc r3, gt
425 ; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
426 ; CHECK-BE-NEXT:    blr
427 entry:
428   %cmp = icmp sgt i16 %a, %b
429   %conv3 = zext i1 %cmp to i16
430   store i16 %conv3, ptr @globalVal4, align 2
431   ret void
435 define dso_local signext i32 @setbc25(i8 signext %a, i8 signext %b) {
436 ; CHECK-LABEL: setbc25:
437 ; CHECK:       # %bb.0: # %entry
438 ; CHECK-NEXT:    cmpw r3, r4
439 ; CHECK-NEXT:    setbc r3, lt
440 ; CHECK-NEXT:    blr
441 entry:
442   %cmp = icmp slt i8 %a, %b
443   %conv2 = zext i1 %cmp to i32
444   ret i32 %conv2
448 define dso_local void @setbc26(i8 signext %a, i8 signext %b) {
449 ; CHECK-LE-LABEL: setbc26:
450 ; CHECK-LE:       # %bb.0: # %entry
451 ; CHECK-LE-NEXT:    cmpw r3, r4
452 ; CHECK-LE-NEXT:    setbc r3, lt
453 ; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
454 ; CHECK-LE-NEXT:    blr
456 ; CHECK-BE-LABEL: setbc26:
457 ; CHECK-BE:       # %bb.0: # %entry
458 ; CHECK-BE-NEXT:    cmpw r3, r4
459 ; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
460 ; CHECK-BE-NEXT:    setbc r3, lt
461 ; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
462 ; CHECK-BE-NEXT:    blr
463 entry:
464   %cmp = icmp slt i8 %a, %b
465   %conv3 = zext i1 %cmp to i8
466   store i8 %conv3, ptr @globalVal, align 1
467   ret void
471 define dso_local void @setbc27(i32 signext %a, i32 signext %b) {
472 ; CHECK-LE-LABEL: setbc27:
473 ; CHECK-LE:       # %bb.0: # %entry
474 ; CHECK-LE-NEXT:    cmpw r3, r4
475 ; CHECK-LE-NEXT:    setbc r3, lt
476 ; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
477 ; CHECK-LE-NEXT:    blr
479 ; CHECK-BE-LABEL: setbc27:
480 ; CHECK-BE:       # %bb.0: # %entry
481 ; CHECK-BE-NEXT:    cmpw r3, r4
482 ; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
483 ; CHECK-BE-NEXT:    setbc r3, lt
484 ; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
485 ; CHECK-BE-NEXT:    blr
486 entry:
487   %cmp = icmp slt i32 %a, %b
488   %conv = zext i1 %cmp to i32
489   store i32 %conv, ptr @globalVal2, align 4
490   ret void
494 define dso_local signext i32 @setbc28(i64 %a, i64 %b) {
495 ; CHECK-LABEL: setbc28:
496 ; CHECK:       # %bb.0: # %entry
497 ; CHECK-NEXT:    cmpd r3, r4
498 ; CHECK-NEXT:    setbc r3, lt
499 ; CHECK-NEXT:    blr
500 entry:
501   %cmp = icmp slt i64 %a, %b
502   %conv = zext i1 %cmp to i32
503   ret i32 %conv
507 define signext i64 @setbc29(i64 %a, i64 %b) {
508 ; CHECK-LABEL: setbc29:
509 ; CHECK:       # %bb.0: # %entry
510 ; CHECK-NEXT:    cmpd r3, r4
511 ; CHECK-NEXT:    setbc r3, lt
512 ; CHECK-NEXT:    blr
513 entry:
514   %cmp = icmp slt i64 %a, %b
515   %conv = zext i1 %cmp to i64
516   ret i64 %conv
520 define dso_local void @setbc30(i64 %a, i64 %b) {
521 ; CHECK-LE-LABEL: setbc30:
522 ; CHECK-LE:       # %bb.0: # %entry
523 ; CHECK-LE-NEXT:    cmpd r3, r4
524 ; CHECK-LE-NEXT:    setbc r3, lt
525 ; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
526 ; CHECK-LE-NEXT:    blr
528 ; CHECK-BE-LABEL: setbc30:
529 ; CHECK-BE:       # %bb.0: # %entry
530 ; CHECK-BE-NEXT:    cmpd r3, r4
531 ; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
532 ; CHECK-BE-NEXT:    setbc r3, lt
533 ; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
534 ; CHECK-BE-NEXT:    blr
535 entry:
536   %cmp = icmp slt i64 %a, %b
537   %conv1 = zext i1 %cmp to i64
538   store i64 %conv1, ptr @globalVal3, align 8
539   ret void
543 define dso_local signext i32 @setbc31(i16 signext %a, i16 signext %b) {
544 ; CHECK-LABEL: setbc31:
545 ; CHECK:       # %bb.0: # %entry
546 ; CHECK-NEXT:    cmpw r3, r4
547 ; CHECK-NEXT:    setbc r3, lt
548 ; CHECK-NEXT:    blr
549 entry:
550   %cmp = icmp slt i16 %a, %b
551   %conv2 = zext i1 %cmp to i32
552   ret i32 %conv2
556 define dso_local void @setbc32(i16 signext %a, i16 signext %b) {
557 ; CHECK-LE-LABEL: setbc32:
558 ; CHECK-LE:       # %bb.0: # %entry
559 ; CHECK-LE-NEXT:    cmpw r3, r4
560 ; CHECK-LE-NEXT:    setbc r3, lt
561 ; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
562 ; CHECK-LE-NEXT:    blr
564 ; CHECK-BE-LABEL: setbc32:
565 ; CHECK-BE:       # %bb.0: # %entry
566 ; CHECK-BE-NEXT:    cmpw r3, r4
567 ; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
568 ; CHECK-BE-NEXT:    setbc r3, lt
569 ; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
570 ; CHECK-BE-NEXT:    blr
571 entry:
572   %cmp = icmp slt i16 %a, %b
573   %conv3 = zext i1 %cmp to i16
574   store i16 %conv3, ptr @globalVal4, align 2
575   ret void
579 define i64 @setbc33(i8 signext %a, i8 signext %b) {
580 ; CHECK-LABEL: setbc33:
581 ; CHECK:       # %bb.0: # %entry
582 ; CHECK-NEXT:    cmpw r3, r4
583 ; CHECK-NEXT:    setbc r3, eq
584 ; CHECK-NEXT:    blr
585 entry:
586   %cmp = icmp eq i8 %a, %b
587   %conv3 = zext i1 %cmp to i64
588   ret i64 %conv3
592 define dso_local void @setbc34(i8 signext %a, i8 signext %b) {
593 ; CHECK-LE-LABEL: setbc34:
594 ; CHECK-LE:       # %bb.0: # %entry
595 ; CHECK-LE-NEXT:    cmpw r3, r4
596 ; CHECK-LE-NEXT:    setbc r3, eq
597 ; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
598 ; CHECK-LE-NEXT:    blr
600 ; CHECK-BE-LABEL: setbc34:
601 ; CHECK-BE:       # %bb.0: # %entry
602 ; CHECK-BE-NEXT:    cmpw r3, r4
603 ; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
604 ; CHECK-BE-NEXT:    setbc r3, eq
605 ; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
606 ; CHECK-BE-NEXT:    blr
607 entry:
608   %cmp = icmp eq i8 %a, %b
609   %conv3 = zext i1 %cmp to i8
610   store i8 %conv3, ptr @globalVal, align 1
611   ret void
615 define i64 @setbc35(i32 signext %a, i32 signext %b) {
616 ; CHECK-LABEL: setbc35:
617 ; CHECK:       # %bb.0: # %entry
618 ; CHECK-NEXT:    cmpw r3, r4
619 ; CHECK-NEXT:    setbc r3, eq
620 ; CHECK-NEXT:    blr
621 entry:
622   %cmp = icmp eq i32 %a, %b
623   %conv1 = zext i1 %cmp to i64
624   ret i64 %conv1
628 define dso_local void @setbc36(i32 signext %a, i32 signext %b) {
629 ; CHECK-LE-LABEL: setbc36:
630 ; CHECK-LE:       # %bb.0: # %entry
631 ; CHECK-LE-NEXT:    cmpw r3, r4
632 ; CHECK-LE-NEXT:    setbc r3, eq
633 ; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
634 ; CHECK-LE-NEXT:    blr
636 ; CHECK-BE-LABEL: setbc36:
637 ; CHECK-BE:       # %bb.0: # %entry
638 ; CHECK-BE-NEXT:    cmpw r3, r4
639 ; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
640 ; CHECK-BE-NEXT:    setbc r3, eq
641 ; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
642 ; CHECK-BE-NEXT:    blr
643 entry:
644   %cmp = icmp eq i32 %a, %b
645   %conv = zext i1 %cmp to i32
646   store i32 %conv, ptr @globalVal2, align 4
647   ret void
651 define dso_local void @setbc37(i64 %a, i64 %b) {
652 ; CHECK-LE-LABEL: setbc37:
653 ; CHECK-LE:       # %bb.0: # %entry
654 ; CHECK-LE-NEXT:    cmpd r3, r4
655 ; CHECK-LE-NEXT:    setbc r3, eq
656 ; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
657 ; CHECK-LE-NEXT:    blr
659 ; CHECK-BE-LABEL: setbc37:
660 ; CHECK-BE:       # %bb.0: # %entry
661 ; CHECK-BE-NEXT:    cmpd r3, r4
662 ; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
663 ; CHECK-BE-NEXT:    setbc r3, eq
664 ; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
665 ; CHECK-BE-NEXT:    blr
666 entry:
667   %cmp = icmp eq i64 %a, %b
668   %conv1 = zext i1 %cmp to i64
669   store i64 %conv1, ptr @globalVal3, align 8
670   ret void
674 define i64 @setbc38(i16 signext %a, i16 signext %b) {
675 ; CHECK-LABEL: setbc38:
676 ; CHECK:       # %bb.0: # %entry
677 ; CHECK-NEXT:    cmpw r3, r4
678 ; CHECK-NEXT:    setbc r3, eq
679 ; CHECK-NEXT:    blr
680 entry:
681   %cmp = icmp eq i16 %a, %b
682   %conv3 = zext i1 %cmp to i64
683   ret i64 %conv3
687 define dso_local void @setbc39(i16 signext %a, i16 signext %b) {
688 ; CHECK-LE-LABEL: setbc39:
689 ; CHECK-LE:       # %bb.0: # %entry
690 ; CHECK-LE-NEXT:    cmpw r3, r4
691 ; CHECK-LE-NEXT:    setbc r3, eq
692 ; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
693 ; CHECK-LE-NEXT:    blr
695 ; CHECK-BE-LABEL: setbc39:
696 ; CHECK-BE:       # %bb.0: # %entry
697 ; CHECK-BE-NEXT:    cmpw r3, r4
698 ; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
699 ; CHECK-BE-NEXT:    setbc r3, eq
700 ; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
701 ; CHECK-BE-NEXT:    blr
702 entry:
703   %cmp = icmp eq i16 %a, %b
704   %conv3 = zext i1 %cmp to i16
705   store i16 %conv3, ptr @globalVal4, align 2
706   ret void
710 define i64 @setbc40(i8 zeroext %a, i8 zeroext %b) {
711 ; CHECK-LABEL: setbc40:
712 ; CHECK:       # %bb.0: # %entry
713 ; CHECK-NEXT:    cmpw r3, r4
714 ; CHECK-NEXT:    setbc r3, eq
715 ; CHECK-NEXT:    blr
716 entry:
717   %cmp = icmp eq i8 %a, %b
718   %conv3 = zext i1 %cmp to i64
719   ret i64 %conv3
723 define dso_local void @setbc41(i8 zeroext %a, i8 zeroext %b) {
724 ; CHECK-LE-LABEL: setbc41:
725 ; CHECK-LE:       # %bb.0: # %entry
726 ; CHECK-LE-NEXT:    cmpw r3, r4
727 ; CHECK-LE-NEXT:    setbc r3, eq
728 ; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
729 ; CHECK-LE-NEXT:    blr
731 ; CHECK-BE-LABEL: setbc41:
732 ; CHECK-BE:       # %bb.0: # %entry
733 ; CHECK-BE-NEXT:    cmpw r3, r4
734 ; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
735 ; CHECK-BE-NEXT:    setbc r3, eq
736 ; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
737 ; CHECK-BE-NEXT:    blr
738 entry:
739   %cmp = icmp eq i8 %a, %b
740   %conv3 = zext i1 %cmp to i8
741   store i8 %conv3, ptr @globalVal, align 1
742   ret void
746 define i64 @setbc42(i32 zeroext %a, i32 zeroext %b) {
747 ; CHECK-LABEL: setbc42:
748 ; CHECK:       # %bb.0: # %entry
749 ; CHECK-NEXT:    cmpw r3, r4
750 ; CHECK-NEXT:    setbc r3, eq
751 ; CHECK-NEXT:    blr
752 entry:
753   %cmp = icmp eq i32 %a, %b
754   %conv1 = zext i1 %cmp to i64
755   ret i64 %conv1
759 define dso_local void @setbc43(i32 zeroext %a, i32 zeroext %b) {
760 ; CHECK-LE-LABEL: setbc43:
761 ; CHECK-LE:       # %bb.0: # %entry
762 ; CHECK-LE-NEXT:    cmpw r3, r4
763 ; CHECK-LE-NEXT:    setbc r3, eq
764 ; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
765 ; CHECK-LE-NEXT:    blr
767 ; CHECK-BE-LABEL: setbc43:
768 ; CHECK-BE:       # %bb.0: # %entry
769 ; CHECK-BE-NEXT:    cmpw r3, r4
770 ; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
771 ; CHECK-BE-NEXT:    setbc r3, eq
772 ; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
773 ; CHECK-BE-NEXT:    blr
774 entry:
775   %cmp = icmp eq i32 %a, %b
776   %conv = zext i1 %cmp to i32
777   store i32 %conv, ptr @globalVal2, align 4
778   ret void
782 define i64 @setbc44(i64 %a, i64 %b) {
783 ; CHECK-LABEL: setbc44:
784 ; CHECK:       # %bb.0: # %entry
785 ; CHECK-NEXT:    cmpd r3, r4
786 ; CHECK-NEXT:    setbc r3, eq
787 ; CHECK-NEXT:    blr
788 entry:
789   %cmp = icmp eq i64 %a, %b
790   %conv1 = zext i1 %cmp to i64
791   ret i64 %conv1
795 define dso_local void @setbc45(i64 %a, i64 %b) {
796 ; CHECK-LE-LABEL: setbc45:
797 ; CHECK-LE:       # %bb.0: # %entry
798 ; CHECK-LE-NEXT:    cmpd r3, r4
799 ; CHECK-LE-NEXT:    setbc r3, eq
800 ; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
801 ; CHECK-LE-NEXT:    blr
803 ; CHECK-BE-LABEL: setbc45:
804 ; CHECK-BE:       # %bb.0: # %entry
805 ; CHECK-BE-NEXT:    cmpd r3, r4
806 ; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
807 ; CHECK-BE-NEXT:    setbc r3, eq
808 ; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
809 ; CHECK-BE-NEXT:    blr
810 entry:
811   %cmp = icmp eq i64 %a, %b
812   %conv1 = zext i1 %cmp to i64
813   store i64 %conv1, ptr @globalVal3, align 8
814   ret void
818 define i64 @setbc46(i16 zeroext %a, i16 zeroext %b) {
819 ; CHECK-LABEL: setbc46:
820 ; CHECK:       # %bb.0: # %entry
821 ; CHECK-NEXT:    cmpw r3, r4
822 ; CHECK-NEXT:    setbc r3, eq
823 ; CHECK-NEXT:    blr
824 entry:
825   %cmp = icmp eq i16 %a, %b
826   %conv3 = zext i1 %cmp to i64
827   ret i64 %conv3
831 define dso_local void @setbc47(i16 zeroext %a, i16 zeroext %b) {
832 ; CHECK-LE-LABEL: setbc47:
833 ; CHECK-LE:       # %bb.0: # %entry
834 ; CHECK-LE-NEXT:    cmpw r3, r4
835 ; CHECK-LE-NEXT:    setbc r3, eq
836 ; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
837 ; CHECK-LE-NEXT:    blr
839 ; CHECK-BE-LABEL: setbc47:
840 ; CHECK-BE:       # %bb.0: # %entry
841 ; CHECK-BE-NEXT:    cmpw r3, r4
842 ; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
843 ; CHECK-BE-NEXT:    setbc r3, eq
844 ; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
845 ; CHECK-BE-NEXT:    blr
846 entry:
847   %cmp = icmp eq i16 %a, %b
848   %conv3 = zext i1 %cmp to i16
849   store i16 %conv3, ptr @globalVal4, align 2
850   ret void
854 define i64 @setbc48(i64 %a, i64 %b) {
855 ; CHECK-LABEL: setbc48:
856 ; CHECK:       # %bb.0: # %entry
857 ; CHECK-NEXT:    cmpd r3, r4
858 ; CHECK-NEXT:    setbc r3, gt
859 ; CHECK-NEXT:    blr
860 entry:
861   %cmp = icmp sgt i64 %a, %b
862   %conv1 = zext i1 %cmp to i64
863   ret i64 %conv1
867 define dso_local void @setbc49(i64 %a, i64 %b) {
868 ; CHECK-LE-LABEL: setbc49:
869 ; CHECK-LE:       # %bb.0: # %entry
870 ; CHECK-LE-NEXT:    cmpd r3, r4
871 ; CHECK-LE-NEXT:    setbc r3, gt
872 ; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
873 ; CHECK-LE-NEXT:    blr
875 ; CHECK-BE-LABEL: setbc49:
876 ; CHECK-BE:       # %bb.0: # %entry
877 ; CHECK-BE-NEXT:    cmpd r3, r4
878 ; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
879 ; CHECK-BE-NEXT:    setbc r3, gt
880 ; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
881 ; CHECK-BE-NEXT:    blr
882 entry:
883   %cmp = icmp sgt i64 %a, %b
884   %conv1 = zext i1 %cmp to i64
885   store i64 %conv1, ptr @globalVal3, align 8
886   ret void
890 define i64 @setbc50(i64 %a, i64 %b) {
891 ; CHECK-LABEL: setbc50:
892 ; CHECK:       # %bb.0: # %entry
893 ; CHECK-NEXT:    cmpd r3, r4
894 ; CHECK-NEXT:    setbc r3, lt
895 ; CHECK-NEXT:    blr
896 entry:
897   %cmp = icmp slt i64 %a, %b
898   %conv1 = zext i1 %cmp to i64
899   ret i64 %conv1
903 define dso_local void @setnbc51(i64 %a, i64 %b) {
904 ; CHECK-LE-LABEL: setnbc51:
905 ; CHECK-LE:       # %bb.0: # %entry
906 ; CHECK-LE-NEXT:    cmpd r3, r4
907 ; CHECK-LE-NEXT:    setbc r3, lt
908 ; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
909 ; CHECK-LE-NEXT:    blr
911 ; CHECK-BE-LABEL: setnbc51:
912 ; CHECK-BE:       # %bb.0: # %entry
913 ; CHECK-BE-NEXT:    cmpd r3, r4
914 ; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
915 ; CHECK-BE-NEXT:    setbc r3, lt
916 ; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
917 ; CHECK-BE-NEXT:    blr
918 entry:
919   %cmp = icmp slt i64 %a, %b
920   %conv1 = zext i1 %cmp to i64
921   store i64 %conv1, ptr @globalVal3, align 8
922   ret void