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(i32 signext %a, i32 signext %b) {
21; CHECK-LABEL: setnbc1:
22; CHECK:       # %bb.0: # %entry
23; CHECK-NEXT:    cmpw r3, r4
24; CHECK-NEXT:    setnbc r3, lt
25; CHECK-NEXT:    blr
26entry:
27  %cmp = icmp slt i32 %a, %b
28  %conv = sext i1 %cmp to i32
29  ret i32 %conv
30}
31
32define dso_local signext i32 @setnbc2(i32 signext %a, i32 signext %b) {
33; CHECK-LABEL: setnbc2:
34; CHECK:       # %bb.0: # %entry
35; CHECK-NEXT:    cmpw r3, r4
36; CHECK-NEXT:    setnbc r3, eq
37; CHECK-NEXT:    blr
38entry:
39  %cmp = icmp eq i32 %a, %b
40  %conv = sext i1 %cmp to i32
41  ret i32 %conv
42}
43
44define dso_local signext i32 @setnbc3(i32 signext %a, i32 signext %b) {
45; CHECK-LABEL: setnbc3:
46; CHECK:       # %bb.0: # %entry
47; CHECK-NEXT:    cmpw r3, r4
48; CHECK-NEXT:    setnbc r3, gt
49; CHECK-NEXT:    blr
50entry:
51  %cmp = icmp sgt i32 %a, %b
52  %conv = sext i1 %cmp to i32
53  ret i32 %conv
54}
55
56define dso_local signext i32 @setnbc4(i8 signext %a, i8 signext %b) {
57; CHECK-LABEL: setnbc4:
58; CHECK:       # %bb.0: # %entry
59; CHECK-NEXT:    cmpw r3, r4
60; CHECK-NEXT:    setnbc r3, eq
61; CHECK-NEXT:    blr
62entry:
63  %cmp = icmp eq i8 %a, %b
64  %conv = sext i1 %cmp to i32
65  ret i32 %conv
66}
67
68; function attrs: norecurse nounwind
69define dso_local void @setnbc5(i8 signext %a, i8 signext %b) {
70; CHECK-LE-LABEL: setnbc5:
71; CHECK-LE:       # %bb.0: # %entry
72; CHECK-LE-NEXT:    cmpw r3, r4
73; CHECK-LE-NEXT:    setnbc r3, eq
74; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
75; CHECK-LE-NEXT:    blr
76;
77; CHECK-BE-LABEL: setnbc5:
78; CHECK-BE:       # %bb.0: # %entry
79; CHECK-BE-NEXT:    cmpw r3, r4
80; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
81; CHECK-BE-NEXT:    setnbc r3, eq
82; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
83; CHECK-BE-NEXT:    blr
84entry:
85  %cmp = icmp eq i8 %a, %b
86  %conv3 = sext i1 %cmp to i8
87  store i8 %conv3, i8* @globalVal, align 1
88  ret void
89}
90
91define dso_local void @setnbc6(i32 signext %a, i32 signext %b) {
92; CHECK-LE-LABEL: setnbc6:
93; CHECK-LE:       # %bb.0: # %entry
94; CHECK-LE-NEXT:    cmpw r3, r4
95; CHECK-LE-NEXT:    setnbc r3, eq
96; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
97; CHECK-LE-NEXT:    blr
98;
99; CHECK-BE-LABEL: setnbc6:
100; CHECK-BE:       # %bb.0: # %entry
101; CHECK-BE-NEXT:    cmpw r3, r4
102; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
103; CHECK-BE-NEXT:    setnbc r3, eq
104; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
105; CHECK-BE-NEXT:    blr
106entry:
107  %cmp = icmp eq i32 %a, %b
108  %conv = sext i1 %cmp to i32
109  store i32 %conv, i32* @globalVal2, align 4
110  ret void
111}
112
113define dso_local signext i32 @setnbc7(i64 %a, i64 %b) {
114; CHECK-LABEL: setnbc7:
115; CHECK:       # %bb.0: # %entry
116; CHECK-NEXT:    cmpd r3, r4
117; CHECK-NEXT:    setnbc r3, eq
118; CHECK-NEXT:    blr
119entry:
120  %cmp = icmp eq i64 %a, %b
121  %conv = sext i1 %cmp to i32
122  ret i32 %conv
123}
124
125define signext i64 @setnbc8(i64 %a, i64 %b) {
126; CHECK-LABEL: setnbc8:
127; CHECK:       # %bb.0: # %entry
128; CHECK-NEXT:    cmpd r3, r4
129; CHECK-NEXT:    setnbc r3, eq
130; CHECK-NEXT:    blr
131entry:
132  %cmp = icmp eq i64 %a, %b
133  %conv = sext i1 %cmp to i64
134  ret i64 %conv
135}
136
137define dso_local void @setnbc9(i64 %a, i64 %b) {
138; CHECK-LE-LABEL: setnbc9:
139; CHECK-LE:       # %bb.0: # %entry
140; CHECK-LE-NEXT:    cmpd r3, r4
141; CHECK-LE-NEXT:    setnbc r3, eq
142; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
143; CHECK-LE-NEXT:    blr
144;
145; CHECK-BE-LABEL: setnbc9:
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:    setnbc r3, eq
150; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
151; CHECK-BE-NEXT:    blr
152entry:
153  %cmp = icmp eq i64 %a, %b
154  %conv1 = sext i1 %cmp to i64
155  store i64 %conv1, i64* @globalVal3, align 8
156  ret void
157}
158
159define dso_local signext i32 @setnbc10(i16 signext %a, i16 signext %b) {
160; CHECK-LABEL: setnbc10:
161; CHECK:       # %bb.0: # %entry
162; CHECK-NEXT:    cmpw r3, r4
163; CHECK-NEXT:    setnbc r3, eq
164; CHECK-NEXT:    blr
165entry:
166  %cmp = icmp eq i16 %a, %b
167  %conv = sext i1 %cmp to i32
168  ret i32 %conv
169}
170
171define dso_local void @setnbc11(i16 signext %a, i16 signext %b) {
172; CHECK-LE-LABEL: setnbc11:
173; CHECK-LE:       # %bb.0: # %entry
174; CHECK-LE-NEXT:    cmpw r3, r4
175; CHECK-LE-NEXT:    setnbc r3, eq
176; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
177; CHECK-LE-NEXT:    blr
178;
179; CHECK-BE-LABEL: setnbc11:
180; CHECK-BE:       # %bb.0: # %entry
181; CHECK-BE-NEXT:    cmpw r3, r4
182; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
183; CHECK-BE-NEXT:    setnbc r3, eq
184; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
185; CHECK-BE-NEXT:    blr
186entry:
187  %cmp = icmp eq i16 %a, %b
188  %conv3 = sext i1 %cmp to i16
189  store i16 %conv3, i16* @globalVal4, align 2
190  ret void
191}
192
193define dso_local signext i32 @setnbc12(i8 zeroext %a, i8 zeroext %b) {
194; CHECK-LABEL: setnbc12:
195; CHECK:       # %bb.0: # %entry
196; CHECK-NEXT:    cmpw r3, r4
197; CHECK-NEXT:    setnbc r3, eq
198; CHECK-NEXT:    blr
199entry:
200  %cmp = icmp eq i8 %a, %b
201  %conv = sext i1 %cmp to i32
202  ret i32 %conv
203}
204
205define dso_local void @setnbc13(i8 zeroext %a, i8 zeroext %b) {
206; CHECK-LE-LABEL: setnbc13:
207; CHECK-LE:       # %bb.0: # %entry
208; CHECK-LE-NEXT:    cmpw r3, r4
209; CHECK-LE-NEXT:    setnbc r3, eq
210; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
211; CHECK-LE-NEXT:    blr
212;
213; CHECK-BE-LABEL: setnbc13:
214; CHECK-BE:       # %bb.0: # %entry
215; CHECK-BE-NEXT:    cmpw r3, r4
216; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
217; CHECK-BE-NEXT:    setnbc r3, eq
218; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
219; CHECK-BE-NEXT:    blr
220entry:
221  %cmp = icmp eq i8 %a, %b
222  %conv3 = sext i1 %cmp to i8
223  store i8 %conv3, i8* @globalVal, align 1
224  ret void
225}
226
227define dso_local signext i32 @setnbc14(i32 zeroext %a, i32 zeroext %b) {
228; CHECK-LABEL: setnbc14:
229; CHECK:       # %bb.0: # %entry
230; CHECK-NEXT:    cmpw r3, r4
231; CHECK-NEXT:    setnbc r3, eq
232; CHECK-NEXT:    blr
233entry:
234  %cmp = icmp eq i32 %a, %b
235  %conv = sext i1 %cmp to i32
236  ret i32 %conv
237}
238
239define dso_local void @setnbc15(i32 zeroext %a, i32 zeroext %b) {
240; CHECK-LE-LABEL: setnbc15:
241; CHECK-LE:       # %bb.0: # %entry
242; CHECK-LE-NEXT:    cmpw r3, r4
243; CHECK-LE-NEXT:    setnbc r3, eq
244; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
245; CHECK-LE-NEXT:    blr
246;
247; CHECK-BE-LABEL: setnbc15:
248; CHECK-BE:       # %bb.0: # %entry
249; CHECK-BE-NEXT:    cmpw r3, r4
250; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
251; CHECK-BE-NEXT:    setnbc r3, eq
252; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
253; CHECK-BE-NEXT:    blr
254entry:
255  %cmp = icmp eq i32 %a, %b
256  %conv = sext i1 %cmp to i32
257  store i32 %conv, i32* @globalVal2, align 4
258  ret void
259}
260
261define dso_local signext i32 @setnbc16(i16 zeroext %a, i16 zeroext %b) {
262; CHECK-LABEL: setnbc16:
263; CHECK:       # %bb.0: # %entry
264; CHECK-NEXT:    cmpw r3, r4
265; CHECK-NEXT:    setnbc r3, eq
266; CHECK-NEXT:    blr
267entry:
268  %cmp = icmp eq i16 %a, %b
269  %conv = sext i1 %cmp to i32
270  ret i32 %conv
271}
272
273define dso_local void @setnbc17(i16 zeroext %a, i16 zeroext %b) {
274; CHECK-LE-LABEL: setnbc17:
275; CHECK-LE:       # %bb.0: # %entry
276; CHECK-LE-NEXT:    cmpw r3, r4
277; CHECK-LE-NEXT:    setnbc r3, eq
278; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
279; CHECK-LE-NEXT:    blr
280;
281; CHECK-BE-LABEL: setnbc17:
282; CHECK-BE:       # %bb.0: # %entry
283; CHECK-BE-NEXT:    cmpw r3, r4
284; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
285; CHECK-BE-NEXT:    setnbc r3, eq
286; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
287; CHECK-BE-NEXT:    blr
288entry:
289  %cmp = icmp eq i16 %a, %b
290  %conv3 = sext i1 %cmp to i16
291  store i16 %conv3, i16* @globalVal4, align 2
292  ret void
293}
294
295define dso_local signext i32 @setnbc18(i8 signext %a, i8 signext %b) {
296; CHECK-LABEL: setnbc18:
297; CHECK:       # %bb.0: # %entry
298; CHECK-NEXT:    cmpw r3, r4
299; CHECK-NEXT:    setnbc r3, gt
300; CHECK-NEXT:    blr
301entry:
302  %cmp = icmp sgt i8 %a, %b
303  %sub = sext i1 %cmp to i32
304  ret i32 %sub
305}
306
307define dso_local void @setnbc19(i8 signext %a, i8 signext %b) {
308; CHECK-LE-LABEL: setnbc19:
309; CHECK-LE:       # %bb.0: # %entry
310; CHECK-LE-NEXT:    cmpw r3, r4
311; CHECK-LE-NEXT:    setnbc r3, gt
312; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
313; CHECK-LE-NEXT:    blr
314;
315; CHECK-BE-LABEL: setnbc19:
316; CHECK-BE:       # %bb.0: # %entry
317; CHECK-BE-NEXT:    cmpw r3, r4
318; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
319; CHECK-BE-NEXT:    setnbc r3, gt
320; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
321; CHECK-BE-NEXT:    blr
322entry:
323  %cmp = icmp sgt i8 %a, %b
324  %conv3 = sext i1 %cmp to i8
325  store i8 %conv3, i8* @globalVal, align 1
326  ret void
327}
328
329define dso_local void @setnbc20(i32 signext %a, i32 signext %b) {
330; CHECK-LE-LABEL: setnbc20:
331; CHECK-LE:       # %bb.0: # %entry
332; CHECK-LE-NEXT:    cmpw r3, r4
333; CHECK-LE-NEXT:    setnbc r3, gt
334; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
335; CHECK-LE-NEXT:    blr
336;
337; CHECK-BE-LABEL: setnbc20:
338; CHECK-BE:       # %bb.0: # %entry
339; CHECK-BE-NEXT:    cmpw r3, r4
340; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
341; CHECK-BE-NEXT:    setnbc r3, gt
342; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
343; CHECK-BE-NEXT:    blr
344entry:
345  %cmp = icmp sgt i32 %a, %b
346  %sub = sext i1 %cmp to i32
347  store i32 %sub, i32* @globalVal2, align 4
348  ret void
349}
350
351define dso_local signext i32 @setnbc21(i64 %a, i64 %b) {
352; CHECK-LABEL: setnbc21:
353; CHECK:       # %bb.0: # %entry
354; CHECK-NEXT:    cmpd r3, r4
355; CHECK-NEXT:    setnbc r3, gt
356; CHECK-NEXT:    blr
357entry:
358  %cmp = icmp sgt i64 %a, %b
359  %sub = sext i1 %cmp to i32
360  ret i32 %sub
361}
362
363define dso_local void @setnbc22(i64 %a, i64 %b) {
364; CHECK-LE-LABEL: setnbc22:
365; CHECK-LE:       # %bb.0: # %entry
366; CHECK-LE-NEXT:    cmpd r3, r4
367; CHECK-LE-NEXT:    setnbc r3, gt
368; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
369; CHECK-LE-NEXT:    blr
370;
371; CHECK-BE-LABEL: setnbc22:
372; CHECK-BE:       # %bb.0: # %entry
373; CHECK-BE-NEXT:    cmpd r3, r4
374; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
375; CHECK-BE-NEXT:    setnbc r3, gt
376; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
377; CHECK-BE-NEXT:    blr
378entry:
379  %cmp = icmp sgt i64 %a, %b
380  %conv1 = sext i1 %cmp to i64
381  store i64 %conv1, i64* @globalVal3, align 8
382  ret void
383}
384
385define dso_local signext i32 @setnbc23(i16 signext %a, i16 signext %b) {
386; CHECK-LABEL: setnbc23:
387; CHECK:       # %bb.0: # %entry
388; CHECK-NEXT:    cmpw r3, r4
389; CHECK-NEXT:    setnbc r3, gt
390; CHECK-NEXT:    blr
391entry:
392  %cmp = icmp sgt i16 %a, %b
393  %sub = sext i1 %cmp to i32
394  ret i32 %sub
395}
396
397define dso_local void @setnbc24(i16 signext %a, i16 signext %b) {
398; CHECK-LE-LABEL: setnbc24:
399; CHECK-LE:       # %bb.0: # %entry
400; CHECK-LE-NEXT:    cmpw r3, r4
401; CHECK-LE-NEXT:    setnbc r3, gt
402; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
403; CHECK-LE-NEXT:    blr
404;
405; CHECK-BE-LABEL: setnbc24:
406; CHECK-BE:       # %bb.0: # %entry
407; CHECK-BE-NEXT:    cmpw r3, r4
408; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
409; CHECK-BE-NEXT:    setnbc r3, gt
410; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
411; CHECK-BE-NEXT:    blr
412entry:
413  %cmp = icmp sgt i16 %a, %b
414  %conv3 = sext i1 %cmp to i16
415  store i16 %conv3, i16* @globalVal4, align 2
416  ret void
417}
418
419define dso_local signext i32 @setnbc25(i8 zeroext %a, i8 zeroext %b) {
420; CHECK-LABEL: setnbc25:
421; CHECK:       # %bb.0: # %entry
422; CHECK-NEXT:    cmplw r3, r4
423; CHECK-NEXT:    setnbc r3, gt
424; CHECK-NEXT:    blr
425entry:
426  %cmp = icmp ugt i8 %a, %b
427  %sub = sext i1 %cmp to i32
428  ret i32 %sub
429}
430
431define dso_local void @setnbc26(i8 zeroext %a, i8 zeroext %b) {
432; CHECK-LE-LABEL: setnbc26:
433; CHECK-LE:       # %bb.0: # %entry
434; CHECK-LE-NEXT:    cmplw r3, r4
435; CHECK-LE-NEXT:    setnbc r3, gt
436; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
437; CHECK-LE-NEXT:    blr
438;
439; CHECK-BE-LABEL: setnbc26:
440; CHECK-BE:       # %bb.0: # %entry
441; CHECK-BE-NEXT:    cmplw r3, r4
442; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
443; CHECK-BE-NEXT:    setnbc r3, gt
444; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
445; CHECK-BE-NEXT:    blr
446entry:
447  %cmp = icmp ugt i8 %a, %b
448  %conv3 = sext i1 %cmp to i8
449  store i8 %conv3, i8* @globalVal, align 1
450  ret void
451}
452
453define dso_local signext i32 @setnbc27(i32 zeroext %a, i32 zeroext %b) {
454; CHECK-LABEL: setnbc27:
455; CHECK:       # %bb.0: # %entry
456; CHECK-NEXT:    cmplw r3, r4
457; CHECK-NEXT:    setnbc r3, gt
458; CHECK-NEXT:    blr
459entry:
460  %cmp = icmp ugt i32 %a, %b
461  %sub = sext i1 %cmp to i32
462  ret i32 %sub
463}
464
465define dso_local void @setnbc28(i32 zeroext %a, i32 zeroext %b) {
466; CHECK-LE-LABEL: setnbc28:
467; CHECK-LE:       # %bb.0: # %entry
468; CHECK-LE-NEXT:    cmplw r3, r4
469; CHECK-LE-NEXT:    setnbc r3, gt
470; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
471; CHECK-LE-NEXT:    blr
472;
473; CHECK-BE-LABEL: setnbc28:
474; CHECK-BE:       # %bb.0: # %entry
475; CHECK-BE-NEXT:    cmplw r3, r4
476; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
477; CHECK-BE-NEXT:    setnbc r3, gt
478; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
479; CHECK-BE-NEXT:    blr
480entry:
481  %cmp = icmp ugt i32 %a, %b
482  %sub = sext i1 %cmp to i32
483  store i32 %sub, i32* @globalVal2, align 4
484  ret void
485}
486
487define dso_local signext i32 @setnbc29(i16 zeroext %a, i16 zeroext %b) {
488; CHECK-LABEL: setnbc29:
489; CHECK:       # %bb.0: # %entry
490; CHECK-NEXT:    cmplw r3, r4
491; CHECK-NEXT:    setnbc r3, gt
492; CHECK-NEXT:    blr
493entry:
494  %cmp = icmp ugt i16 %a, %b
495  %sub = sext i1 %cmp to i32
496  ret i32 %sub
497}
498
499define dso_local void @setnbc30(i16 zeroext %a, i16 zeroext %b) {
500; CHECK-LE-LABEL: setnbc30:
501; CHECK-LE:       # %bb.0: # %entry
502; CHECK-LE-NEXT:    cmplw r3, r4
503; CHECK-LE-NEXT:    setnbc r3, gt
504; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
505; CHECK-LE-NEXT:    blr
506;
507; CHECK-BE-LABEL: setnbc30:
508; CHECK-BE:       # %bb.0: # %entry
509; CHECK-BE-NEXT:    cmplw r3, r4
510; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
511; CHECK-BE-NEXT:    setnbc r3, gt
512; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
513; CHECK-BE-NEXT:    blr
514entry:
515  %cmp = icmp ugt i16 %a, %b
516  %conv3 = sext i1 %cmp to i16
517  store i16 %conv3, i16* @globalVal4, align 2
518  ret void
519}
520
521define dso_local signext i32 @setnbc31(i8 signext %a, i8 signext %b) {
522; CHECK-LABEL: setnbc31:
523; CHECK:       # %bb.0: # %entry
524; CHECK-NEXT:    cmpw r3, r4
525; CHECK-NEXT:    setnbc r3, lt
526; CHECK-NEXT:    blr
527entry:
528  %cmp = icmp slt i8 %a, %b
529  %sub = sext i1 %cmp to i32
530  ret i32 %sub
531}
532
533define dso_local void @setnbc32(i8 signext %a, i8 signext %b) {
534; CHECK-LE-LABEL: setnbc32:
535; CHECK-LE:       # %bb.0: # %entry
536; CHECK-LE-NEXT:    cmpw r3, r4
537; CHECK-LE-NEXT:    setnbc r3, lt
538; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
539; CHECK-LE-NEXT:    blr
540;
541; CHECK-BE-LABEL: setnbc32:
542; CHECK-BE:       # %bb.0: # %entry
543; CHECK-BE-NEXT:    cmpw r3, r4
544; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
545; CHECK-BE-NEXT:    setnbc r3, lt
546; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
547; CHECK-BE-NEXT:    blr
548entry:
549  %cmp = icmp slt i8 %a, %b
550  %conv3 = sext i1 %cmp to i8
551  store i8 %conv3, i8* @globalVal, align 1
552  ret void
553}
554
555define dso_local void @setnbc33(i32 signext %a, i32 signext %b) {
556; CHECK-LE-LABEL: setnbc33:
557; CHECK-LE:       # %bb.0: # %entry
558; CHECK-LE-NEXT:    cmpw r3, r4
559; CHECK-LE-NEXT:    setnbc r3, lt
560; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
561; CHECK-LE-NEXT:    blr
562;
563; CHECK-BE-LABEL: setnbc33:
564; CHECK-BE:       # %bb.0: # %entry
565; CHECK-BE-NEXT:    cmpw r3, r4
566; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
567; CHECK-BE-NEXT:    setnbc r3, lt
568; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
569; CHECK-BE-NEXT:    blr
570entry:
571  %cmp = icmp slt i32 %a, %b
572  %sub = sext i1 %cmp to i32
573  store i32 %sub, i32* @globalVal2, align 4
574  ret void
575}
576
577define dso_local signext i32 @setnbc34(i64 %a, i64 %b) {
578; CHECK-LABEL: setnbc34:
579; CHECK:       # %bb.0: # %entry
580; CHECK-NEXT:    cmpd r3, r4
581; CHECK-NEXT:    setnbc r3, lt
582; CHECK-NEXT:    blr
583entry:
584  %cmp = icmp slt i64 %a, %b
585  %sub = sext i1 %cmp to i32
586  ret i32 %sub
587}
588
589define signext i64 @setnbc35(i64 %a, i64 %b) {
590; CHECK-LABEL: setnbc35:
591; CHECK:       # %bb.0: # %entry
592; CHECK-NEXT:    cmpd r3, r4
593; CHECK-NEXT:    setnbc r3, lt
594; CHECK-NEXT:    blr
595entry:
596  %cmp = icmp slt i64 %a, %b
597  %sub = sext i1 %cmp to i64
598  ret i64 %sub
599}
600
601define dso_local void @setnbc36(i64 %a, i64 %b) {
602; CHECK-LE-LABEL: setnbc36:
603; CHECK-LE:       # %bb.0: # %entry
604; CHECK-LE-NEXT:    cmpd r3, r4
605; CHECK-LE-NEXT:    setnbc r3, lt
606; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
607; CHECK-LE-NEXT:    blr
608;
609; CHECK-BE-LABEL: setnbc36:
610; CHECK-BE:       # %bb.0: # %entry
611; CHECK-BE-NEXT:    cmpd r3, r4
612; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
613; CHECK-BE-NEXT:    setnbc r3, lt
614; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
615; CHECK-BE-NEXT:    blr
616entry:
617  %cmp = icmp slt i64 %a, %b
618  %conv1 = sext i1 %cmp to i64
619  store i64 %conv1, i64* @globalVal3, align 8
620  ret void
621}
622
623define dso_local signext i32 @setnbc37(i16 signext %a, i16 signext %b) {
624; CHECK-LABEL: setnbc37:
625; CHECK:       # %bb.0: # %entry
626; CHECK-NEXT:    cmpw r3, r4
627; CHECK-NEXT:    setnbc r3, lt
628; CHECK-NEXT:    blr
629entry:
630  %cmp = icmp slt i16 %a, %b
631  %sub = sext i1 %cmp to i32
632  ret i32 %sub
633}
634
635define dso_local void @setnbc38(i16 signext %a, i16 signext %b) {
636; CHECK-LE-LABEL: setnbc38:
637; CHECK-LE:       # %bb.0: # %entry
638; CHECK-LE-NEXT:    cmpw r3, r4
639; CHECK-LE-NEXT:    setnbc r3, lt
640; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
641; CHECK-LE-NEXT:    blr
642;
643; CHECK-BE-LABEL: setnbc38:
644; CHECK-BE:       # %bb.0: # %entry
645; CHECK-BE-NEXT:    cmpw r3, r4
646; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
647; CHECK-BE-NEXT:    setnbc r3, lt
648; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
649; CHECK-BE-NEXT:    blr
650entry:
651  %cmp = icmp slt i16 %a, %b
652  %conv3 = sext i1 %cmp to i16
653  store i16 %conv3, i16* @globalVal4, align 2
654  ret void
655}
656
657define dso_local signext i32 @setnbc39(i8 zeroext %a, i8 zeroext %b) {
658; CHECK-LABEL: setnbc39:
659; CHECK:       # %bb.0: # %entry
660; CHECK-NEXT:    cmplw r3, r4
661; CHECK-NEXT:    setnbc r3, lt
662; CHECK-NEXT:    blr
663entry:
664  %cmp = icmp ult i8 %a, %b
665  %sub = sext i1 %cmp to i32
666  ret i32 %sub
667}
668
669define dso_local void @setnbc40(i8 zeroext %a, i8 zeroext %b) {
670; CHECK-LE-LABEL: setnbc40:
671; CHECK-LE:       # %bb.0: # %entry
672; CHECK-LE-NEXT:    cmplw r3, r4
673; CHECK-LE-NEXT:    setnbc r3, lt
674; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
675; CHECK-LE-NEXT:    blr
676;
677; CHECK-BE-LABEL: setnbc40:
678; CHECK-BE:       # %bb.0: # %entry
679; CHECK-BE-NEXT:    cmplw r3, r4
680; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
681; CHECK-BE-NEXT:    setnbc r3, lt
682; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
683; CHECK-BE-NEXT:    blr
684entry:
685  %cmp = icmp ult i8 %a, %b
686  %conv3 = sext i1 %cmp to i8
687  store i8 %conv3, i8* @globalVal, align 1
688  ret void
689}
690
691define dso_local signext i32 @setnbc41(i32 zeroext %a, i32 zeroext %b) {
692; CHECK-LABEL: setnbc41:
693; CHECK:       # %bb.0: # %entry
694; CHECK-NEXT:    cmplw r3, r4
695; CHECK-NEXT:    setnbc r3, lt
696; CHECK-NEXT:    blr
697entry:
698  %cmp = icmp ult i32 %a, %b
699  %sub = sext i1 %cmp to i32
700  ret i32 %sub
701}
702
703define dso_local void @setnbc42(i32 zeroext %a, i32 zeroext %b) {
704; CHECK-LE-LABEL: setnbc42:
705; CHECK-LE:       # %bb.0: # %entry
706; CHECK-LE-NEXT:    cmplw r3, r4
707; CHECK-LE-NEXT:    setnbc r3, lt
708; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
709; CHECK-LE-NEXT:    blr
710;
711; CHECK-BE-LABEL: setnbc42:
712; CHECK-BE:       # %bb.0: # %entry
713; CHECK-BE-NEXT:    cmplw r3, r4
714; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
715; CHECK-BE-NEXT:    setnbc r3, lt
716; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
717; CHECK-BE-NEXT:    blr
718entry:
719  %cmp = icmp ult i32 %a, %b
720  %sub = sext i1 %cmp to i32
721  store i32 %sub, i32* @globalVal2, align 4
722  ret void
723}
724
725define dso_local signext i32 @setnbc43(i16 zeroext %a, i16 zeroext %b) {
726; CHECK-LABEL: setnbc43:
727; CHECK:       # %bb.0: # %entry
728; CHECK-NEXT:    cmplw r3, r4
729; CHECK-NEXT:    setnbc r3, lt
730; CHECK-NEXT:    blr
731entry:
732  %cmp = icmp ult i16 %a, %b
733  %sub = sext i1 %cmp to i32
734  ret i32 %sub
735}
736
737define dso_local void @setnbc44(i16 zeroext %a, i16 zeroext %b) {
738; CHECK-LE-LABEL: setnbc44:
739; CHECK-LE:       # %bb.0: # %entry
740; CHECK-LE-NEXT:    cmplw r3, r4
741; CHECK-LE-NEXT:    setnbc r3, lt
742; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
743; CHECK-LE-NEXT:    blr
744;
745; CHECK-BE-LABEL: setnbc44:
746; CHECK-BE:       # %bb.0: # %entry
747; CHECK-BE-NEXT:    cmplw r3, r4
748; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
749; CHECK-BE-NEXT:    setnbc r3, lt
750; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
751; CHECK-BE-NEXT:    blr
752entry:
753  %cmp = icmp ult i16 %a, %b
754  %conv3 = sext i1 %cmp to i16
755  store i16 %conv3, i16* @globalVal4, align 2
756  ret void
757}
758
759define i64 @setnbc45(i8 signext %a, i8 signext %b) {
760; CHECK-LABEL: setnbc45:
761; CHECK:       # %bb.0: # %entry
762; CHECK-NEXT:    cmpw r3, r4
763; CHECK-NEXT:    setnbc r3, eq
764; CHECK-NEXT:    blr
765entry:
766  %cmp = icmp eq i8 %a, %b
767  %conv3 = sext i1 %cmp to i64
768  ret i64 %conv3
769}
770
771define dso_local void @setnbc46(i8 signext %a, i8 signext %b) {
772; CHECK-LE-LABEL: setnbc46:
773; CHECK-LE:       # %bb.0: # %entry
774; CHECK-LE-NEXT:    cmpw r3, r4
775; CHECK-LE-NEXT:    setnbc r3, eq
776; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
777; CHECK-LE-NEXT:    blr
778;
779; CHECK-BE-LABEL: setnbc46:
780; CHECK-BE:       # %bb.0: # %entry
781; CHECK-BE-NEXT:    cmpw r3, r4
782; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
783; CHECK-BE-NEXT:    setnbc r3, eq
784; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
785; CHECK-BE-NEXT:    blr
786entry:
787  %cmp = icmp eq i8 %a, %b
788  %conv3 = sext i1 %cmp to i8
789  store i8 %conv3, i8* @globalVal, align 1
790  ret void
791}
792
793define i64 @setnbc47(i32 signext %a, i32 signext %b) {
794; CHECK-LABEL: setnbc47:
795; CHECK:       # %bb.0: # %entry
796; CHECK-NEXT:    cmpw r3, r4
797; CHECK-NEXT:    setnbc r3, eq
798; CHECK-NEXT:    blr
799entry:
800  %cmp = icmp eq i32 %a, %b
801  %conv1 = sext i1 %cmp to i64
802  ret i64 %conv1
803}
804
805define dso_local void @setnbc48(i32 signext %a, i32 signext %b) {
806; CHECK-LE-LABEL: setnbc48:
807; CHECK-LE:       # %bb.0: # %entry
808; CHECK-LE-NEXT:    cmpw r3, r4
809; CHECK-LE-NEXT:    setnbc r3, eq
810; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
811; CHECK-LE-NEXT:    blr
812;
813; CHECK-BE-LABEL: setnbc48:
814; CHECK-BE:       # %bb.0: # %entry
815; CHECK-BE-NEXT:    cmpw r3, r4
816; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
817; CHECK-BE-NEXT:    setnbc r3, eq
818; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
819; CHECK-BE-NEXT:    blr
820entry:
821  %cmp = icmp eq i32 %a, %b
822  %sub = sext i1 %cmp to i32
823  store i32 %sub, i32* @globalVal2, align 4
824  ret void
825}
826
827define dso_local void @setnbc49(i64 %a, i64 %b) {
828; CHECK-LE-LABEL: setnbc49:
829; CHECK-LE:       # %bb.0: # %entry
830; CHECK-LE-NEXT:    cmpd r3, r4
831; CHECK-LE-NEXT:    setnbc r3, eq
832; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
833; CHECK-LE-NEXT:    blr
834;
835; CHECK-BE-LABEL: setnbc49:
836; CHECK-BE:       # %bb.0: # %entry
837; CHECK-BE-NEXT:    cmpd r3, r4
838; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
839; CHECK-BE-NEXT:    setnbc r3, eq
840; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
841; CHECK-BE-NEXT:    blr
842entry:
843  %cmp = icmp eq i64 %a, %b
844  %conv1 = sext i1 %cmp to i64
845  store i64 %conv1, i64* @globalVal3, align 8
846  ret void
847}
848
849define i64 @setnbc50(i16 signext %a, i16 signext %b) {
850; CHECK-LABEL: setnbc50:
851; CHECK:       # %bb.0: # %entry
852; CHECK-NEXT:    cmpw r3, r4
853; CHECK-NEXT:    setnbc r3, eq
854; CHECK-NEXT:    blr
855entry:
856  %cmp = icmp eq i16 %a, %b
857  %conv3 = sext i1 %cmp to i64
858  ret i64 %conv3
859}
860
861define dso_local void @setnbc51(i16 signext %a, i16 signext %b) {
862; CHECK-LE-LABEL: setnbc51:
863; CHECK-LE:       # %bb.0: # %entry
864; CHECK-LE-NEXT:    cmpw r3, r4
865; CHECK-LE-NEXT:    setnbc r3, eq
866; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
867; CHECK-LE-NEXT:    blr
868;
869; CHECK-BE-LABEL: setnbc51:
870; CHECK-BE:       # %bb.0: # %entry
871; CHECK-BE-NEXT:    cmpw r3, r4
872; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
873; CHECK-BE-NEXT:    setnbc r3, eq
874; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
875; CHECK-BE-NEXT:    blr
876entry:
877  %cmp = icmp eq i16 %a, %b
878  %conv3 = sext i1 %cmp to i16
879  store i16 %conv3, i16* @globalVal4, align 2
880  ret void
881}
882
883define i64 @setnbc52(i8 zeroext %a, i8 zeroext %b) {
884; CHECK-LABEL: setnbc52:
885; CHECK:       # %bb.0: # %entry
886; CHECK-NEXT:    cmpw r3, r4
887; CHECK-NEXT:    setnbc r3, eq
888; CHECK-NEXT:    blr
889entry:
890  %cmp = icmp eq i8 %a, %b
891  %conv3 = sext i1 %cmp to i64
892  ret i64 %conv3
893}
894
895define dso_local void @setnbc53(i8 zeroext %a, i8 zeroext %b) {
896; CHECK-LE-LABEL: setnbc53:
897; CHECK-LE:       # %bb.0: # %entry
898; CHECK-LE-NEXT:    cmpw r3, r4
899; CHECK-LE-NEXT:    setnbc r3, eq
900; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
901; CHECK-LE-NEXT:    blr
902;
903; CHECK-BE-LABEL: setnbc53:
904; CHECK-BE:       # %bb.0: # %entry
905; CHECK-BE-NEXT:    cmpw r3, r4
906; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
907; CHECK-BE-NEXT:    setnbc r3, eq
908; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
909; CHECK-BE-NEXT:    blr
910entry:
911  %cmp = icmp eq i8 %a, %b
912  %conv3 = sext i1 %cmp to i8
913  store i8 %conv3, i8* @globalVal, align 1
914  ret void
915}
916
917define i64 @setnbc54(i32 zeroext %a, i32 zeroext %b) {
918; CHECK-LABEL: setnbc54:
919; CHECK:       # %bb.0: # %entry
920; CHECK-NEXT:    cmpw r3, r4
921; CHECK-NEXT:    setnbc r3, eq
922; CHECK-NEXT:    blr
923entry:
924  %cmp = icmp eq i32 %a, %b
925  %conv1 = sext i1 %cmp to i64
926  ret i64 %conv1
927}
928
929define dso_local void @setnbc55(i32 zeroext %a, i32 zeroext %b) {
930; CHECK-LE-LABEL: setnbc55:
931; CHECK-LE:       # %bb.0: # %entry
932; CHECK-LE-NEXT:    cmpw r3, r4
933; CHECK-LE-NEXT:    setnbc r3, eq
934; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
935; CHECK-LE-NEXT:    blr
936;
937; CHECK-BE-LABEL: setnbc55:
938; CHECK-BE:       # %bb.0: # %entry
939; CHECK-BE-NEXT:    cmpw r3, r4
940; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
941; CHECK-BE-NEXT:    setnbc r3, eq
942; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
943; CHECK-BE-NEXT:    blr
944entry:
945  %cmp = icmp eq i32 %a, %b
946  %sub = sext i1 %cmp to i32
947  store i32 %sub, i32* @globalVal2, align 4
948  ret void
949}
950
951define i64 @setnbc56(i64 %a, i64 %b) {
952; CHECK-LABEL: setnbc56:
953; CHECK:       # %bb.0: # %entry
954; CHECK-NEXT:    cmpd r3, r4
955; CHECK-NEXT:    setnbc r3, eq
956; CHECK-NEXT:    blr
957entry:
958  %cmp = icmp eq i64 %a, %b
959  %conv1 = sext i1 %cmp to i64
960  ret i64 %conv1
961}
962
963define dso_local void @setnbc57(i64 %a, i64 %b) {
964; CHECK-LE-LABEL: setnbc57:
965; CHECK-LE:       # %bb.0: # %entry
966; CHECK-LE-NEXT:    cmpd r3, r4
967; CHECK-LE-NEXT:    setnbc r3, eq
968; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
969; CHECK-LE-NEXT:    blr
970;
971; CHECK-BE-LABEL: setnbc57:
972; CHECK-BE:       # %bb.0: # %entry
973; CHECK-BE-NEXT:    cmpd r3, r4
974; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
975; CHECK-BE-NEXT:    setnbc r3, eq
976; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
977; CHECK-BE-NEXT:    blr
978entry:
979  %cmp = icmp eq i64 %a, %b
980  %conv1 = sext i1 %cmp to i64
981  store i64 %conv1, i64* @globalVal3, align 8
982  ret void
983}
984
985define i64 @setnbc58(i16 zeroext %a, i16 zeroext %b) {
986; CHECK-LABEL: setnbc58:
987; CHECK:       # %bb.0: # %entry
988; CHECK-NEXT:    cmpw r3, r4
989; CHECK-NEXT:    setnbc r3, eq
990; CHECK-NEXT:    blr
991entry:
992  %cmp = icmp eq i16 %a, %b
993  %conv3 = sext i1 %cmp to i64
994  ret i64 %conv3
995}
996
997define dso_local void @setnbc59(i16 zeroext %a, i16 zeroext %b) {
998; CHECK-LE-LABEL: setnbc59:
999; CHECK-LE:       # %bb.0: # %entry
1000; CHECK-LE-NEXT:    cmpw r3, r4
1001; CHECK-LE-NEXT:    setnbc r3, eq
1002; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
1003; CHECK-LE-NEXT:    blr
1004;
1005; CHECK-BE-LABEL: setnbc59:
1006; CHECK-BE:       # %bb.0: # %entry
1007; CHECK-BE-NEXT:    cmpw r3, r4
1008; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
1009; CHECK-BE-NEXT:    setnbc r3, eq
1010; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
1011; CHECK-BE-NEXT:    blr
1012entry:
1013  %cmp = icmp eq i16 %a, %b
1014  %conv3 = sext i1 %cmp to i16
1015  store i16 %conv3, i16* @globalVal4, align 2
1016  ret void
1017}
1018
1019define i64 @setnbc60(i64 %a, i64 %b) {
1020; CHECK-LABEL: setnbc60:
1021; CHECK:       # %bb.0: # %entry
1022; CHECK-NEXT:    cmpd r3, r4
1023; CHECK-NEXT:    setnbc r3, gt
1024; CHECK-NEXT:    blr
1025entry:
1026  %cmp = icmp sgt i64 %a, %b
1027  %conv1 = sext i1 %cmp to i64
1028  ret i64 %conv1
1029}
1030
1031define dso_local void @setnbc61(i64 %a, i64 %b) {
1032; CHECK-LE-LABEL: setnbc61:
1033; CHECK-LE:       # %bb.0: # %entry
1034; CHECK-LE-NEXT:    cmpd r3, r4
1035; CHECK-LE-NEXT:    setnbc r3, gt
1036; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
1037; CHECK-LE-NEXT:    blr
1038;
1039; CHECK-BE-LABEL: setnbc61:
1040; CHECK-BE:       # %bb.0: # %entry
1041; CHECK-BE-NEXT:    cmpd r3, r4
1042; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
1043; CHECK-BE-NEXT:    setnbc r3, gt
1044; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
1045; CHECK-BE-NEXT:    blr
1046entry:
1047  %cmp = icmp sgt i64 %a, %b
1048  %conv1 = sext i1 %cmp to i64
1049  store i64 %conv1, i64* @globalVal3, align 8
1050  ret void
1051}
1052
1053define i64 @setnbc62(i8 zeroext %a, i8 zeroext %b) {
1054; CHECK-LABEL: setnbc62:
1055; CHECK:       # %bb.0: # %entry
1056; CHECK-NEXT:    cmplw r3, r4
1057; CHECK-NEXT:    setnbc r3, gt
1058; CHECK-NEXT:    blr
1059entry:
1060  %cmp = icmp ugt i8 %a, %b
1061  %conv3 = sext i1 %cmp to i64
1062  ret i64 %conv3
1063}
1064
1065define dso_local void @setnbc63(i8 zeroext %a, i8 zeroext %b) {
1066; CHECK-LE-LABEL: setnbc63:
1067; CHECK-LE:       # %bb.0: # %entry
1068; CHECK-LE-NEXT:    cmplw r3, r4
1069; CHECK-LE-NEXT:    setnbc r3, gt
1070; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
1071; CHECK-LE-NEXT:    blr
1072;
1073; CHECK-BE-LABEL: setnbc63:
1074; CHECK-BE:       # %bb.0: # %entry
1075; CHECK-BE-NEXT:    cmplw r3, r4
1076; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
1077; CHECK-BE-NEXT:    setnbc r3, gt
1078; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
1079; CHECK-BE-NEXT:    blr
1080entry:
1081  %cmp = icmp ugt i8 %a, %b
1082  %conv3 = sext i1 %cmp to i8
1083  store i8 %conv3, i8* @globalVal, align 1
1084  ret void
1085}
1086
1087define i64 @setnbc64(i32 zeroext %a, i32 zeroext %b) {
1088; CHECK-LABEL: setnbc64:
1089; CHECK:       # %bb.0: # %entry
1090; CHECK-NEXT:    cmplw r3, r4
1091; CHECK-NEXT:    setnbc r3, gt
1092; CHECK-NEXT:    blr
1093entry:
1094  %cmp = icmp ugt i32 %a, %b
1095  %conv1 = sext i1 %cmp to i64
1096  ret i64 %conv1
1097}
1098
1099define dso_local void @setnbc65(i32 zeroext %a, i32 zeroext %b) {
1100; CHECK-LE-LABEL: setnbc65:
1101; CHECK-LE:       # %bb.0: # %entry
1102; CHECK-LE-NEXT:    cmplw r3, r4
1103; CHECK-LE-NEXT:    setnbc r3, gt
1104; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
1105; CHECK-LE-NEXT:    blr
1106;
1107; CHECK-BE-LABEL: setnbc65:
1108; CHECK-BE:       # %bb.0: # %entry
1109; CHECK-BE-NEXT:    cmplw r3, r4
1110; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
1111; CHECK-BE-NEXT:    setnbc r3, gt
1112; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
1113; CHECK-BE-NEXT:    blr
1114entry:
1115  %cmp = icmp ugt i32 %a, %b
1116  %sub = sext i1 %cmp to i32
1117  store i32 %sub, i32* @globalVal2, align 4
1118  ret void
1119}
1120
1121define i64 @setnbc66(i16 zeroext %a, i16 zeroext %b) {
1122; CHECK-LABEL: setnbc66:
1123; CHECK:       # %bb.0: # %entry
1124; CHECK-NEXT:    cmplw r3, r4
1125; CHECK-NEXT:    setnbc r3, gt
1126; CHECK-NEXT:    blr
1127entry:
1128  %cmp = icmp ugt i16 %a, %b
1129  %conv3 = sext i1 %cmp to i64
1130  ret i64 %conv3
1131}
1132
1133define dso_local void @setnbc67(i16 zeroext %a, i16 zeroext %b) {
1134; CHECK-LE-LABEL: setnbc67:
1135; CHECK-LE:       # %bb.0: # %entry
1136; CHECK-LE-NEXT:    cmplw r3, r4
1137; CHECK-LE-NEXT:    setnbc r3, gt
1138; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
1139; CHECK-LE-NEXT:    blr
1140;
1141; CHECK-BE-LABEL: setnbc67:
1142; CHECK-BE:       # %bb.0: # %entry
1143; CHECK-BE-NEXT:    cmplw r3, r4
1144; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
1145; CHECK-BE-NEXT:    setnbc r3, gt
1146; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
1147; CHECK-BE-NEXT:    blr
1148entry:
1149  %cmp = icmp ugt i16 %a, %b
1150  %conv3 = sext i1 %cmp to i16
1151  store i16 %conv3, i16* @globalVal4, align 2
1152  ret void
1153}
1154
1155define i64 @setnbc68(i64 %a, i64 %b) {
1156; CHECK-LABEL: setnbc68:
1157; CHECK:       # %bb.0: # %entry
1158; CHECK-NEXT:    cmpd r3, r4
1159; CHECK-NEXT:    setnbc r3, lt
1160; CHECK-NEXT:    blr
1161entry:
1162  %cmp = icmp slt i64 %a, %b
1163  %conv1 = sext i1 %cmp to i64
1164  ret i64 %conv1
1165}
1166
1167define dso_local void @setnbc69(i64 %a, i64 %b) {
1168; CHECK-LE-LABEL: setnbc69:
1169; CHECK-LE:       # %bb.0: # %entry
1170; CHECK-LE-NEXT:    cmpd r3, r4
1171; CHECK-LE-NEXT:    setnbc r3, lt
1172; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
1173; CHECK-LE-NEXT:    blr
1174;
1175; CHECK-BE-LABEL: setnbc69:
1176; CHECK-BE:       # %bb.0: # %entry
1177; CHECK-BE-NEXT:    cmpd r3, r4
1178; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
1179; CHECK-BE-NEXT:    setnbc r3, lt
1180; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
1181; CHECK-BE-NEXT:    blr
1182entry:
1183  %cmp = icmp slt i64 %a, %b
1184  %conv1 = sext i1 %cmp to i64
1185  store i64 %conv1, i64* @globalVal3, align 8
1186  ret void
1187}
1188
1189define i64 @setnbc70(i8 zeroext %a, i8 zeroext %b) {
1190; CHECK-LABEL: setnbc70:
1191; CHECK:       # %bb.0: # %entry
1192; CHECK-NEXT:    cmplw r3, r4
1193; CHECK-NEXT:    setnbc r3, lt
1194; CHECK-NEXT:    blr
1195entry:
1196  %cmp = icmp ult i8 %a, %b
1197  %conv3 = sext i1 %cmp to i64
1198  ret i64 %conv3
1199}
1200
1201define dso_local void @setnbc71(i8 zeroext %a, i8 zeroext %b) {
1202; CHECK-LE-LABEL: setnbc71:
1203; CHECK-LE:       # %bb.0: # %entry
1204; CHECK-LE-NEXT:    cmplw r3, r4
1205; CHECK-LE-NEXT:    setnbc r3, lt
1206; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
1207; CHECK-LE-NEXT:    blr
1208;
1209; CHECK-BE-LABEL: setnbc71:
1210; CHECK-BE:       # %bb.0: # %entry
1211; CHECK-BE-NEXT:    cmplw r3, r4
1212; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
1213; CHECK-BE-NEXT:    setnbc r3, lt
1214; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
1215; CHECK-BE-NEXT:    blr
1216entry:
1217  %cmp = icmp ult i8 %a, %b
1218  %conv3 = sext i1 %cmp to i8
1219  store i8 %conv3, i8* @globalVal, align 1
1220  ret void
1221}
1222
1223define i64 @setnbc72(i32 zeroext %a, i32 zeroext %b) {
1224; CHECK-LABEL: setnbc72:
1225; CHECK:       # %bb.0: # %entry
1226; CHECK-NEXT:    cmplw r3, r4
1227; CHECK-NEXT:    setnbc r3, lt
1228; CHECK-NEXT:    blr
1229entry:
1230  %cmp = icmp ult i32 %a, %b
1231  %conv1 = sext i1 %cmp to i64
1232  ret i64 %conv1
1233}
1234
1235define dso_local void @setnbc73(i32 zeroext %a, i32 zeroext %b) {
1236; CHECK-LE-LABEL: setnbc73:
1237; CHECK-LE:       # %bb.0: # %entry
1238; CHECK-LE-NEXT:    cmplw r3, r4
1239; CHECK-LE-NEXT:    setnbc r3, lt
1240; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
1241; CHECK-LE-NEXT:    blr
1242;
1243; CHECK-BE-LABEL: setnbc73:
1244; CHECK-BE:       # %bb.0: # %entry
1245; CHECK-BE-NEXT:    cmplw r3, r4
1246; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
1247; CHECK-BE-NEXT:    setnbc r3, lt
1248; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
1249; CHECK-BE-NEXT:    blr
1250entry:
1251  %cmp = icmp ult i32 %a, %b
1252  %sub = sext i1 %cmp to i32
1253  store i32 %sub, i32* @globalVal2, align 4
1254  ret void
1255}
1256
1257define i64 @setnbc74(i16 zeroext %a, i16 zeroext %b) {
1258; CHECK-LABEL: setnbc74:
1259; CHECK:       # %bb.0: # %entry
1260; CHECK-NEXT:    cmplw r3, r4
1261; CHECK-NEXT:    setnbc r3, lt
1262; CHECK-NEXT:    blr
1263entry:
1264  %cmp = icmp ult i16 %a, %b
1265  %conv3 = sext i1 %cmp to i64
1266  ret i64 %conv3
1267}
1268
1269define dso_local void @setnbc75(i16 zeroext %a, i16 zeroext %b) {
1270; CHECK-LE-LABEL: setnbc75:
1271; CHECK-LE:       # %bb.0: # %entry
1272; CHECK-LE-NEXT:    cmplw r3, r4
1273; CHECK-LE-NEXT:    setnbc r3, lt
1274; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
1275; CHECK-LE-NEXT:    blr
1276;
1277; CHECK-BE-LABEL: setnbc75:
1278; CHECK-BE:       # %bb.0: # %entry
1279; CHECK-BE-NEXT:    cmplw r3, r4
1280; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
1281; CHECK-BE-NEXT:    setnbc r3, lt
1282; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
1283; CHECK-BE-NEXT:    blr
1284entry:
1285  %cmp = icmp ult i16 %a, %b
1286  %conv3 = sext i1 %cmp to i16
1287  store i16 %conv3, i16* @globalVal4, align 2
1288  ret void
1289}
1290
1291