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
8
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.
14
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
19
20define dso_local signext i32 @setbc1(i8 %a) {
21; CHECK-LABEL: setbc1:
22; CHECK:       # %bb.0: # %entry
23; CHECK-NEXT:    extsb r3, r3
24; CHECK-NEXT:    cmpwi r3, 1
25; CHECK-NEXT:    setbc r3, lt
26; CHECK-NEXT:    blr
27entry:
28  %cmp = icmp slt i8 %a, 1
29  %conv = zext i1 %cmp to i32
30  ret i32 %conv
31}
32
33define dso_local signext i32 @setbc2(i32 %a) {
34; CHECK-LABEL: setbc2:
35; CHECK:       # %bb.0: # %entry
36; CHECK-NEXT:    cmpwi r3, 1
37; CHECK-NEXT:    setbc r3, lt
38; CHECK-NEXT:    blr
39entry:
40  %cmp = icmp slt i32 %a, 1
41  %conv = zext i1 %cmp to i32
42  ret i32 %conv
43}
44
45define dso_local signext i32 @setbc3(i64 %a) {
46; CHECK-LABEL: setbc3:
47; CHECK:       # %bb.0: # %entry
48; CHECK-NEXT:    cmpdi r3, 1
49; CHECK-NEXT:    setbc r3, lt
50; CHECK-NEXT:    blr
51entry:
52  %cmp = icmp slt i64 %a, 1
53  %conv = zext i1 %cmp to i32
54  ret i32 %conv
55}
56
57define dso_local signext i32 @setbc4(i16 %a) {
58; CHECK-LABEL: setbc4:
59; CHECK:       # %bb.0: # %entry
60; CHECK-NEXT:    extsh r3, r3
61; CHECK-NEXT:    cmpwi r3, 1
62; CHECK-NEXT:    setbc r3, lt
63; CHECK-NEXT:    blr
64entry:
65  %cmp = icmp slt i16 %a, 1
66  %conv = zext i1 %cmp to i32
67  ret i32 %conv
68}
69
70define signext i64 @setbc5(i8 %a) {
71; CHECK-LABEL: setbc5:
72; CHECK:       # %bb.0: # %entry
73; CHECK-NEXT:    extsb r3, r3
74; CHECK-NEXT:    cmpwi r3, 1
75; CHECK-NEXT:    setbc r3, lt
76; CHECK-NEXT:    blr
77entry:
78  %cmp = icmp slt i8 %a, 1
79  %conv = zext i1 %cmp to i64
80  ret i64 %conv
81}
82
83define signext i64 @setbc6(i32 %a) {
84; CHECK-LABEL: setbc6:
85; CHECK:       # %bb.0: # %entry
86; CHECK-NEXT:    cmpwi r3, 1
87; CHECK-NEXT:    setbc r3, lt
88; CHECK-NEXT:    blr
89entry:
90  %cmp = icmp slt i32 %a, 1
91  %conv = zext i1 %cmp to i64
92  ret i64 %conv
93}
94
95define signext i64 @setbc7(i64 %a) {
96; CHECK-LABEL: setbc7:
97; CHECK:       # %bb.0: # %entry
98; CHECK-NEXT:    cmpdi r3, 1
99; CHECK-NEXT:    setbc r3, lt
100; CHECK-NEXT:    blr
101entry:
102  %cmp = icmp slt i64 %a, 1
103  %conv = zext i1 %cmp to i64
104  ret i64 %conv
105}
106
107define signext i64 @setbc8(i16 %a) {
108; CHECK-LABEL: setbc8:
109; CHECK:       # %bb.0: # %entry
110; CHECK-NEXT:    extsh r3, r3
111; CHECK-NEXT:    cmpwi r3, 1
112; CHECK-NEXT:    setbc r3, lt
113; CHECK-NEXT:    blr
114entry:
115  %cmp = icmp slt i16 %a, 1
116  %conv = zext i1 %cmp to i64
117  ret i64 %conv
118}
119
120define dso_local void @setbc9(i8 %a) {
121; CHECK-LE-LABEL: setbc9:
122; CHECK-LE:       # %bb.0: # %entry
123; CHECK-LE-NEXT:    extsb r3, r3
124; CHECK-LE-NEXT:    cmpwi r3, 1
125; CHECK-LE-NEXT:    setbc r3, lt
126; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
127; CHECK-LE-NEXT:    blr
128;
129; CHECK-BE-LABEL: setbc9:
130; CHECK-BE:       # %bb.0: # %entry
131; CHECK-BE-NEXT:    extsb r3, r3
132; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
133; CHECK-BE-NEXT:    cmpwi r3, 1
134; CHECK-BE-NEXT:    setbc r3, lt
135; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
136; CHECK-BE-NEXT:    blr
137entry:
138  %cmp = icmp slt i8 %a, 1
139  %conv1 = zext i1 %cmp to i8
140  store i8 %conv1, i8* @globalVal, align 1
141  ret void
142}
143
144define dso_local void @setbc10(i32 %a) {
145; CHECK-LE-LABEL: setbc10:
146; CHECK-LE:       # %bb.0: # %entry
147; CHECK-LE-NEXT:    cmpwi r3, 1
148; CHECK-LE-NEXT:    setbc r3, lt
149; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
150; CHECK-LE-NEXT:    blr
151;
152; CHECK-BE-LABEL: setbc10:
153; CHECK-BE:       # %bb.0: # %entry
154; CHECK-BE-NEXT:    cmpwi r3, 1
155; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
156; CHECK-BE-NEXT:    setbc r3, lt
157; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
158; CHECK-BE-NEXT:    blr
159entry:
160  %cmp = icmp slt i32 %a, 1
161  %conv1 = zext i1 %cmp to i32
162  store i32 %conv1, i32* @globalVal2, align 4
163  ret void
164}
165
166define dso_local void @setbc11(i64 %a) {
167; CHECK-LE-LABEL: setbc11:
168; CHECK-LE:       # %bb.0: # %entry
169; CHECK-LE-NEXT:    cmpdi r3, 1
170; CHECK-LE-NEXT:    setbc r3, lt
171; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
172; CHECK-LE-NEXT:    blr
173;
174; CHECK-BE-LABEL: setbc11:
175; CHECK-BE:       # %bb.0: # %entry
176; CHECK-BE-NEXT:    cmpdi r3, 1
177; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
178; CHECK-BE-NEXT:    setbc r3, lt
179; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
180; CHECK-BE-NEXT:    blr
181entry:
182  %cmp = icmp slt i64 %a, 1
183  %conv1 = zext i1 %cmp to i64
184  store i64 %conv1, i64* @globalVal3, align 8
185  ret void
186}
187
188define dso_local void @setbc12(i16 %a) {
189; CHECK-LE-LABEL: setbc12:
190; CHECK-LE:       # %bb.0: # %entry
191; CHECK-LE-NEXT:    extsh r3, r3
192; CHECK-LE-NEXT:    cmpwi r3, 1
193; CHECK-LE-NEXT:    setbc r3, lt
194; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
195; CHECK-LE-NEXT:    blr
196;
197; CHECK-BE-LABEL: setbc12:
198; CHECK-BE:       # %bb.0: # %entry
199; CHECK-BE-NEXT:    extsh r3, r3
200; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
201; CHECK-BE-NEXT:    cmpwi r3, 1
202; CHECK-BE-NEXT:    setbc r3, lt
203; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
204; CHECK-BE-NEXT:    blr
205entry:
206  %cmp = icmp slt i16 %a, 1
207  %conv1 = zext i1 %cmp to i16
208  store i16 %conv1, i16* @globalVal4, align 2
209  ret void
210}
211
212define dso_local signext i32 @setbc13(i8 %a) {
213; CHECK-LABEL: setbc13:
214; CHECK:       # %bb.0: # %entry
215; CHECK-NEXT:    extsb r3, r3
216; CHECK-NEXT:    cmpwi r3, 1
217; CHECK-NEXT:    setbc r3, gt
218; CHECK-NEXT:    blr
219entry:
220  %cmp = icmp sgt i8 %a, 1
221  %conv = zext i1 %cmp to i32
222  ret i32 %conv
223}
224
225define dso_local signext i32 @setbc14(i32 %a) {
226; CHECK-LABEL: setbc14:
227; CHECK:       # %bb.0: # %entry
228; CHECK-NEXT:    cmpwi r3, 1
229; CHECK-NEXT:    setbc r3, gt
230; CHECK-NEXT:    blr
231entry:
232  %cmp = icmp sgt i32 %a, 1
233  %conv = zext i1 %cmp to i32
234  ret i32 %conv
235}
236
237define dso_local signext i32 @setbc15(i64 %a) {
238; CHECK-LABEL: setbc15:
239; CHECK:       # %bb.0: # %entry
240; CHECK-NEXT:    cmpdi r3, 1
241; CHECK-NEXT:    setbc r3, gt
242; CHECK-NEXT:    blr
243entry:
244  %cmp = icmp sgt i64 %a, 1
245  %conv = zext i1 %cmp to i32
246  ret i32 %conv
247}
248
249define dso_local signext i32 @setbc16(i16 %a) {
250; CHECK-LABEL: setbc16:
251; CHECK:       # %bb.0: # %entry
252; CHECK-NEXT:    extsh r3, r3
253; CHECK-NEXT:    cmpwi r3, 1
254; CHECK-NEXT:    setbc r3, gt
255; CHECK-NEXT:    blr
256entry:
257  %cmp = icmp sgt i16 %a, 1
258  %conv = zext i1 %cmp to i32
259  ret i32 %conv
260}
261
262define signext i64 @setbc17(i8 %a) {
263; CHECK-LABEL: setbc17:
264; CHECK:       # %bb.0: # %entry
265; CHECK-NEXT:    extsb r3, r3
266; CHECK-NEXT:    cmpwi r3, 1
267; CHECK-NEXT:    setbc r3, gt
268; CHECK-NEXT:    blr
269entry:
270  %cmp = icmp sgt i8 %a, 1
271  %conv = zext i1 %cmp to i64
272  ret i64 %conv
273}
274
275define signext i64 @setbc18(i32 %a) {
276; CHECK-LABEL: setbc18:
277; CHECK:       # %bb.0: # %entry
278; CHECK-NEXT:    cmpwi r3, 1
279; CHECK-NEXT:    setbc r3, gt
280; CHECK-NEXT:    blr
281entry:
282  %cmp = icmp sgt i32 %a, 1
283  %conv = zext i1 %cmp to i64
284  ret i64 %conv
285}
286
287define signext i64 @setbc19(i64 %a) {
288; CHECK-LABEL: setbc19:
289; CHECK:       # %bb.0: # %entry
290; CHECK-NEXT:    cmpdi r3, 1
291; CHECK-NEXT:    setbc r3, gt
292; CHECK-NEXT:    blr
293entry:
294  %cmp = icmp sgt i64 %a, 1
295  %conv = zext i1 %cmp to i64
296  ret i64 %conv
297}
298
299define signext i64 @setbc20(i16 %a) {
300; CHECK-LABEL: setbc20:
301; CHECK:       # %bb.0: # %entry
302; CHECK-NEXT:    extsh r3, r3
303; CHECK-NEXT:    cmpwi r3, 1
304; CHECK-NEXT:    setbc r3, gt
305; CHECK-NEXT:    blr
306entry:
307  %cmp = icmp sgt i16 %a, 1
308  %conv = zext i1 %cmp to i64
309  ret i64 %conv
310}
311
312define dso_local void @setbc21(i8 %a) {
313; CHECK-LE-LABEL: setbc21:
314; CHECK-LE:       # %bb.0: # %entry
315; CHECK-LE-NEXT:    extsb r3, r3
316; CHECK-LE-NEXT:    cmpwi r3, 1
317; CHECK-LE-NEXT:    setbc r3, gt
318; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
319; CHECK-LE-NEXT:    blr
320;
321; CHECK-BE-LABEL: setbc21:
322; CHECK-BE:       # %bb.0: # %entry
323; CHECK-BE-NEXT:    extsb r3, r3
324; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
325; CHECK-BE-NEXT:    cmpwi r3, 1
326; CHECK-BE-NEXT:    setbc r3, gt
327; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
328; CHECK-BE-NEXT:    blr
329entry:
330  %cmp = icmp sgt i8 %a, 1
331  %conv1 = zext i1 %cmp to i8
332  store i8 %conv1, i8* @globalVal, align 1
333  ret void
334}
335
336define dso_local void @setbc22(i32 %a) {
337; CHECK-LE-LABEL: setbc22:
338; CHECK-LE:       # %bb.0: # %entry
339; CHECK-LE-NEXT:    cmpwi r3, 1
340; CHECK-LE-NEXT:    setbc r3, gt
341; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
342; CHECK-LE-NEXT:    blr
343;
344; CHECK-BE-LABEL: setbc22:
345; CHECK-BE:       # %bb.0: # %entry
346; CHECK-BE-NEXT:    cmpwi r3, 1
347; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
348; CHECK-BE-NEXT:    setbc r3, gt
349; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
350; CHECK-BE-NEXT:    blr
351entry:
352  %cmp = icmp sgt i32 %a, 1
353  %conv1 = zext i1 %cmp to i32
354  store i32 %conv1, i32* @globalVal2, align 4
355  ret void
356}
357
358define dso_local void @setbc23(i64 %a) {
359; CHECK-LE-LABEL: setbc23:
360; CHECK-LE:       # %bb.0: # %entry
361; CHECK-LE-NEXT:    cmpdi r3, 1
362; CHECK-LE-NEXT:    setbc r3, gt
363; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
364; CHECK-LE-NEXT:    blr
365;
366; CHECK-BE-LABEL: setbc23:
367; CHECK-BE:       # %bb.0: # %entry
368; CHECK-BE-NEXT:    cmpdi r3, 1
369; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
370; CHECK-BE-NEXT:    setbc r3, gt
371; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
372; CHECK-BE-NEXT:    blr
373entry:
374  %cmp = icmp sgt i64 %a, 1
375  %conv1 = zext i1 %cmp to i64
376  store i64 %conv1, i64* @globalVal3, align 8
377  ret void
378}
379
380define dso_local void @setbc24(i16 %a) {
381; CHECK-LE-LABEL: setbc24:
382; CHECK-LE:       # %bb.0: # %entry
383; CHECK-LE-NEXT:    extsh r3, r3
384; CHECK-LE-NEXT:    cmpwi r3, 1
385; CHECK-LE-NEXT:    setbc r3, gt
386; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
387; CHECK-LE-NEXT:    blr
388;
389; CHECK-BE-LABEL: setbc24:
390; CHECK-BE:       # %bb.0: # %entry
391; CHECK-BE-NEXT:    extsh r3, r3
392; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
393; CHECK-BE-NEXT:    cmpwi r3, 1
394; CHECK-BE-NEXT:    setbc r3, gt
395; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
396; CHECK-BE-NEXT:    blr
397entry:
398  %cmp = icmp sgt i16 %a, 1
399  %conv1 = zext i1 %cmp to i16
400  store i16 %conv1, i16* @globalVal4, align 2
401  ret void
402}
403
404define dso_local signext i32 @setbc25(i8 %a) {
405; CHECK-LABEL: setbc25:
406; CHECK:       # %bb.0: # %entry
407; CHECK-NEXT:    clrlwi r3, r3, 24
408; CHECK-NEXT:    cmpwi r3, 1
409; CHECK-NEXT:    setbc r3, eq
410; CHECK-NEXT:    blr
411entry:
412  %cmp = icmp eq i8 %a, 1
413  %conv = zext i1 %cmp to i32
414  ret i32 %conv
415}
416
417define dso_local signext i32 @setbc26(i32 %a) {
418; CHECK-LABEL: setbc26:
419; CHECK:       # %bb.0: # %entry
420; CHECK-NEXT:    cmpwi r3, 1
421; CHECK-NEXT:    setbc r3, eq
422; CHECK-NEXT:    blr
423entry:
424  %cmp = icmp eq i32 %a, 1
425  %conv = zext i1 %cmp to i32
426  ret i32 %conv
427}
428
429define dso_local signext i32 @setbc27(i64 %a) {
430; CHECK-LABEL: setbc27:
431; CHECK:       # %bb.0: # %entry
432; CHECK-NEXT:    cmpdi r3, 1
433; CHECK-NEXT:    setbc r3, eq
434; CHECK-NEXT:    blr
435entry:
436  %cmp = icmp eq i64 %a, 1
437  %conv = zext i1 %cmp to i32
438  ret i32 %conv
439}
440
441define dso_local signext i32 @setbc28(i16 %a) {
442; CHECK-LABEL: setbc28:
443; CHECK:       # %bb.0: # %entry
444; CHECK-NEXT:    clrlwi r3, r3, 16
445; CHECK-NEXT:    cmpwi r3, 1
446; CHECK-NEXT:    setbc r3, eq
447; CHECK-NEXT:    blr
448entry:
449  %cmp = icmp eq i16 %a, 1
450  %conv = zext i1 %cmp to i32
451  ret i32 %conv
452}
453
454define signext i64 @setbc29(i8 %a) {
455; CHECK-LABEL: setbc29:
456; CHECK:       # %bb.0: # %entry
457; CHECK-NEXT:    clrlwi r3, r3, 24
458; CHECK-NEXT:    cmpwi r3, 1
459; CHECK-NEXT:    setbc r3, eq
460; CHECK-NEXT:    blr
461entry:
462  %cmp = icmp eq i8 %a, 1
463  %conv = zext i1 %cmp to i64
464  ret i64 %conv
465}
466
467define signext i64 @setbc30(i32 %a) {
468; CHECK-LABEL: setbc30:
469; CHECK:       # %bb.0: # %entry
470; CHECK-NEXT:    cmpwi r3, 1
471; CHECK-NEXT:    setbc r3, eq
472; CHECK-NEXT:    blr
473entry:
474  %cmp = icmp eq i32 %a, 1
475  %conv = zext i1 %cmp to i64
476  ret i64 %conv
477}
478
479define signext i64 @setbc31(i64 %a) {
480; CHECK-LABEL: setbc31:
481; CHECK:       # %bb.0: # %entry
482; CHECK-NEXT:    cmpdi r3, 1
483; CHECK-NEXT:    setbc r3, eq
484; CHECK-NEXT:    blr
485entry:
486  %cmp = icmp eq i64 %a, 1
487  %conv = zext i1 %cmp to i64
488  ret i64 %conv
489}
490
491define signext i64 @setbc32(i16 %a) {
492; CHECK-LABEL: setbc32:
493; CHECK:       # %bb.0: # %entry
494; CHECK-NEXT:    clrlwi r3, r3, 16
495; CHECK-NEXT:    cmpwi r3, 1
496; CHECK-NEXT:    setbc r3, eq
497; CHECK-NEXT:    blr
498entry:
499  %cmp = icmp eq i16 %a, 1
500  %conv = zext i1 %cmp to i64
501  ret i64 %conv
502}
503
504define dso_local void @setbc33(i8 %a) {
505; CHECK-LE-LABEL: setbc33:
506; CHECK-LE:       # %bb.0: # %entry
507; CHECK-LE-NEXT:    clrlwi r3, r3, 24
508; CHECK-LE-NEXT:    cmpwi r3, 1
509; CHECK-LE-NEXT:    setbc r3, eq
510; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
511; CHECK-LE-NEXT:    blr
512;
513; CHECK-BE-LABEL: setbc33:
514; CHECK-BE:       # %bb.0: # %entry
515; CHECK-BE-NEXT:    clrlwi r3, r3, 24
516; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
517; CHECK-BE-NEXT:    cmpwi r3, 1
518; CHECK-BE-NEXT:    setbc r3, eq
519; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
520; CHECK-BE-NEXT:    blr
521entry:
522  %cmp = icmp eq i8 %a, 1
523  %conv1 = zext i1 %cmp to i8
524  store i8 %conv1, i8* @globalVal, align 1
525  ret void
526}
527
528define dso_local void @setbc34(i32 %a) {
529; CHECK-LE-LABEL: setbc34:
530; CHECK-LE:       # %bb.0: # %entry
531; CHECK-LE-NEXT:    cmpwi r3, 1
532; CHECK-LE-NEXT:    setbc r3, eq
533; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
534; CHECK-LE-NEXT:    blr
535;
536; CHECK-BE-LABEL: setbc34:
537; CHECK-BE:       # %bb.0: # %entry
538; CHECK-BE-NEXT:    cmpwi r3, 1
539; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
540; CHECK-BE-NEXT:    setbc r3, eq
541; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
542; CHECK-BE-NEXT:    blr
543entry:
544  %cmp = icmp eq i32 %a, 1
545  %conv1 = zext i1 %cmp to i32
546  store i32 %conv1, i32* @globalVal2, align 4
547  ret void
548}
549
550define dso_local void @setbc35(i64 %a) {
551; CHECK-LE-LABEL: setbc35:
552; CHECK-LE:       # %bb.0: # %entry
553; CHECK-LE-NEXT:    cmpdi r3, 1
554; CHECK-LE-NEXT:    setbc r3, eq
555; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
556; CHECK-LE-NEXT:    blr
557;
558; CHECK-BE-LABEL: setbc35:
559; CHECK-BE:       # %bb.0: # %entry
560; CHECK-BE-NEXT:    cmpdi r3, 1
561; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
562; CHECK-BE-NEXT:    setbc r3, eq
563; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
564; CHECK-BE-NEXT:    blr
565entry:
566  %cmp = icmp eq i64 %a, 1
567  %conv1 = zext i1 %cmp to i64
568  store i64 %conv1, i64* @globalVal3, align 8
569  ret void
570}
571
572define dso_local void @setbc36(i16 %a) {
573; CHECK-LE-LABEL: setbc36:
574; CHECK-LE:       # %bb.0: # %entry
575; CHECK-LE-NEXT:    clrlwi r3, r3, 16
576; CHECK-LE-NEXT:    cmpwi r3, 1
577; CHECK-LE-NEXT:    setbc r3, eq
578; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
579; CHECK-LE-NEXT:    blr
580;
581; CHECK-BE-LABEL: setbc36:
582; CHECK-BE:       # %bb.0: # %entry
583; CHECK-BE-NEXT:    clrlwi r3, r3, 16
584; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
585; CHECK-BE-NEXT:    cmpwi r3, 1
586; CHECK-BE-NEXT:    setbc r3, eq
587; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
588; CHECK-BE-NEXT:    blr
589entry:
590  %cmp = icmp eq i16 %a, 1
591  %conv1 = zext i1 %cmp to i16
592  store i16 %conv1, i16* @globalVal4, align 2
593  ret void
594}
595
596define dso_local signext i32 @setbc37(i64 %a) {
597; CHECK-LABEL: setbc37:
598; CHECK:       # %bb.0: # %entry
599; CHECK-NEXT:    cmpldi r3, 1
600; CHECK-NEXT:    setbc r3, gt
601; CHECK-NEXT:    blr
602entry:
603  %cmp = icmp ugt i64 %a, 1
604  %conv = zext i1 %cmp to i32
605  ret i32 %conv
606}
607
608define signext i64 @setbc38(i64 %a) {
609; CHECK-LABEL: setbc38:
610; CHECK:       # %bb.0: # %entry
611; CHECK-NEXT:    cmpldi r3, 1
612; CHECK-NEXT:    setbc r3, gt
613; CHECK-NEXT:    blr
614entry:
615  %cmp = icmp ugt i64 %a, 1
616  %conv = zext i1 %cmp to i64
617  ret i64 %conv
618}
619
620define dso_local void @setbc39(i64 %a) {
621; CHECK-LE-LABEL: setbc39:
622; CHECK-LE:       # %bb.0: # %entry
623; CHECK-LE-NEXT:    cmpldi r3, 1
624; CHECK-LE-NEXT:    setbc r3, gt
625; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
626; CHECK-LE-NEXT:    blr
627;
628; CHECK-BE-LABEL: setbc39:
629; CHECK-BE:       # %bb.0: # %entry
630; CHECK-BE-NEXT:    cmpldi r3, 1
631; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
632; CHECK-BE-NEXT:    setbc r3, gt
633; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
634; CHECK-BE-NEXT:    blr
635entry:
636  %cmp = icmp ugt i64 %a, 1
637  %conv1 = zext i1 %cmp to i64
638  store i64 %conv1, i64* @globalVal3, align 8
639  ret void
640}
641