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