xref: /llvm-project/llvm/test/CodeGen/PowerPC/p10-setnbc-ri.ll (revision 5403c59c608c08c8ecd4303763f08eb046eb5e4d)
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 @setnbc1(i8 %a) {
21; CHECK-LABEL: setnbc1:
22; CHECK:       # %bb.0: # %entry
23; CHECK-NEXT:    extsb r3, r3
24; CHECK-NEXT:    cmpwi r3, 1
25; CHECK-NEXT:    setnbc r3, lt
26; CHECK-NEXT:    blr
27entry:
28  %cmp = icmp slt i8 %a, 1
29  %conv = sext i1 %cmp to i32
30  ret i32 %conv
31}
32
33define dso_local signext i32 @setnbc2(i32 %a) {
34; CHECK-LABEL: setnbc2:
35; CHECK:       # %bb.0: # %entry
36; CHECK-NEXT:    cmpwi r3, 1
37; CHECK-NEXT:    setnbc r3, lt
38; CHECK-NEXT:    blr
39entry:
40  %cmp = icmp slt i32 %a, 1
41  %conv = sext i1 %cmp to i32
42  ret i32 %conv
43}
44
45define dso_local signext i32 @setnbc3(i64 %a) {
46; CHECK-LABEL: setnbc3:
47; CHECK:       # %bb.0: # %entry
48; CHECK-NEXT:    cmpdi r3, 1
49; CHECK-NEXT:    setnbc r3, lt
50; CHECK-NEXT:    blr
51entry:
52  %cmp = icmp slt i64 %a, 1
53  %conv = sext i1 %cmp to i32
54  ret i32 %conv
55}
56
57define dso_local signext i32 @setnbc4(i16 %a) {
58; CHECK-LABEL: setnbc4:
59; CHECK:       # %bb.0: # %entry
60; CHECK-NEXT:    extsh r3, r3
61; CHECK-NEXT:    cmpwi r3, 1
62; CHECK-NEXT:    setnbc r3, lt
63; CHECK-NEXT:    blr
64entry:
65  %cmp = icmp slt i16 %a, 1
66  %conv = sext i1 %cmp to i32
67  ret i32 %conv
68}
69
70define signext i64 @setnbc5(i8 %a) {
71; CHECK-LABEL: setnbc5:
72; CHECK:       # %bb.0: # %entry
73; CHECK-NEXT:    extsb r3, r3
74; CHECK-NEXT:    cmpwi r3, 1
75; CHECK-NEXT:    setnbc r3, lt
76; CHECK-NEXT:    blr
77entry:
78  %cmp = icmp slt i8 %a, 1
79  %conv = sext i1 %cmp to i64
80  ret i64 %conv
81}
82
83define signext i64 @setnbc6(i32 %a) {
84; CHECK-LABEL: setnbc6:
85; CHECK:       # %bb.0: # %entry
86; CHECK-NEXT:    cmpwi r3, 1
87; CHECK-NEXT:    setnbc r3, lt
88; CHECK-NEXT:    blr
89entry:
90  %cmp = icmp slt i32 %a, 1
91  %conv = sext i1 %cmp to i64
92  ret i64 %conv
93}
94
95define signext i64 @setnbc7(i64 %a) {
96; CHECK-LABEL: setnbc7:
97; CHECK:       # %bb.0: # %entry
98; CHECK-NEXT:    cmpdi r3, 1
99; CHECK-NEXT:    setnbc r3, lt
100; CHECK-NEXT:    blr
101entry:
102  %cmp = icmp slt i64 %a, 1
103  %conv = sext i1 %cmp to i64
104  ret i64 %conv
105}
106
107define signext i64 @setnbc8(i16 %a) {
108; CHECK-LABEL: setnbc8:
109; CHECK:       # %bb.0: # %entry
110; CHECK-NEXT:    extsh r3, r3
111; CHECK-NEXT:    cmpwi r3, 1
112; CHECK-NEXT:    setnbc r3, lt
113; CHECK-NEXT:    blr
114entry:
115  %cmp = icmp slt i16 %a, 1
116  %conv = sext i1 %cmp to i64
117  ret i64 %conv
118}
119
120define dso_local void @setnbc9(i8 %a) {
121; CHECK-LE-LABEL: setnbc9:
122; CHECK-LE:       # %bb.0: # %entry
123; CHECK-LE-NEXT:    extsb r3, r3
124; CHECK-LE-NEXT:    cmpwi r3, 1
125; CHECK-LE-NEXT:    setnbc r3, lt
126; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
127; CHECK-LE-NEXT:    blr
128;
129; CHECK-BE-LABEL: setnbc9:
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:    setnbc 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 = sext i1 %cmp to i8
140  store i8 %conv1, ptr @globalVal, align 1
141  ret void
142}
143
144define dso_local void @setnbc10(i32 %a) {
145; CHECK-LE-LABEL: setnbc10:
146; CHECK-LE:       # %bb.0: # %entry
147; CHECK-LE-NEXT:    cmpwi r3, 1
148; CHECK-LE-NEXT:    setnbc r3, lt
149; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
150; CHECK-LE-NEXT:    blr
151;
152; CHECK-BE-LABEL: setnbc10:
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:    setnbc 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 = sext i1 %cmp to i32
162  store i32 %conv1, ptr @globalVal2, align 4
163  ret void
164}
165
166define dso_local void @setnbc11(i64 %a) {
167; CHECK-LE-LABEL: setnbc11:
168; CHECK-LE:       # %bb.0: # %entry
169; CHECK-LE-NEXT:    cmpdi r3, 1
170; CHECK-LE-NEXT:    setnbc r3, lt
171; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
172; CHECK-LE-NEXT:    blr
173;
174; CHECK-BE-LABEL: setnbc11:
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:    setnbc 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 = sext i1 %cmp to i64
184  store i64 %conv1, ptr @globalVal3, align 8
185  ret void
186}
187
188define dso_local void @setnbc12(i16 %a) {
189; CHECK-LE-LABEL: setnbc12:
190; CHECK-LE:       # %bb.0: # %entry
191; CHECK-LE-NEXT:    extsh r3, r3
192; CHECK-LE-NEXT:    cmpwi r3, 1
193; CHECK-LE-NEXT:    setnbc r3, lt
194; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
195; CHECK-LE-NEXT:    blr
196;
197; CHECK-BE-LABEL: setnbc12:
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:    setnbc 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 = sext i1 %cmp to i16
208  store i16 %conv1, ptr @globalVal4, align 2
209  ret void
210}
211
212define dso_local signext i32 @setnbc13(i8 %a) {
213; CHECK-LABEL: setnbc13:
214; CHECK:       # %bb.0: # %entry
215; CHECK-NEXT:    extsb r3, r3
216; CHECK-NEXT:    cmpwi r3, 1
217; CHECK-NEXT:    setnbc r3, gt
218; CHECK-NEXT:    blr
219entry:
220  %cmp = icmp sgt i8 %a, 1
221  %conv = sext i1 %cmp to i32
222  ret i32 %conv
223}
224
225define dso_local signext i32 @setnbc14(i32 %a) {
226; CHECK-LABEL: setnbc14:
227; CHECK:       # %bb.0: # %entry
228; CHECK-NEXT:    cmpwi r3, 1
229; CHECK-NEXT:    setnbc r3, gt
230; CHECK-NEXT:    blr
231entry:
232  %cmp = icmp sgt i32 %a, 1
233  %conv = sext i1 %cmp to i32
234  ret i32 %conv
235}
236
237define dso_local signext i32 @setnbc15(i64 %a) {
238; CHECK-LABEL: setnbc15:
239; CHECK:       # %bb.0: # %entry
240; CHECK-NEXT:    cmpdi r3, 1
241; CHECK-NEXT:    setnbc r3, gt
242; CHECK-NEXT:    blr
243entry:
244  %cmp = icmp sgt i64 %a, 1
245  %conv = sext i1 %cmp to i32
246  ret i32 %conv
247}
248
249define dso_local signext i32 @setnbc16(i16 %a) {
250; CHECK-LABEL: setnbc16:
251; CHECK:       # %bb.0: # %entry
252; CHECK-NEXT:    extsh r3, r3
253; CHECK-NEXT:    cmpwi r3, 1
254; CHECK-NEXT:    setnbc r3, gt
255; CHECK-NEXT:    blr
256entry:
257  %cmp = icmp sgt i16 %a, 1
258  %conv = sext i1 %cmp to i32
259  ret i32 %conv
260}
261
262define signext i64 @setnbc17(i8 %a) {
263; CHECK-LABEL: setnbc17:
264; CHECK:       # %bb.0: # %entry
265; CHECK-NEXT:    extsb r3, r3
266; CHECK-NEXT:    cmpwi r3, 1
267; CHECK-NEXT:    setnbc r3, gt
268; CHECK-NEXT:    blr
269entry:
270  %cmp = icmp sgt i8 %a, 1
271  %conv = sext i1 %cmp to i64
272  ret i64 %conv
273}
274
275define signext i64 @setnbc18(i32 %a) {
276; CHECK-LABEL: setnbc18:
277; CHECK:       # %bb.0: # %entry
278; CHECK-NEXT:    cmpwi r3, 1
279; CHECK-NEXT:    setnbc r3, gt
280; CHECK-NEXT:    blr
281entry:
282  %cmp = icmp sgt i32 %a, 1
283  %conv = sext i1 %cmp to i64
284  ret i64 %conv
285}
286
287define signext i64 @setnbc19(i64 %a) {
288; CHECK-LABEL: setnbc19:
289; CHECK:       # %bb.0: # %entry
290; CHECK-NEXT:    cmpdi r3, 1
291; CHECK-NEXT:    setnbc r3, gt
292; CHECK-NEXT:    blr
293entry:
294  %cmp = icmp sgt i64 %a, 1
295  %conv = sext i1 %cmp to i64
296  ret i64 %conv
297}
298
299define signext i64 @setnbc20(i16 %a) {
300; CHECK-LABEL: setnbc20:
301; CHECK:       # %bb.0: # %entry
302; CHECK-NEXT:    extsh r3, r3
303; CHECK-NEXT:    cmpwi r3, 1
304; CHECK-NEXT:    setnbc r3, gt
305; CHECK-NEXT:    blr
306entry:
307  %cmp = icmp sgt i16 %a, 1
308  %conv = sext i1 %cmp to i64
309  ret i64 %conv
310}
311
312define dso_local void @setnbc21(i8 %a) {
313; CHECK-LE-LABEL: setnbc21:
314; CHECK-LE:       # %bb.0: # %entry
315; CHECK-LE-NEXT:    extsb r3, r3
316; CHECK-LE-NEXT:    cmpwi r3, 1
317; CHECK-LE-NEXT:    setnbc r3, gt
318; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
319; CHECK-LE-NEXT:    blr
320;
321; CHECK-BE-LABEL: setnbc21:
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:    setnbc 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 = sext i1 %cmp to i8
332  store i8 %conv1, ptr @globalVal, align 1
333  ret void
334}
335
336define dso_local void @setnbc22(i32 %a) {
337; CHECK-LE-LABEL: setnbc22:
338; CHECK-LE:       # %bb.0: # %entry
339; CHECK-LE-NEXT:    cmpwi r3, 1
340; CHECK-LE-NEXT:    setnbc r3, gt
341; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
342; CHECK-LE-NEXT:    blr
343;
344; CHECK-BE-LABEL: setnbc22:
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:    setnbc 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 = sext i1 %cmp to i32
354  store i32 %conv1, ptr @globalVal2, align 4
355  ret void
356}
357
358define dso_local void @setnbc23(i64 %a) {
359; CHECK-LE-LABEL: setnbc23:
360; CHECK-LE:       # %bb.0: # %entry
361; CHECK-LE-NEXT:    cmpdi r3, 1
362; CHECK-LE-NEXT:    setnbc r3, gt
363; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
364; CHECK-LE-NEXT:    blr
365;
366; CHECK-BE-LABEL: setnbc23:
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:    setnbc 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 = sext i1 %cmp to i64
376  store i64 %conv1, ptr @globalVal3, align 8
377  ret void
378}
379
380define dso_local void @setnbc24(i16 %a) {
381; CHECK-LE-LABEL: setnbc24:
382; CHECK-LE:       # %bb.0: # %entry
383; CHECK-LE-NEXT:    extsh r3, r3
384; CHECK-LE-NEXT:    cmpwi r3, 1
385; CHECK-LE-NEXT:    setnbc r3, gt
386; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
387; CHECK-LE-NEXT:    blr
388;
389; CHECK-BE-LABEL: setnbc24:
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:    setnbc 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 = sext i1 %cmp to i16
400  store i16 %conv1, ptr @globalVal4, align 2
401  ret void
402}
403
404define dso_local signext i32 @setnbc25(i8 %a) {
405; CHECK-LABEL: setnbc25:
406; CHECK:       # %bb.0: # %entry
407; CHECK-NEXT:    clrlwi r3, r3, 24
408; CHECK-NEXT:    cmpwi r3, 1
409; CHECK-NEXT:    setnbc r3, eq
410; CHECK-NEXT:    blr
411entry:
412  %cmp = icmp eq i8 %a, 1
413  %conv = sext i1 %cmp to i32
414  ret i32 %conv
415}
416
417define dso_local signext i32 @setnbc26(i32 %a) {
418; CHECK-LABEL: setnbc26:
419; CHECK:       # %bb.0: # %entry
420; CHECK-NEXT:    cmpwi r3, 1
421; CHECK-NEXT:    setnbc r3, eq
422; CHECK-NEXT:    blr
423entry:
424  %cmp = icmp eq i32 %a, 1
425  %conv = sext i1 %cmp to i32
426  ret i32 %conv
427}
428
429define dso_local signext i32 @setnbc27(i64 %a) {
430; CHECK-LABEL: setnbc27:
431; CHECK:       # %bb.0: # %entry
432; CHECK-NEXT:    cmpdi r3, 1
433; CHECK-NEXT:    setnbc r3, eq
434; CHECK-NEXT:    blr
435entry:
436  %cmp = icmp eq i64 %a, 1
437  %conv = sext i1 %cmp to i32
438  ret i32 %conv
439}
440
441define dso_local signext i32 @setnbc28(i16 %a) {
442; CHECK-LABEL: setnbc28:
443; CHECK:       # %bb.0: # %entry
444; CHECK-NEXT:    clrlwi r3, r3, 16
445; CHECK-NEXT:    cmpwi r3, 1
446; CHECK-NEXT:    setnbc r3, eq
447; CHECK-NEXT:    blr
448entry:
449  %cmp = icmp eq i16 %a, 1
450  %conv = sext i1 %cmp to i32
451  ret i32 %conv
452}
453
454define signext i64 @setnbc29(i8 %a) {
455; CHECK-LABEL: setnbc29:
456; CHECK:       # %bb.0: # %entry
457; CHECK-NEXT:    clrlwi r3, r3, 24
458; CHECK-NEXT:    cmpwi r3, 1
459; CHECK-NEXT:    setnbc r3, eq
460; CHECK-NEXT:    blr
461entry:
462  %cmp = icmp eq i8 %a, 1
463  %conv = sext i1 %cmp to i64
464  ret i64 %conv
465}
466
467define signext i64 @setnbc30(i32 %a) {
468; CHECK-LABEL: setnbc30:
469; CHECK:       # %bb.0: # %entry
470; CHECK-NEXT:    cmpwi r3, 1
471; CHECK-NEXT:    setnbc r3, eq
472; CHECK-NEXT:    blr
473entry:
474  %cmp = icmp eq i32 %a, 1
475  %conv = sext i1 %cmp to i64
476  ret i64 %conv
477}
478
479define signext i64 @setnbc31(i64 %a) {
480; CHECK-LABEL: setnbc31:
481; CHECK:       # %bb.0: # %entry
482; CHECK-NEXT:    cmpdi r3, 1
483; CHECK-NEXT:    setnbc r3, eq
484; CHECK-NEXT:    blr
485entry:
486  %cmp = icmp eq i64 %a, 1
487  %conv = sext i1 %cmp to i64
488  ret i64 %conv
489}
490
491define signext i64 @setnbc32(i16 %a) {
492; CHECK-LABEL: setnbc32:
493; CHECK:       # %bb.0: # %entry
494; CHECK-NEXT:    clrlwi r3, r3, 16
495; CHECK-NEXT:    cmpwi r3, 1
496; CHECK-NEXT:    setnbc r3, eq
497; CHECK-NEXT:    blr
498entry:
499  %cmp = icmp eq i16 %a, 1
500  %conv = sext i1 %cmp to i64
501  ret i64 %conv
502}
503
504define dso_local void @setnbc33(i8 %a) {
505; CHECK-LE-LABEL: setnbc33:
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:    setnbc r3, eq
510; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
511; CHECK-LE-NEXT:    blr
512;
513; CHECK-BE-LABEL: setnbc33:
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:    setnbc 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 = sext i1 %cmp to i8
524  store i8 %conv1, ptr @globalVal, align 1
525  ret void
526}
527
528define dso_local void @setnbc34(i32 %a) {
529; CHECK-LE-LABEL: setnbc34:
530; CHECK-LE:       # %bb.0: # %entry
531; CHECK-LE-NEXT:    cmpwi r3, 1
532; CHECK-LE-NEXT:    setnbc r3, eq
533; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
534; CHECK-LE-NEXT:    blr
535;
536; CHECK-BE-LABEL: setnbc34:
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:    setnbc 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 = sext i1 %cmp to i32
546  store i32 %conv1, ptr @globalVal2, align 4
547  ret void
548}
549
550define dso_local void @setnbc35(i64 %a) {
551; CHECK-LE-LABEL: setnbc35:
552; CHECK-LE:       # %bb.0: # %entry
553; CHECK-LE-NEXT:    cmpdi r3, 1
554; CHECK-LE-NEXT:    setnbc r3, eq
555; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
556; CHECK-LE-NEXT:    blr
557;
558; CHECK-BE-LABEL: setnbc35:
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:    setnbc 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 = sext i1 %cmp to i64
568  store i64 %conv1, ptr @globalVal3, align 8
569  ret void
570}
571
572define dso_local void @setnbc36(i16 %a) {
573; CHECK-LE-LABEL: setnbc36:
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:    setnbc r3, eq
578; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
579; CHECK-LE-NEXT:    blr
580;
581; CHECK-BE-LABEL: setnbc36:
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:    setnbc 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 = sext i1 %cmp to i16
592  store i16 %conv1, ptr @globalVal4, align 2
593  ret void
594}
595
596define dso_local signext i32 @setnbc37(i64 %a) {
597; CHECK-LABEL: setnbc37:
598; CHECK:       # %bb.0: # %entry
599; CHECK-NEXT:    cmpldi r3, 1
600; CHECK-NEXT:    setnbc r3, gt
601; CHECK-NEXT:    blr
602entry:
603  %cmp = icmp ugt i64 %a, 1
604  %conv = sext i1 %cmp to i32
605  ret i32 %conv
606}
607
608define signext i64 @setnbc38(i64 %a) {
609; CHECK-LABEL: setnbc38:
610; CHECK:       # %bb.0: # %entry
611; CHECK-NEXT:    cmpldi r3, 1
612; CHECK-NEXT:    setnbc r3, gt
613; CHECK-NEXT:    blr
614entry:
615  %cmp = icmp ugt i64 %a, 1
616  %conv = sext i1 %cmp to i64
617  ret i64 %conv
618}
619
620define dso_local void @setnbc39(i64 %a) {
621; CHECK-LE-LABEL: setnbc39:
622; CHECK-LE:       # %bb.0: # %entry
623; CHECK-LE-NEXT:    cmpldi r3, 1
624; CHECK-LE-NEXT:    setnbc r3, gt
625; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
626; CHECK-LE-NEXT:    blr
627;
628; CHECK-BE-LABEL: setnbc39:
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:    setnbc 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 = sext i1 %cmp to i64
638  store i64 %conv1, ptr @globalVal3, align 8
639  ret void
640}
641
642define dso_local signext i32 @setnbc40(i8 %a) {
643; CHECK-LABEL: setnbc40:
644; CHECK:       # %bb.0: # %entry
645; CHECK-NEXT:    extsb. r3, r3
646; CHECK-NEXT:    setnbc r3, lt
647; CHECK-NEXT:    blr
648entry:
649  %cmp = icmp slt i8 %a, 0
650  %conv = sext i1 %cmp to i32
651  ret i32 %conv
652}
653
654define dso_local signext i32 @setnbc41(i32 %a) {
655; CHECK-LABEL: setnbc41:
656; CHECK:       # %bb.0: # %entry
657; CHECK-NEXT:    cmpwi r3, 0
658; CHECK-NEXT:    setnbc r3, lt
659; CHECK-NEXT:    blr
660entry:
661  %cmp = icmp slt i32 %a, 0
662  %conv = sext i1 %cmp to i32
663  ret i32 %conv
664}
665
666define dso_local signext i32 @setnbc42(i16 %a) {
667; CHECK-LABEL: setnbc42:
668; CHECK:       # %bb.0: # %entry
669; CHECK-NEXT:    extsh. r3, r3
670; CHECK-NEXT:    setnbc r3, lt
671; CHECK-NEXT:    blr
672entry:
673  %cmp = icmp slt i16 %a, 0
674  %conv = sext i1 %cmp to i32
675  ret i32 %conv
676}
677
678define signext i64 @setnbc43(i8 %a) {
679; CHECK-LABEL: setnbc43:
680; CHECK:       # %bb.0: # %entry
681; CHECK-NEXT:    extsb. r3, r3
682; CHECK-NEXT:    setnbc r3, lt
683; CHECK-NEXT:    blr
684entry:
685  %cmp = icmp slt i8 %a, 0
686  %conv = sext i1 %cmp to i64
687  ret i64 %conv
688}
689
690define signext i64 @setnbc44(i32 %a) {
691; CHECK-LABEL: setnbc44:
692; CHECK:       # %bb.0: # %entry
693; CHECK-NEXT:    cmpwi r3, 0
694; CHECK-NEXT:    setnbc r3, lt
695; CHECK-NEXT:    blr
696entry:
697  %cmp = icmp slt i32 %a, 0
698  %conv = sext i1 %cmp to i64
699  ret i64 %conv
700}
701
702define signext i64 @setnbc45(i16 %a) {
703; CHECK-LABEL: setnbc45:
704; CHECK:       # %bb.0: # %entry
705; CHECK-NEXT:    extsh. r3, r3
706; CHECK-NEXT:    setnbc r3, lt
707; CHECK-NEXT:    blr
708entry:
709  %cmp = icmp slt i16 %a, 0
710  %conv = sext i1 %cmp to i64
711  ret i64 %conv
712}
713
714define dso_local signext i32 @setnbc46(i8 %a) {
715; CHECK-LABEL: setnbc46:
716; CHECK:       # %bb.0: # %entry
717; CHECK-NEXT:    extsb. r3, r3
718; CHECK-NEXT:    setnbc r3, gt
719; CHECK-NEXT:    blr
720entry:
721  %cmp = icmp sgt i8 %a, 0
722  %conv = sext i1 %cmp to i32
723  ret i32 %conv
724}
725
726define dso_local signext i32 @setnbc47(i32 %a) {
727; CHECK-LABEL: setnbc47:
728; CHECK:       # %bb.0: # %entry
729; CHECK-NEXT:    cmpwi r3, 0
730; CHECK-NEXT:    setnbc r3, gt
731; CHECK-NEXT:    blr
732entry:
733  %cmp = icmp sgt i32 %a, 0
734  %conv = sext i1 %cmp to i32
735  ret i32 %conv
736}
737
738define dso_local signext i32 @setnbc48(i64 %a) {
739; CHECK-LABEL: setnbc48:
740; CHECK:       # %bb.0: # %entry
741; CHECK-NEXT:    cmpdi r3, 0
742; CHECK-NEXT:    setnbc r3, gt
743; CHECK-NEXT:    blr
744entry:
745  %cmp = icmp sgt i64 %a, 0
746  %conv = sext i1 %cmp to i32
747  ret i32 %conv
748}
749
750define dso_local signext i32 @setnbc49(i16 %a) {
751; CHECK-LABEL: setnbc49:
752; CHECK:       # %bb.0: # %entry
753; CHECK-NEXT:    extsh. r3, r3
754; CHECK-NEXT:    setnbc r3, gt
755; CHECK-NEXT:    blr
756entry:
757  %cmp = icmp sgt i16 %a, 0
758  %conv = sext i1 %cmp to i32
759  ret i32 %conv
760}
761
762define signext i64 @setnbc50(i8 %a) {
763; CHECK-LABEL: setnbc50:
764; CHECK:       # %bb.0: # %entry
765; CHECK-NEXT:    extsb. r3, r3
766; CHECK-NEXT:    setnbc r3, gt
767; CHECK-NEXT:    blr
768entry:
769  %cmp = icmp sgt i8 %a, 0
770  %conv = sext i1 %cmp to i64
771  ret i64 %conv
772}
773
774define signext i64 @setnbc51(i32 %a) {
775; CHECK-LABEL: setnbc51:
776; CHECK:       # %bb.0: # %entry
777; CHECK-NEXT:    cmpwi r3, 0
778; CHECK-NEXT:    setnbc r3, gt
779; CHECK-NEXT:    blr
780entry:
781  %cmp = icmp sgt i32 %a, 0
782  %conv = sext i1 %cmp to i64
783  ret i64 %conv
784}
785
786define signext i64 @setnbc52(i64 %a) {
787; CHECK-LABEL: setnbc52:
788; CHECK:       # %bb.0: # %entry
789; CHECK-NEXT:    cmpdi r3, 0
790; CHECK-NEXT:    setnbc r3, gt
791; CHECK-NEXT:    blr
792entry:
793  %cmp = icmp sgt i64 %a, 0
794  %conv = sext i1 %cmp to i64
795  ret i64 %conv
796}
797
798define signext i64 @setnbc53(i16 %a) {
799; CHECK-LABEL: setnbc53:
800; CHECK:       # %bb.0: # %entry
801; CHECK-NEXT:    extsh. r3, r3
802; CHECK-NEXT:    setnbc r3, gt
803; CHECK-NEXT:    blr
804entry:
805  %cmp = icmp sgt i16 %a, 0
806  %conv = sext i1 %cmp to i64
807  ret i64 %conv
808}
809
810define dso_local void @setnbc54(i8 %a) {
811; CHECK-LE-LABEL: setnbc54:
812; CHECK-LE:       # %bb.0: # %entry
813; CHECK-LE-NEXT:    extsb. r3, r3
814; CHECK-LE-NEXT:    setnbc r3, gt
815; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
816; CHECK-LE-NEXT:    blr
817;
818; CHECK-BE-LABEL: setnbc54:
819; CHECK-BE:       # %bb.0: # %entry
820; CHECK-BE-NEXT:    extsb. r3, r3
821; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
822; CHECK-BE-NEXT:    setnbc r3, gt
823; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
824; CHECK-BE-NEXT:    blr
825entry:
826  %cmp = icmp sgt i8 %a, 0
827  %conv1 = sext i1 %cmp to i8
828  store i8 %conv1, ptr @globalVal, align 1
829  ret void
830}
831
832define dso_local void @setnbc55(i32 %a) {
833; CHECK-LE-LABEL: setnbc55:
834; CHECK-LE:       # %bb.0: # %entry
835; CHECK-LE-NEXT:    cmpwi r3, 0
836; CHECK-LE-NEXT:    setnbc r3, gt
837; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
838; CHECK-LE-NEXT:    blr
839;
840; CHECK-BE-LABEL: setnbc55:
841; CHECK-BE:       # %bb.0: # %entry
842; CHECK-BE-NEXT:    cmpwi r3, 0
843; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
844; CHECK-BE-NEXT:    setnbc r3, gt
845; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
846; CHECK-BE-NEXT:    blr
847entry:
848  %cmp = icmp sgt i32 %a, 0
849  %conv1 = sext i1 %cmp to i32
850  store i32 %conv1, ptr @globalVal2, align 4
851  ret void
852}
853
854define dso_local void @setnbc56(i64 %a) {
855; CHECK-LE-LABEL: setnbc56:
856; CHECK-LE:       # %bb.0: # %entry
857; CHECK-LE-NEXT:    cmpdi r3, 0
858; CHECK-LE-NEXT:    setnbc r3, gt
859; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
860; CHECK-LE-NEXT:    blr
861;
862; CHECK-BE-LABEL: setnbc56:
863; CHECK-BE:       # %bb.0: # %entry
864; CHECK-BE-NEXT:    cmpdi r3, 0
865; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
866; CHECK-BE-NEXT:    setnbc r3, gt
867; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
868; CHECK-BE-NEXT:    blr
869entry:
870  %cmp = icmp sgt i64 %a, 0
871  %conv1 = sext i1 %cmp to i64
872  store i64 %conv1, ptr @globalVal3, align 8
873  ret void
874}
875
876define dso_local void @setnbc57(i16 %a) {
877; CHECK-LE-LABEL: setnbc57:
878; CHECK-LE:       # %bb.0: # %entry
879; CHECK-LE-NEXT:    extsh. r3, r3
880; CHECK-LE-NEXT:    setnbc r3, gt
881; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
882; CHECK-LE-NEXT:    blr
883;
884; CHECK-BE-LABEL: setnbc57:
885; CHECK-BE:       # %bb.0: # %entry
886; CHECK-BE-NEXT:    extsh. r3, r3
887; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
888; CHECK-BE-NEXT:    setnbc r3, gt
889; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
890; CHECK-BE-NEXT:    blr
891entry:
892  %cmp = icmp sgt i16 %a, 0
893  %conv1 = sext i1 %cmp to i16
894  store i16 %conv1, ptr @globalVal4, align 2
895  ret void
896}
897
898define dso_local signext i32 @setnbc58(i8 %a) {
899; CHECK-LABEL: setnbc58:
900; CHECK:       # %bb.0: # %entry
901; CHECK-NEXT:    andi. r3, r3, 255
902; CHECK-NEXT:    setnbc r3, eq
903; CHECK-NEXT:    blr
904entry:
905  %cmp = icmp eq i8 %a, 0
906  %conv = sext i1 %cmp to i32
907  ret i32 %conv
908}
909
910define dso_local signext i32 @setnbc59(i32 %a) {
911; CHECK-LABEL: setnbc59:
912; CHECK:       # %bb.0: # %entry
913; CHECK-NEXT:    cmpwi r3, 0
914; CHECK-NEXT:    setnbc r3, eq
915; CHECK-NEXT:    blr
916entry:
917  %cmp = icmp eq i32 %a, 0
918  %conv = sext i1 %cmp to i32
919  ret i32 %conv
920}
921
922define dso_local signext i32 @setnbc60(i64 %a) {
923; CHECK-LABEL: setnbc60:
924; CHECK:       # %bb.0: # %entry
925; CHECK-NEXT:    cmpdi r3, 0
926; CHECK-NEXT:    setnbc r3, eq
927; CHECK-NEXT:    blr
928entry:
929  %cmp = icmp eq i64 %a, 0
930  %conv = sext i1 %cmp to i32
931  ret i32 %conv
932}
933
934define dso_local signext i32 @setnbc61(i16 %a) {
935; CHECK-LABEL: setnbc61:
936; CHECK:       # %bb.0: # %entry
937; CHECK-NEXT:    andi. r3, r3, 65535
938; CHECK-NEXT:    setnbc r3, eq
939; CHECK-NEXT:    blr
940entry:
941  %cmp = icmp eq i16 %a, 0
942  %conv = sext i1 %cmp to i32
943  ret i32 %conv
944}
945
946define signext i64 @setnbc62(i8 %a) {
947; CHECK-LABEL: setnbc62:
948; CHECK:       # %bb.0: # %entry
949; CHECK-NEXT:    andi. r3, r3, 255
950; CHECK-NEXT:    setnbc r3, eq
951; CHECK-NEXT:    blr
952entry:
953  %cmp = icmp eq i8 %a, 0
954  %conv = sext i1 %cmp to i64
955  ret i64 %conv
956}
957
958define signext i64 @setnbc63(i32 %a) {
959; CHECK-LABEL: setnbc63:
960; CHECK:       # %bb.0: # %entry
961; CHECK-NEXT:    cmpwi r3, 0
962; CHECK-NEXT:    setnbc r3, eq
963; CHECK-NEXT:    blr
964entry:
965  %cmp = icmp eq i32 %a, 0
966  %conv = sext i1 %cmp to i64
967  ret i64 %conv
968}
969
970define signext i64 @setnbc64(i64 %a) {
971; CHECK-LABEL: setnbc64:
972; CHECK:       # %bb.0: # %entry
973; CHECK-NEXT:    cmpdi r3, 0
974; CHECK-NEXT:    setnbc r3, eq
975; CHECK-NEXT:    blr
976entry:
977  %cmp = icmp eq i64 %a, 0
978  %conv = sext i1 %cmp to i64
979  ret i64 %conv
980}
981
982define signext i64 @setnbc65(i16 %a) {
983; CHECK-LABEL: setnbc65:
984; CHECK:       # %bb.0: # %entry
985; CHECK-NEXT:    andi. r3, r3, 65535
986; CHECK-NEXT:    setnbc r3, eq
987; CHECK-NEXT:    blr
988entry:
989  %cmp = icmp eq i16 %a, 0
990  %conv = sext i1 %cmp to i64
991  ret i64 %conv
992}
993
994define dso_local void @setnbc66(i8 %a) {
995; CHECK-LE-LABEL: setnbc66:
996; CHECK-LE:       # %bb.0: # %entry
997; CHECK-LE-NEXT:    andi. r3, r3, 255
998; CHECK-LE-NEXT:    setnbc r3, eq
999; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
1000; CHECK-LE-NEXT:    blr
1001;
1002; CHECK-BE-LABEL: setnbc66:
1003; CHECK-BE:       # %bb.0: # %entry
1004; CHECK-BE-NEXT:    andi. r3, r3, 255
1005; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
1006; CHECK-BE-NEXT:    setnbc r3, eq
1007; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
1008; CHECK-BE-NEXT:    blr
1009entry:
1010  %cmp = icmp eq i8 %a, 0
1011  %conv1 = sext i1 %cmp to i8
1012  store i8 %conv1, ptr @globalVal, align 1
1013  ret void
1014}
1015
1016define dso_local void @setnbc67(i32 %a) {
1017; CHECK-LE-LABEL: setnbc67:
1018; CHECK-LE:       # %bb.0: # %entry
1019; CHECK-LE-NEXT:    cmpwi r3, 0
1020; CHECK-LE-NEXT:    setnbc r3, eq
1021; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
1022; CHECK-LE-NEXT:    blr
1023;
1024; CHECK-BE-LABEL: setnbc67:
1025; CHECK-BE:       # %bb.0: # %entry
1026; CHECK-BE-NEXT:    cmpwi r3, 0
1027; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
1028; CHECK-BE-NEXT:    setnbc r3, eq
1029; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
1030; CHECK-BE-NEXT:    blr
1031entry:
1032  %cmp = icmp eq i32 %a, 0
1033  %conv1 = sext i1 %cmp to i32
1034  store i32 %conv1, ptr @globalVal2, align 4
1035  ret void
1036}
1037
1038define dso_local void @setnbc68(i64 %a) {
1039; CHECK-LE-LABEL: setnbc68:
1040; CHECK-LE:       # %bb.0: # %entry
1041; CHECK-LE-NEXT:    cmpdi r3, 0
1042; CHECK-LE-NEXT:    setnbc r3, eq
1043; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
1044; CHECK-LE-NEXT:    blr
1045;
1046; CHECK-BE-LABEL: setnbc68:
1047; CHECK-BE:       # %bb.0: # %entry
1048; CHECK-BE-NEXT:    cmpdi r3, 0
1049; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
1050; CHECK-BE-NEXT:    setnbc r3, eq
1051; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
1052; CHECK-BE-NEXT:    blr
1053entry:
1054  %cmp = icmp eq i64 %a, 0
1055  %conv1 = sext i1 %cmp to i64
1056  store i64 %conv1, ptr @globalVal3, align 8
1057  ret void
1058}
1059
1060define dso_local void @setnbc69(i16 %a) {
1061; CHECK-LE-LABEL: setnbc69:
1062; CHECK-LE:       # %bb.0: # %entry
1063; CHECK-LE-NEXT:    andi. r3, r3, 65535
1064; CHECK-LE-NEXT:    setnbc r3, eq
1065; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
1066; CHECK-LE-NEXT:    blr
1067;
1068; CHECK-BE-LABEL: setnbc69:
1069; CHECK-BE:       # %bb.0: # %entry
1070; CHECK-BE-NEXT:    andi. r3, r3, 65535
1071; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
1072; CHECK-BE-NEXT:    setnbc r3, eq
1073; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
1074; CHECK-BE-NEXT:    blr
1075entry:
1076  %cmp = icmp eq i16 %a, 0
1077  %conv1 = sext i1 %cmp to i16
1078  store i16 %conv1, ptr @globalVal4, align 2
1079  ret void
1080}
1081
1082