1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs \
3; RUN:   -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | FileCheck %s
4; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs \
5; RUN:   -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | FileCheck %s \
6; RUN:   -check-prefix=CHECK-P8
7
8@a_qp = common dso_local global fp128 0xL00000000000000000000000000000000, align 16
9@b_qp = common dso_local global fp128 0xL00000000000000000000000000000000, align 16
10
11; Function Attrs: noinline nounwind optnone
12define dso_local signext i32 @greater_qp() {
13; CHECK-LABEL: greater_qp:
14; CHECK:       # %bb.0: # %entry
15; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
16; CHECK-NEXT:    li r4, 1
17; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
18; CHECK-NEXT:    lxvx v2, 0, r3
19; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
20; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
21; CHECK-NEXT:    lxvx v3, 0, r3
22; CHECK-NEXT:    li r3, 0
23; CHECK-NEXT:    xscmpuqp cr0, v2, v3
24; CHECK-NEXT:    iselgt r3, r4, r3
25; CHECK-NEXT:    blr
26;
27; CHECK-P8-LABEL: greater_qp:
28; CHECK-P8:       # %bb.0: # %entry
29; CHECK-P8-NEXT:    mflr r0
30; CHECK-P8-NEXT:    std r0, 16(r1)
31; CHECK-P8-NEXT:    stdu r1, -32(r1)
32; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32
33; CHECK-P8-NEXT:    .cfi_offset lr, 16
34; CHECK-P8-NEXT:    addis r4, r2, b_qp@toc@ha
35; CHECK-P8-NEXT:    addis r5, r2, a_qp@toc@ha
36; CHECK-P8-NEXT:    addi r6, r5, a_qp@toc@l
37; CHECK-P8-NEXT:    addi r7, r4, b_qp@toc@l
38; CHECK-P8-NEXT:    ld r3, a_qp@toc@l(r5)
39; CHECK-P8-NEXT:    ld r5, b_qp@toc@l(r4)
40; CHECK-P8-NEXT:    ld r4, 8(r6)
41; CHECK-P8-NEXT:    ld r6, 8(r7)
42; CHECK-P8-NEXT:    bl __gtkf2
43; CHECK-P8-NEXT:    nop
44; CHECK-P8-NEXT:    extsw r3, r3
45; CHECK-P8-NEXT:    neg r3, r3
46; CHECK-P8-NEXT:    rldicl r3, r3, 1, 63
47; CHECK-P8-NEXT:    addi r1, r1, 32
48; CHECK-P8-NEXT:    ld r0, 16(r1)
49; CHECK-P8-NEXT:    mtlr r0
50; CHECK-P8-NEXT:    blr
51entry:
52  %0 = load fp128, fp128* @a_qp, align 16
53  %1 = load fp128, fp128* @b_qp, align 16
54  %cmp = fcmp ogt fp128 %0, %1
55  %conv = zext i1 %cmp to i32
56  ret i32 %conv
57}
58
59; Function Attrs: noinline nounwind optnone
60define dso_local signext i32 @less_qp() {
61; CHECK-LABEL: less_qp:
62; CHECK:       # %bb.0: # %entry
63; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
64; CHECK-NEXT:    li r4, 1
65; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
66; CHECK-NEXT:    lxvx v2, 0, r3
67; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
68; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
69; CHECK-NEXT:    lxvx v3, 0, r3
70; CHECK-NEXT:    li r3, 0
71; CHECK-NEXT:    xscmpuqp cr0, v2, v3
72; CHECK-NEXT:    isellt r3, r4, r3
73; CHECK-NEXT:    blr
74;
75; CHECK-P8-LABEL: less_qp:
76; CHECK-P8:       # %bb.0: # %entry
77; CHECK-P8-NEXT:    mflr r0
78; CHECK-P8-NEXT:    std r0, 16(r1)
79; CHECK-P8-NEXT:    stdu r1, -32(r1)
80; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32
81; CHECK-P8-NEXT:    .cfi_offset lr, 16
82; CHECK-P8-NEXT:    addis r4, r2, b_qp@toc@ha
83; CHECK-P8-NEXT:    addis r5, r2, a_qp@toc@ha
84; CHECK-P8-NEXT:    addi r6, r5, a_qp@toc@l
85; CHECK-P8-NEXT:    addi r7, r4, b_qp@toc@l
86; CHECK-P8-NEXT:    ld r3, a_qp@toc@l(r5)
87; CHECK-P8-NEXT:    ld r5, b_qp@toc@l(r4)
88; CHECK-P8-NEXT:    ld r4, 8(r6)
89; CHECK-P8-NEXT:    ld r6, 8(r7)
90; CHECK-P8-NEXT:    bl __ltkf2
91; CHECK-P8-NEXT:    nop
92; CHECK-P8-NEXT:    rlwinm r3, r3, 1, 31, 31
93; CHECK-P8-NEXT:    addi r1, r1, 32
94; CHECK-P8-NEXT:    ld r0, 16(r1)
95; CHECK-P8-NEXT:    mtlr r0
96; CHECK-P8-NEXT:    blr
97entry:
98  %0 = load fp128, fp128* @a_qp, align 16
99  %1 = load fp128, fp128* @b_qp, align 16
100  %cmp = fcmp olt fp128 %0, %1
101  %conv = zext i1 %cmp to i32
102  ret i32 %conv
103}
104
105; Function Attrs: noinline nounwind optnone
106define dso_local signext i32 @greater_eq_qp() {
107; CHECK-LABEL: greater_eq_qp:
108; CHECK:       # %bb.0: # %entry
109; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
110; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
111; CHECK-NEXT:    lxvx v2, 0, r3
112; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
113; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
114; CHECK-NEXT:    lxvx v3, 0, r3
115; CHECK-NEXT:    li r3, 1
116; CHECK-NEXT:    xscmpuqp cr0, v2, v3
117; CHECK-NEXT:    cror 4*cr5+lt, un, lt
118; CHECK-NEXT:    isel r3, 0, r3, 4*cr5+lt
119; CHECK-NEXT:    blr
120;
121; CHECK-P8-LABEL: greater_eq_qp:
122; CHECK-P8:       # %bb.0: # %entry
123; CHECK-P8-NEXT:    mflr r0
124; CHECK-P8-NEXT:    std r0, 16(r1)
125; CHECK-P8-NEXT:    stdu r1, -32(r1)
126; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32
127; CHECK-P8-NEXT:    .cfi_offset lr, 16
128; CHECK-P8-NEXT:    addis r4, r2, b_qp@toc@ha
129; CHECK-P8-NEXT:    addis r5, r2, a_qp@toc@ha
130; CHECK-P8-NEXT:    addi r6, r5, a_qp@toc@l
131; CHECK-P8-NEXT:    addi r7, r4, b_qp@toc@l
132; CHECK-P8-NEXT:    ld r3, a_qp@toc@l(r5)
133; CHECK-P8-NEXT:    ld r5, b_qp@toc@l(r4)
134; CHECK-P8-NEXT:    ld r4, 8(r6)
135; CHECK-P8-NEXT:    ld r6, 8(r7)
136; CHECK-P8-NEXT:    bl __gekf2
137; CHECK-P8-NEXT:    nop
138; CHECK-P8-NEXT:    rlwinm r3, r3, 1, 31, 31
139; CHECK-P8-NEXT:    xori r3, r3, 1
140; CHECK-P8-NEXT:    addi r1, r1, 32
141; CHECK-P8-NEXT:    ld r0, 16(r1)
142; CHECK-P8-NEXT:    mtlr r0
143; CHECK-P8-NEXT:    blr
144entry:
145  %0 = load fp128, fp128* @a_qp, align 16
146  %1 = load fp128, fp128* @b_qp, align 16
147  %cmp = fcmp oge fp128 %0, %1
148  %conv = zext i1 %cmp to i32
149  ret i32 %conv
150}
151
152; Function Attrs: noinline nounwind optnone
153define dso_local signext i32 @less_eq_qp() {
154; CHECK-LABEL: less_eq_qp:
155; CHECK:       # %bb.0: # %entry
156; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
157; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
158; CHECK-NEXT:    lxvx v2, 0, r3
159; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
160; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
161; CHECK-NEXT:    lxvx v3, 0, r3
162; CHECK-NEXT:    li r3, 1
163; CHECK-NEXT:    xscmpuqp cr0, v2, v3
164; CHECK-NEXT:    cror 4*cr5+lt, un, gt
165; CHECK-NEXT:    isel r3, 0, r3, 4*cr5+lt
166; CHECK-NEXT:    blr
167;
168; CHECK-P8-LABEL: less_eq_qp:
169; CHECK-P8:       # %bb.0: # %entry
170; CHECK-P8-NEXT:    mflr r0
171; CHECK-P8-NEXT:    std r0, 16(r1)
172; CHECK-P8-NEXT:    stdu r1, -32(r1)
173; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32
174; CHECK-P8-NEXT:    .cfi_offset lr, 16
175; CHECK-P8-NEXT:    addis r4, r2, b_qp@toc@ha
176; CHECK-P8-NEXT:    addis r5, r2, a_qp@toc@ha
177; CHECK-P8-NEXT:    addi r6, r5, a_qp@toc@l
178; CHECK-P8-NEXT:    addi r7, r4, b_qp@toc@l
179; CHECK-P8-NEXT:    ld r3, a_qp@toc@l(r5)
180; CHECK-P8-NEXT:    ld r5, b_qp@toc@l(r4)
181; CHECK-P8-NEXT:    ld r4, 8(r6)
182; CHECK-P8-NEXT:    ld r6, 8(r7)
183; CHECK-P8-NEXT:    bl __lekf2
184; CHECK-P8-NEXT:    nop
185; CHECK-P8-NEXT:    extsw r3, r3
186; CHECK-P8-NEXT:    neg r3, r3
187; CHECK-P8-NEXT:    rldicl r3, r3, 1, 63
188; CHECK-P8-NEXT:    xori r3, r3, 1
189; CHECK-P8-NEXT:    addi r1, r1, 32
190; CHECK-P8-NEXT:    ld r0, 16(r1)
191; CHECK-P8-NEXT:    mtlr r0
192; CHECK-P8-NEXT:    blr
193entry:
194  %0 = load fp128, fp128* @a_qp, align 16
195  %1 = load fp128, fp128* @b_qp, align 16
196  %cmp = fcmp ole fp128 %0, %1
197  %conv = zext i1 %cmp to i32
198  ret i32 %conv
199}
200
201; Function Attrs: noinline nounwind optnone
202define dso_local signext i32 @equal_qp() {
203; CHECK-LABEL: equal_qp:
204; CHECK:       # %bb.0: # %entry
205; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
206; CHECK-NEXT:    li r4, 1
207; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
208; CHECK-NEXT:    lxvx v2, 0, r3
209; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
210; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
211; CHECK-NEXT:    lxvx v3, 0, r3
212; CHECK-NEXT:    li r3, 0
213; CHECK-NEXT:    xscmpuqp cr0, v2, v3
214; CHECK-NEXT:    iseleq r3, r4, r3
215; CHECK-NEXT:    blr
216;
217; CHECK-P8-LABEL: equal_qp:
218; CHECK-P8:       # %bb.0: # %entry
219; CHECK-P8-NEXT:    mflr r0
220; CHECK-P8-NEXT:    std r0, 16(r1)
221; CHECK-P8-NEXT:    stdu r1, -32(r1)
222; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32
223; CHECK-P8-NEXT:    .cfi_offset lr, 16
224; CHECK-P8-NEXT:    addis r4, r2, b_qp@toc@ha
225; CHECK-P8-NEXT:    addis r5, r2, a_qp@toc@ha
226; CHECK-P8-NEXT:    addi r6, r5, a_qp@toc@l
227; CHECK-P8-NEXT:    addi r7, r4, b_qp@toc@l
228; CHECK-P8-NEXT:    ld r3, a_qp@toc@l(r5)
229; CHECK-P8-NEXT:    ld r5, b_qp@toc@l(r4)
230; CHECK-P8-NEXT:    ld r4, 8(r6)
231; CHECK-P8-NEXT:    ld r6, 8(r7)
232; CHECK-P8-NEXT:    bl __eqkf2
233; CHECK-P8-NEXT:    nop
234; CHECK-P8-NEXT:    cntlzw r3, r3
235; CHECK-P8-NEXT:    srwi r3, r3, 5
236; CHECK-P8-NEXT:    addi r1, r1, 32
237; CHECK-P8-NEXT:    ld r0, 16(r1)
238; CHECK-P8-NEXT:    mtlr r0
239; CHECK-P8-NEXT:    blr
240entry:
241  %0 = load fp128, fp128* @a_qp, align 16
242  %1 = load fp128, fp128* @b_qp, align 16
243  %cmp = fcmp oeq fp128 %0, %1
244  %conv = zext i1 %cmp to i32
245  ret i32 %conv
246}
247
248; Function Attrs: noinline nounwind optnone
249define dso_local signext i32 @not_greater_qp() {
250; CHECK-LABEL: not_greater_qp:
251; CHECK:       # %bb.0: # %entry
252; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
253; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
254; CHECK-NEXT:    lxvx v2, 0, r3
255; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
256; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
257; CHECK-NEXT:    lxvx v3, 0, r3
258; CHECK-NEXT:    li r3, 1
259; CHECK-NEXT:    xscmpuqp cr0, v2, v3
260; CHECK-NEXT:    iselgt r3, 0, r3
261; CHECK-NEXT:    blr
262;
263; CHECK-P8-LABEL: not_greater_qp:
264; CHECK-P8:       # %bb.0: # %entry
265; CHECK-P8-NEXT:    mflr r0
266; CHECK-P8-NEXT:    std r0, 16(r1)
267; CHECK-P8-NEXT:    stdu r1, -32(r1)
268; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32
269; CHECK-P8-NEXT:    .cfi_offset lr, 16
270; CHECK-P8-NEXT:    addis r4, r2, b_qp@toc@ha
271; CHECK-P8-NEXT:    addis r5, r2, a_qp@toc@ha
272; CHECK-P8-NEXT:    addi r6, r5, a_qp@toc@l
273; CHECK-P8-NEXT:    addi r7, r4, b_qp@toc@l
274; CHECK-P8-NEXT:    ld r3, a_qp@toc@l(r5)
275; CHECK-P8-NEXT:    ld r5, b_qp@toc@l(r4)
276; CHECK-P8-NEXT:    ld r4, 8(r6)
277; CHECK-P8-NEXT:    ld r6, 8(r7)
278; CHECK-P8-NEXT:    bl __gtkf2
279; CHECK-P8-NEXT:    nop
280; CHECK-P8-NEXT:    extsw r3, r3
281; CHECK-P8-NEXT:    neg r3, r3
282; CHECK-P8-NEXT:    rldicl r3, r3, 1, 63
283; CHECK-P8-NEXT:    xori r3, r3, 1
284; CHECK-P8-NEXT:    addi r1, r1, 32
285; CHECK-P8-NEXT:    ld r0, 16(r1)
286; CHECK-P8-NEXT:    mtlr r0
287; CHECK-P8-NEXT:    blr
288entry:
289  %0 = load fp128, fp128* @a_qp, align 16
290  %1 = load fp128, fp128* @b_qp, align 16
291  %cmp = fcmp ogt fp128 %0, %1
292  %lnot = xor i1 %cmp, true
293  %lnot.ext = zext i1 %lnot to i32
294  ret i32 %lnot.ext
295}
296
297; Function Attrs: noinline nounwind optnone
298define dso_local signext i32 @not_less_qp() {
299; CHECK-LABEL: not_less_qp:
300; CHECK:       # %bb.0: # %entry
301; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
302; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
303; CHECK-NEXT:    lxvx v2, 0, r3
304; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
305; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
306; CHECK-NEXT:    lxvx v3, 0, r3
307; CHECK-NEXT:    li r3, 1
308; CHECK-NEXT:    xscmpuqp cr0, v2, v3
309; CHECK-NEXT:    isellt r3, 0, r3
310; CHECK-NEXT:    blr
311;
312; CHECK-P8-LABEL: not_less_qp:
313; CHECK-P8:       # %bb.0: # %entry
314; CHECK-P8-NEXT:    mflr r0
315; CHECK-P8-NEXT:    std r0, 16(r1)
316; CHECK-P8-NEXT:    stdu r1, -32(r1)
317; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32
318; CHECK-P8-NEXT:    .cfi_offset lr, 16
319; CHECK-P8-NEXT:    addis r4, r2, b_qp@toc@ha
320; CHECK-P8-NEXT:    addis r5, r2, a_qp@toc@ha
321; CHECK-P8-NEXT:    addi r6, r5, a_qp@toc@l
322; CHECK-P8-NEXT:    addi r7, r4, b_qp@toc@l
323; CHECK-P8-NEXT:    ld r3, a_qp@toc@l(r5)
324; CHECK-P8-NEXT:    ld r5, b_qp@toc@l(r4)
325; CHECK-P8-NEXT:    ld r4, 8(r6)
326; CHECK-P8-NEXT:    ld r6, 8(r7)
327; CHECK-P8-NEXT:    bl __ltkf2
328; CHECK-P8-NEXT:    nop
329; CHECK-P8-NEXT:    rlwinm r3, r3, 1, 31, 31
330; CHECK-P8-NEXT:    xori r3, r3, 1
331; CHECK-P8-NEXT:    addi r1, r1, 32
332; CHECK-P8-NEXT:    ld r0, 16(r1)
333; CHECK-P8-NEXT:    mtlr r0
334; CHECK-P8-NEXT:    blr
335entry:
336  %0 = load fp128, fp128* @a_qp, align 16
337  %1 = load fp128, fp128* @b_qp, align 16
338  %cmp = fcmp olt fp128 %0, %1
339  %lnot = xor i1 %cmp, true
340  %lnot.ext = zext i1 %lnot to i32
341  ret i32 %lnot.ext
342}
343
344; Function Attrs: noinline nounwind optnone
345define dso_local signext i32 @not_greater_eq_qp() {
346; CHECK-LABEL: not_greater_eq_qp:
347; CHECK:       # %bb.0: # %entry
348; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
349; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
350; CHECK-NEXT:    lxvx v2, 0, r3
351; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
352; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
353; CHECK-NEXT:    lxvx v3, 0, r3
354; CHECK-NEXT:    li r3, 1
355; CHECK-NEXT:    xscmpuqp cr0, v2, v3
356; CHECK-NEXT:    crnor 4*cr5+lt, lt, un
357; CHECK-NEXT:    isel r3, 0, r3, 4*cr5+lt
358; CHECK-NEXT:    blr
359;
360; CHECK-P8-LABEL: not_greater_eq_qp:
361; CHECK-P8:       # %bb.0: # %entry
362; CHECK-P8-NEXT:    mflr r0
363; CHECK-P8-NEXT:    std r0, 16(r1)
364; CHECK-P8-NEXT:    stdu r1, -32(r1)
365; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32
366; CHECK-P8-NEXT:    .cfi_offset lr, 16
367; CHECK-P8-NEXT:    addis r4, r2, b_qp@toc@ha
368; CHECK-P8-NEXT:    addis r5, r2, a_qp@toc@ha
369; CHECK-P8-NEXT:    addi r6, r5, a_qp@toc@l
370; CHECK-P8-NEXT:    addi r7, r4, b_qp@toc@l
371; CHECK-P8-NEXT:    ld r3, a_qp@toc@l(r5)
372; CHECK-P8-NEXT:    ld r5, b_qp@toc@l(r4)
373; CHECK-P8-NEXT:    ld r4, 8(r6)
374; CHECK-P8-NEXT:    ld r6, 8(r7)
375; CHECK-P8-NEXT:    bl __gekf2
376; CHECK-P8-NEXT:    nop
377; CHECK-P8-NEXT:    rlwinm r3, r3, 1, 31, 31
378; CHECK-P8-NEXT:    addi r1, r1, 32
379; CHECK-P8-NEXT:    ld r0, 16(r1)
380; CHECK-P8-NEXT:    mtlr r0
381; CHECK-P8-NEXT:    blr
382entry:
383  %0 = load fp128, fp128* @a_qp, align 16
384  %1 = load fp128, fp128* @b_qp, align 16
385  %cmp = fcmp oge fp128 %0, %1
386  %lnot = xor i1 %cmp, true
387  %lnot.ext = zext i1 %lnot to i32
388  ret i32 %lnot.ext
389}
390
391; Function Attrs: noinline nounwind optnone
392define dso_local signext i32 @not_less_eq_qp() {
393; CHECK-LABEL: not_less_eq_qp:
394; CHECK:       # %bb.0: # %entry
395; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
396; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
397; CHECK-NEXT:    lxvx v2, 0, r3
398; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
399; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
400; CHECK-NEXT:    lxvx v3, 0, r3
401; CHECK-NEXT:    li r3, 1
402; CHECK-NEXT:    xscmpuqp cr0, v2, v3
403; CHECK-NEXT:    crnor 4*cr5+lt, gt, un
404; CHECK-NEXT:    isel r3, 0, r3, 4*cr5+lt
405; CHECK-NEXT:    blr
406;
407; CHECK-P8-LABEL: not_less_eq_qp:
408; CHECK-P8:       # %bb.0: # %entry
409; CHECK-P8-NEXT:    mflr r0
410; CHECK-P8-NEXT:    std r0, 16(r1)
411; CHECK-P8-NEXT:    stdu r1, -32(r1)
412; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32
413; CHECK-P8-NEXT:    .cfi_offset lr, 16
414; CHECK-P8-NEXT:    addis r4, r2, b_qp@toc@ha
415; CHECK-P8-NEXT:    addis r5, r2, a_qp@toc@ha
416; CHECK-P8-NEXT:    addi r6, r5, a_qp@toc@l
417; CHECK-P8-NEXT:    addi r7, r4, b_qp@toc@l
418; CHECK-P8-NEXT:    ld r3, a_qp@toc@l(r5)
419; CHECK-P8-NEXT:    ld r5, b_qp@toc@l(r4)
420; CHECK-P8-NEXT:    ld r4, 8(r6)
421; CHECK-P8-NEXT:    ld r6, 8(r7)
422; CHECK-P8-NEXT:    bl __lekf2
423; CHECK-P8-NEXT:    nop
424; CHECK-P8-NEXT:    extsw r3, r3
425; CHECK-P8-NEXT:    neg r3, r3
426; CHECK-P8-NEXT:    rldicl r3, r3, 1, 63
427; CHECK-P8-NEXT:    addi r1, r1, 32
428; CHECK-P8-NEXT:    ld r0, 16(r1)
429; CHECK-P8-NEXT:    mtlr r0
430; CHECK-P8-NEXT:    blr
431entry:
432  %0 = load fp128, fp128* @a_qp, align 16
433  %1 = load fp128, fp128* @b_qp, align 16
434  %cmp = fcmp ole fp128 %0, %1
435  %lnot = xor i1 %cmp, true
436  %lnot.ext = zext i1 %lnot to i32
437  ret i32 %lnot.ext
438}
439
440; Function Attrs: noinline nounwind optnone
441define dso_local signext i32 @not_equal_qp() {
442; CHECK-LABEL: not_equal_qp:
443; CHECK:       # %bb.0: # %entry
444; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
445; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
446; CHECK-NEXT:    lxvx v2, 0, r3
447; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
448; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
449; CHECK-NEXT:    lxvx v3, 0, r3
450; CHECK-NEXT:    li r3, 1
451; CHECK-NEXT:    xscmpuqp cr0, v2, v3
452; CHECK-NEXT:    iseleq r3, 0, r3
453; CHECK-NEXT:    blr
454;
455; CHECK-P8-LABEL: not_equal_qp:
456; CHECK-P8:       # %bb.0: # %entry
457; CHECK-P8-NEXT:    mflr r0
458; CHECK-P8-NEXT:    std r0, 16(r1)
459; CHECK-P8-NEXT:    stdu r1, -32(r1)
460; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32
461; CHECK-P8-NEXT:    .cfi_offset lr, 16
462; CHECK-P8-NEXT:    addis r4, r2, b_qp@toc@ha
463; CHECK-P8-NEXT:    addis r5, r2, a_qp@toc@ha
464; CHECK-P8-NEXT:    addi r6, r5, a_qp@toc@l
465; CHECK-P8-NEXT:    addi r7, r4, b_qp@toc@l
466; CHECK-P8-NEXT:    ld r3, a_qp@toc@l(r5)
467; CHECK-P8-NEXT:    ld r5, b_qp@toc@l(r4)
468; CHECK-P8-NEXT:    ld r4, 8(r6)
469; CHECK-P8-NEXT:    ld r6, 8(r7)
470; CHECK-P8-NEXT:    bl __nekf2
471; CHECK-P8-NEXT:    nop
472; CHECK-P8-NEXT:    cntlzw r3, r3
473; CHECK-P8-NEXT:    srwi r3, r3, 5
474; CHECK-P8-NEXT:    xori r3, r3, 1
475; CHECK-P8-NEXT:    addi r1, r1, 32
476; CHECK-P8-NEXT:    ld r0, 16(r1)
477; CHECK-P8-NEXT:    mtlr r0
478; CHECK-P8-NEXT:    blr
479entry:
480  %0 = load fp128, fp128* @a_qp, align 16
481  %1 = load fp128, fp128* @b_qp, align 16
482  %cmp = fcmp une fp128 %0, %1
483  %conv = zext i1 %cmp to i32
484  ret i32 %conv
485}
486
487; Function Attrs: norecurse nounwind readonly
488define fp128 @greater_sel_qp() {
489; CHECK-LABEL: greater_sel_qp:
490; CHECK:       # %bb.0: # %entry
491; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
492; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
493; CHECK-NEXT:    lxvx v2, 0, r3
494; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
495; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
496; CHECK-NEXT:    lxvx v3, 0, r3
497; CHECK-NEXT:    xscmpuqp cr0, v2, v3
498; CHECK-NEXT:    bgtlr cr0
499; CHECK-NEXT:  # %bb.1: # %entry
500; CHECK-NEXT:    vmr v2, v3
501; CHECK-NEXT:    blr
502;
503; CHECK-P8-LABEL: greater_sel_qp:
504; CHECK-P8:       # %bb.0: # %entry
505; CHECK-P8-NEXT:    mflr r0
506; CHECK-P8-NEXT:    .cfi_def_cfa_offset 80
507; CHECK-P8-NEXT:    .cfi_offset lr, 16
508; CHECK-P8-NEXT:    .cfi_offset r27, -40
509; CHECK-P8-NEXT:    .cfi_offset r28, -32
510; CHECK-P8-NEXT:    .cfi_offset r29, -24
511; CHECK-P8-NEXT:    .cfi_offset r30, -16
512; CHECK-P8-NEXT:    std r27, -40(r1) # 8-byte Folded Spill
513; CHECK-P8-NEXT:    std r28, -32(r1) # 8-byte Folded Spill
514; CHECK-P8-NEXT:    std r29, -24(r1) # 8-byte Folded Spill
515; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
516; CHECK-P8-NEXT:    std r0, 16(r1)
517; CHECK-P8-NEXT:    stdu r1, -80(r1)
518; CHECK-P8-NEXT:    addis r3, r2, b_qp@toc@ha
519; CHECK-P8-NEXT:    addis r4, r2, a_qp@toc@ha
520; CHECK-P8-NEXT:    ld r30, a_qp@toc@l(r4)
521; CHECK-P8-NEXT:    addi r4, r4, a_qp@toc@l
522; CHECK-P8-NEXT:    ld r29, b_qp@toc@l(r3)
523; CHECK-P8-NEXT:    addi r3, r3, b_qp@toc@l
524; CHECK-P8-NEXT:    ld r28, 8(r4)
525; CHECK-P8-NEXT:    ld r27, 8(r3)
526; CHECK-P8-NEXT:    mr r3, r30
527; CHECK-P8-NEXT:    mr r5, r29
528; CHECK-P8-NEXT:    mr r4, r28
529; CHECK-P8-NEXT:    mr r6, r27
530; CHECK-P8-NEXT:    bl __gtkf2
531; CHECK-P8-NEXT:    nop
532; CHECK-P8-NEXT:    cmpwi r3, 0
533; CHECK-P8-NEXT:    iselgt r3, r30, r29
534; CHECK-P8-NEXT:    iselgt r4, r28, r27
535; CHECK-P8-NEXT:    addi r1, r1, 80
536; CHECK-P8-NEXT:    ld r0, 16(r1)
537; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload
538; CHECK-P8-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload
539; CHECK-P8-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload
540; CHECK-P8-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload
541; CHECK-P8-NEXT:    mtlr r0
542; CHECK-P8-NEXT:    blr
543entry:
544  %0 = load fp128, fp128* @a_qp, align 16
545  %1 = load fp128, fp128* @b_qp, align 16
546  %cmp = fcmp ogt fp128 %0, %1
547  %cond = select i1 %cmp, fp128 %0, fp128 %1
548  ret fp128 %cond
549}
550
551; Function Attrs: noinline nounwind optnone
552define fp128 @less_sel_qp() {
553; CHECK-LABEL: less_sel_qp:
554; CHECK:       # %bb.0: # %entry
555; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
556; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
557; CHECK-NEXT:    lxvx v2, 0, r3
558; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
559; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
560; CHECK-NEXT:    lxvx v3, 0, r3
561; CHECK-NEXT:    xscmpuqp cr0, v2, v3
562; CHECK-NEXT:    bltlr cr0
563; CHECK-NEXT:  # %bb.1: # %entry
564; CHECK-NEXT:    vmr v2, v3
565; CHECK-NEXT:    blr
566;
567; CHECK-P8-LABEL: less_sel_qp:
568; CHECK-P8:       # %bb.0: # %entry
569; CHECK-P8-NEXT:    mflr r0
570; CHECK-P8-NEXT:    .cfi_def_cfa_offset 80
571; CHECK-P8-NEXT:    .cfi_offset lr, 16
572; CHECK-P8-NEXT:    .cfi_offset r27, -40
573; CHECK-P8-NEXT:    .cfi_offset r28, -32
574; CHECK-P8-NEXT:    .cfi_offset r29, -24
575; CHECK-P8-NEXT:    .cfi_offset r30, -16
576; CHECK-P8-NEXT:    std r27, -40(r1) # 8-byte Folded Spill
577; CHECK-P8-NEXT:    std r28, -32(r1) # 8-byte Folded Spill
578; CHECK-P8-NEXT:    std r29, -24(r1) # 8-byte Folded Spill
579; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
580; CHECK-P8-NEXT:    std r0, 16(r1)
581; CHECK-P8-NEXT:    stdu r1, -80(r1)
582; CHECK-P8-NEXT:    addis r3, r2, b_qp@toc@ha
583; CHECK-P8-NEXT:    addis r4, r2, a_qp@toc@ha
584; CHECK-P8-NEXT:    ld r30, a_qp@toc@l(r4)
585; CHECK-P8-NEXT:    addi r4, r4, a_qp@toc@l
586; CHECK-P8-NEXT:    ld r29, b_qp@toc@l(r3)
587; CHECK-P8-NEXT:    addi r3, r3, b_qp@toc@l
588; CHECK-P8-NEXT:    ld r28, 8(r4)
589; CHECK-P8-NEXT:    ld r27, 8(r3)
590; CHECK-P8-NEXT:    mr r3, r30
591; CHECK-P8-NEXT:    mr r5, r29
592; CHECK-P8-NEXT:    mr r4, r28
593; CHECK-P8-NEXT:    mr r6, r27
594; CHECK-P8-NEXT:    bl __ltkf2
595; CHECK-P8-NEXT:    nop
596; CHECK-P8-NEXT:    cmpwi r3, 0
597; CHECK-P8-NEXT:    isellt r3, r30, r29
598; CHECK-P8-NEXT:    isellt r4, r28, r27
599; CHECK-P8-NEXT:    addi r1, r1, 80
600; CHECK-P8-NEXT:    ld r0, 16(r1)
601; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload
602; CHECK-P8-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload
603; CHECK-P8-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload
604; CHECK-P8-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload
605; CHECK-P8-NEXT:    mtlr r0
606; CHECK-P8-NEXT:    blr
607entry:
608  %0 = load fp128, fp128* @a_qp, align 16
609  %1 = load fp128, fp128* @b_qp, align 16
610  %cmp = fcmp olt fp128 %0, %1
611  %cond = select i1 %cmp, fp128 %0, fp128 %1
612  ret fp128 %cond
613}
614
615; Function Attrs: noinline nounwind optnone
616define fp128 @greater_eq_sel_qp() {
617; CHECK-LABEL: greater_eq_sel_qp:
618; CHECK:       # %bb.0: # %entry
619; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
620; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
621; CHECK-NEXT:    lxvx v2, 0, r3
622; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
623; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
624; CHECK-NEXT:    lxvx v3, 0, r3
625; CHECK-NEXT:    xscmpuqp cr0, v2, v3
626; CHECK-NEXT:    crnor 4*cr5+lt, un, lt
627; CHECK-NEXT:    bclr 12, 4*cr5+lt, 0
628; CHECK-NEXT:  # %bb.1: # %entry
629; CHECK-NEXT:    vmr v2, v3
630; CHECK-NEXT:    blr
631;
632; CHECK-P8-LABEL: greater_eq_sel_qp:
633; CHECK-P8:       # %bb.0: # %entry
634; CHECK-P8-NEXT:    mflr r0
635; CHECK-P8-NEXT:    .cfi_def_cfa_offset 80
636; CHECK-P8-NEXT:    .cfi_offset lr, 16
637; CHECK-P8-NEXT:    .cfi_offset r27, -40
638; CHECK-P8-NEXT:    .cfi_offset r28, -32
639; CHECK-P8-NEXT:    .cfi_offset r29, -24
640; CHECK-P8-NEXT:    .cfi_offset r30, -16
641; CHECK-P8-NEXT:    std r27, -40(r1) # 8-byte Folded Spill
642; CHECK-P8-NEXT:    std r28, -32(r1) # 8-byte Folded Spill
643; CHECK-P8-NEXT:    std r29, -24(r1) # 8-byte Folded Spill
644; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
645; CHECK-P8-NEXT:    std r0, 16(r1)
646; CHECK-P8-NEXT:    stdu r1, -80(r1)
647; CHECK-P8-NEXT:    addis r3, r2, b_qp@toc@ha
648; CHECK-P8-NEXT:    addis r4, r2, a_qp@toc@ha
649; CHECK-P8-NEXT:    ld r30, a_qp@toc@l(r4)
650; CHECK-P8-NEXT:    addi r4, r4, a_qp@toc@l
651; CHECK-P8-NEXT:    ld r29, b_qp@toc@l(r3)
652; CHECK-P8-NEXT:    addi r3, r3, b_qp@toc@l
653; CHECK-P8-NEXT:    ld r28, 8(r4)
654; CHECK-P8-NEXT:    ld r27, 8(r3)
655; CHECK-P8-NEXT:    mr r3, r30
656; CHECK-P8-NEXT:    mr r5, r29
657; CHECK-P8-NEXT:    mr r4, r28
658; CHECK-P8-NEXT:    mr r6, r27
659; CHECK-P8-NEXT:    bl __gekf2
660; CHECK-P8-NEXT:    nop
661; CHECK-P8-NEXT:    cmpwi r3, -1
662; CHECK-P8-NEXT:    iselgt r3, r30, r29
663; CHECK-P8-NEXT:    iselgt r4, r28, r27
664; CHECK-P8-NEXT:    addi r1, r1, 80
665; CHECK-P8-NEXT:    ld r0, 16(r1)
666; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload
667; CHECK-P8-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload
668; CHECK-P8-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload
669; CHECK-P8-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload
670; CHECK-P8-NEXT:    mtlr r0
671; CHECK-P8-NEXT:    blr
672entry:
673  %0 = load fp128, fp128* @a_qp, align 16
674  %1 = load fp128, fp128* @b_qp, align 16
675  %cmp = fcmp oge fp128 %0, %1
676  %cond = select i1 %cmp, fp128 %0, fp128 %1
677  ret fp128 %cond
678}
679
680; Function Attrs: noinline nounwind optnone
681define fp128 @less_eq_sel_qp() {
682; CHECK-LABEL: less_eq_sel_qp:
683; CHECK:       # %bb.0: # %entry
684; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
685; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
686; CHECK-NEXT:    lxvx v2, 0, r3
687; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
688; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
689; CHECK-NEXT:    lxvx v3, 0, r3
690; CHECK-NEXT:    xscmpuqp cr0, v2, v3
691; CHECK-NEXT:    crnor 4*cr5+lt, un, gt
692; CHECK-NEXT:    bclr 12, 4*cr5+lt, 0
693; CHECK-NEXT:  # %bb.1: # %entry
694; CHECK-NEXT:    vmr v2, v3
695; CHECK-NEXT:    blr
696;
697; CHECK-P8-LABEL: less_eq_sel_qp:
698; CHECK-P8:       # %bb.0: # %entry
699; CHECK-P8-NEXT:    mflr r0
700; CHECK-P8-NEXT:    .cfi_def_cfa_offset 80
701; CHECK-P8-NEXT:    .cfi_offset lr, 16
702; CHECK-P8-NEXT:    .cfi_offset r27, -40
703; CHECK-P8-NEXT:    .cfi_offset r28, -32
704; CHECK-P8-NEXT:    .cfi_offset r29, -24
705; CHECK-P8-NEXT:    .cfi_offset r30, -16
706; CHECK-P8-NEXT:    std r27, -40(r1) # 8-byte Folded Spill
707; CHECK-P8-NEXT:    std r28, -32(r1) # 8-byte Folded Spill
708; CHECK-P8-NEXT:    std r29, -24(r1) # 8-byte Folded Spill
709; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
710; CHECK-P8-NEXT:    std r0, 16(r1)
711; CHECK-P8-NEXT:    stdu r1, -80(r1)
712; CHECK-P8-NEXT:    addis r3, r2, b_qp@toc@ha
713; CHECK-P8-NEXT:    addis r4, r2, a_qp@toc@ha
714; CHECK-P8-NEXT:    ld r30, a_qp@toc@l(r4)
715; CHECK-P8-NEXT:    addi r4, r4, a_qp@toc@l
716; CHECK-P8-NEXT:    ld r29, b_qp@toc@l(r3)
717; CHECK-P8-NEXT:    addi r3, r3, b_qp@toc@l
718; CHECK-P8-NEXT:    ld r28, 8(r4)
719; CHECK-P8-NEXT:    ld r27, 8(r3)
720; CHECK-P8-NEXT:    mr r3, r30
721; CHECK-P8-NEXT:    mr r5, r29
722; CHECK-P8-NEXT:    mr r4, r28
723; CHECK-P8-NEXT:    mr r6, r27
724; CHECK-P8-NEXT:    bl __lekf2
725; CHECK-P8-NEXT:    nop
726; CHECK-P8-NEXT:    cmpwi r3, 1
727; CHECK-P8-NEXT:    isellt r3, r30, r29
728; CHECK-P8-NEXT:    isellt r4, r28, r27
729; CHECK-P8-NEXT:    addi r1, r1, 80
730; CHECK-P8-NEXT:    ld r0, 16(r1)
731; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload
732; CHECK-P8-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload
733; CHECK-P8-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload
734; CHECK-P8-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload
735; CHECK-P8-NEXT:    mtlr r0
736; CHECK-P8-NEXT:    blr
737entry:
738  %0 = load fp128, fp128* @a_qp, align 16
739  %1 = load fp128, fp128* @b_qp, align 16
740  %cmp = fcmp ole fp128 %0, %1
741  %cond = select i1 %cmp, fp128 %0, fp128 %1
742  ret fp128 %cond
743}
744
745; Function Attrs: noinline nounwind optnone
746define fp128 @equal_sel_qp() {
747; CHECK-LABEL: equal_sel_qp:
748; CHECK:       # %bb.0: # %entry
749; CHECK-NEXT:    addis r3, r2, a_qp@toc@ha
750; CHECK-NEXT:    addi r3, r3, a_qp@toc@l
751; CHECK-NEXT:    lxvx v2, 0, r3
752; CHECK-NEXT:    addis r3, r2, b_qp@toc@ha
753; CHECK-NEXT:    addi r3, r3, b_qp@toc@l
754; CHECK-NEXT:    lxvx v3, 0, r3
755; CHECK-NEXT:    xscmpuqp cr0, v2, v3
756; CHECK-NEXT:    beqlr cr0
757; CHECK-NEXT:  # %bb.1: # %entry
758; CHECK-NEXT:    vmr v2, v3
759; CHECK-NEXT:    blr
760;
761; CHECK-P8-LABEL: equal_sel_qp:
762; CHECK-P8:       # %bb.0: # %entry
763; CHECK-P8-NEXT:    mflr r0
764; CHECK-P8-NEXT:    .cfi_def_cfa_offset 80
765; CHECK-P8-NEXT:    .cfi_offset lr, 16
766; CHECK-P8-NEXT:    .cfi_offset r27, -40
767; CHECK-P8-NEXT:    .cfi_offset r28, -32
768; CHECK-P8-NEXT:    .cfi_offset r29, -24
769; CHECK-P8-NEXT:    .cfi_offset r30, -16
770; CHECK-P8-NEXT:    std r27, -40(r1) # 8-byte Folded Spill
771; CHECK-P8-NEXT:    std r28, -32(r1) # 8-byte Folded Spill
772; CHECK-P8-NEXT:    std r29, -24(r1) # 8-byte Folded Spill
773; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill
774; CHECK-P8-NEXT:    std r0, 16(r1)
775; CHECK-P8-NEXT:    stdu r1, -80(r1)
776; CHECK-P8-NEXT:    addis r3, r2, b_qp@toc@ha
777; CHECK-P8-NEXT:    addis r4, r2, a_qp@toc@ha
778; CHECK-P8-NEXT:    ld r30, a_qp@toc@l(r4)
779; CHECK-P8-NEXT:    addi r4, r4, a_qp@toc@l
780; CHECK-P8-NEXT:    ld r29, b_qp@toc@l(r3)
781; CHECK-P8-NEXT:    addi r3, r3, b_qp@toc@l
782; CHECK-P8-NEXT:    ld r28, 8(r4)
783; CHECK-P8-NEXT:    ld r27, 8(r3)
784; CHECK-P8-NEXT:    mr r3, r30
785; CHECK-P8-NEXT:    mr r5, r29
786; CHECK-P8-NEXT:    mr r4, r28
787; CHECK-P8-NEXT:    mr r6, r27
788; CHECK-P8-NEXT:    bl __eqkf2
789; CHECK-P8-NEXT:    nop
790; CHECK-P8-NEXT:    cmplwi r3, 0
791; CHECK-P8-NEXT:    iseleq r3, r30, r29
792; CHECK-P8-NEXT:    iseleq r4, r28, r27
793; CHECK-P8-NEXT:    addi r1, r1, 80
794; CHECK-P8-NEXT:    ld r0, 16(r1)
795; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload
796; CHECK-P8-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload
797; CHECK-P8-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload
798; CHECK-P8-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload
799; CHECK-P8-NEXT:    mtlr r0
800; CHECK-P8-NEXT:    blr
801entry:
802  %0 = load fp128, fp128* @a_qp, align 16
803  %1 = load fp128, fp128* @b_qp, align 16
804  %cmp = fcmp oeq fp128 %0, %1
805  %cond = select i1 %cmp, fp128 %0, fp128 %1
806  ret fp128 %cond
807}
808