1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names --enable-unsafe-fp-math \
3; RUN:   -verify-machineinstrs --enable-no-signed-zeros-fp-math \
4; RUN:   --enable-no-nans-fp-math --enable-no-infs-fp-math \
5; RUN:   -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \
6; RUN:   --check-prefix=FAST-P8
7; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names --enable-unsafe-fp-math \
8; RUN:   -verify-machineinstrs --enable-no-signed-zeros-fp-math \
9; RUN:   --enable-no-nans-fp-math --enable-no-infs-fp-math \
10; RUN:   -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \
11; RUN:   --check-prefix=FAST-P9
12; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names -verify-machineinstrs \
13; RUN:   -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \
14; RUN:   --check-prefix=NO-FAST-P8
15; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names -verify-machineinstrs \
16; RUN:   -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \
17; RUN:   --check-prefix=NO-FAST-P9
18
19; Test oeq
20define float @select_oeq_float(float %a, float %b, float %c, float %d) {
21; FAST-P8-LABEL: select_oeq_float:
22; FAST-P8:       # %bb.0: # %entry
23; FAST-P8-NEXT:    xssubsp f0, f1, f2
24; FAST-P8-NEXT:    xssubsp f1, f2, f1
25; FAST-P8-NEXT:    fsel f0, f0, f3, f4
26; FAST-P8-NEXT:    fsel f1, f1, f0, f4
27; FAST-P8-NEXT:    blr
28;
29; FAST-P9-LABEL: select_oeq_float:
30; FAST-P9:       # %bb.0: # %entry
31; FAST-P9-NEXT:    xssubsp f0, f2, f1
32; FAST-P9-NEXT:    xssubsp f1, f1, f2
33; FAST-P9-NEXT:    fsel f1, f1, f3, f4
34; FAST-P9-NEXT:    fsel f1, f0, f1, f4
35; FAST-P9-NEXT:    blr
36;
37; NO-FAST-P8-LABEL: select_oeq_float:
38; NO-FAST-P8:       # %bb.0: # %entry
39; NO-FAST-P8-NEXT:    fcmpu cr0, f1, f2
40; NO-FAST-P8-NEXT:    fmr f1, f3
41; NO-FAST-P8-NEXT:    beqlr cr0
42; NO-FAST-P8-NEXT:  # %bb.1: # %entry
43; NO-FAST-P8-NEXT:    fmr f1, f4
44; NO-FAST-P8-NEXT:    blr
45;
46; NO-FAST-P9-LABEL: select_oeq_float:
47; NO-FAST-P9:       # %bb.0: # %entry
48; NO-FAST-P9-NEXT:    fcmpu cr0, f1, f2
49; NO-FAST-P9-NEXT:    beq cr0, .LBB0_2
50; NO-FAST-P9-NEXT:  # %bb.1: # %entry
51; NO-FAST-P9-NEXT:    fmr f3, f4
52; NO-FAST-P9-NEXT:  .LBB0_2: # %entry
53; NO-FAST-P9-NEXT:    fmr f1, f3
54; NO-FAST-P9-NEXT:    blr
55entry:
56  %cmp = fcmp oeq float %a, %b
57  %cond = select i1 %cmp, float %c, float %d
58  ret float %cond
59}
60
61define double @select_oeq_double(double %a, double %b, double %c, double %d) {
62; FAST-P8-LABEL: select_oeq_double:
63; FAST-P8:       # %bb.0: # %entry
64; FAST-P8-NEXT:    xssubdp f0, f1, f2
65; FAST-P8-NEXT:    xsnegdp f1, f0
66; FAST-P8-NEXT:    fsel f0, f0, f3, f4
67; FAST-P8-NEXT:    fsel f1, f1, f0, f4
68; FAST-P8-NEXT:    blr
69;
70; FAST-P9-LABEL: select_oeq_double:
71; FAST-P9:       # %bb.0: # %entry
72; FAST-P9-NEXT:    xssubdp f0, f1, f2
73; FAST-P9-NEXT:    fsel f1, f0, f3, f4
74; FAST-P9-NEXT:    xsnegdp f0, f0
75; FAST-P9-NEXT:    fsel f1, f0, f1, f4
76; FAST-P9-NEXT:    blr
77;
78; NO-FAST-P8-LABEL: select_oeq_double:
79; NO-FAST-P8:       # %bb.0: # %entry
80; NO-FAST-P8-NEXT:    xscmpudp cr0, f1, f2
81; NO-FAST-P8-NEXT:    fmr f1, f3
82; NO-FAST-P8-NEXT:    beqlr cr0
83; NO-FAST-P8-NEXT:  # %bb.1: # %entry
84; NO-FAST-P8-NEXT:    fmr f1, f4
85; NO-FAST-P8-NEXT:    blr
86;
87; NO-FAST-P9-LABEL: select_oeq_double:
88; NO-FAST-P9:       # %bb.0: # %entry
89; NO-FAST-P9-NEXT:    xscmpudp cr0, f1, f2
90; NO-FAST-P9-NEXT:    beq cr0, .LBB1_2
91; NO-FAST-P9-NEXT:  # %bb.1: # %entry
92; NO-FAST-P9-NEXT:    fmr f3, f4
93; NO-FAST-P9-NEXT:  .LBB1_2: # %entry
94; NO-FAST-P9-NEXT:    fmr f1, f3
95; NO-FAST-P9-NEXT:    blr
96entry:
97  %cmp = fcmp oeq double %a, %b
98  %cond = select i1 %cmp, double %c, double %d
99  ret double %cond
100}
101
102define float @select_fast_oeq_float(float %a, float %b, float %c, float %d) {
103; FAST-P8-LABEL: select_fast_oeq_float:
104; FAST-P8:       # %bb.0: # %entry
105; FAST-P8-NEXT:    xssubsp f0, f1, f2
106; FAST-P8-NEXT:    xssubsp f1, f2, f1
107; FAST-P8-NEXT:    fsel f0, f0, f3, f4
108; FAST-P8-NEXT:    fsel f1, f1, f0, f4
109; FAST-P8-NEXT:    blr
110;
111; FAST-P9-LABEL: select_fast_oeq_float:
112; FAST-P9:       # %bb.0: # %entry
113; FAST-P9-NEXT:    xssubsp f0, f2, f1
114; FAST-P9-NEXT:    xssubsp f1, f1, f2
115; FAST-P9-NEXT:    fsel f1, f1, f3, f4
116; FAST-P9-NEXT:    fsel f1, f0, f1, f4
117; FAST-P9-NEXT:    blr
118;
119; NO-FAST-P8-LABEL: select_fast_oeq_float:
120; NO-FAST-P8:       # %bb.0: # %entry
121; NO-FAST-P8-NEXT:    xssubsp f0, f1, f2
122; NO-FAST-P8-NEXT:    xssubsp f1, f2, f1
123; NO-FAST-P8-NEXT:    fsel f0, f0, f3, f4
124; NO-FAST-P8-NEXT:    fsel f1, f1, f0, f4
125; NO-FAST-P8-NEXT:    blr
126;
127; NO-FAST-P9-LABEL: select_fast_oeq_float:
128; NO-FAST-P9:       # %bb.0: # %entry
129; NO-FAST-P9-NEXT:    xssubsp f0, f2, f1
130; NO-FAST-P9-NEXT:    xssubsp f1, f1, f2
131; NO-FAST-P9-NEXT:    fsel f1, f1, f3, f4
132; NO-FAST-P9-NEXT:    fsel f1, f0, f1, f4
133; NO-FAST-P9-NEXT:    blr
134entry:
135  %cmp = fcmp nnan ninf nsz oeq float %a, %b
136  %cond = select i1 %cmp, float %c, float %d
137  ret float %cond
138}
139
140define double @select_fast_oeq_double(double %a, double %b, double %c, double %d) {
141; FAST-P8-LABEL: select_fast_oeq_double:
142; FAST-P8:       # %bb.0: # %entry
143; FAST-P8-NEXT:    xssubdp f0, f1, f2
144; FAST-P8-NEXT:    xsnegdp f1, f0
145; FAST-P8-NEXT:    fsel f0, f0, f3, f4
146; FAST-P8-NEXT:    fsel f1, f1, f0, f4
147; FAST-P8-NEXT:    blr
148;
149; FAST-P9-LABEL: select_fast_oeq_double:
150; FAST-P9:       # %bb.0: # %entry
151; FAST-P9-NEXT:    xssubdp f0, f1, f2
152; FAST-P9-NEXT:    fsel f1, f0, f3, f4
153; FAST-P9-NEXT:    xsnegdp f0, f0
154; FAST-P9-NEXT:    fsel f1, f0, f1, f4
155; FAST-P9-NEXT:    blr
156;
157; NO-FAST-P8-LABEL: select_fast_oeq_double:
158; NO-FAST-P8:       # %bb.0: # %entry
159; NO-FAST-P8-NEXT:    xssubdp f0, f1, f2
160; NO-FAST-P8-NEXT:    xsnegdp f1, f0
161; NO-FAST-P8-NEXT:    fsel f0, f0, f3, f4
162; NO-FAST-P8-NEXT:    fsel f1, f1, f0, f4
163; NO-FAST-P8-NEXT:    blr
164;
165; NO-FAST-P9-LABEL: select_fast_oeq_double:
166; NO-FAST-P9:       # %bb.0: # %entry
167; NO-FAST-P9-NEXT:    xssubdp f0, f1, f2
168; NO-FAST-P9-NEXT:    fsel f1, f0, f3, f4
169; NO-FAST-P9-NEXT:    xsnegdp f0, f0
170; NO-FAST-P9-NEXT:    fsel f1, f0, f1, f4
171; NO-FAST-P9-NEXT:    blr
172entry:
173  %cmp = fcmp nnan ninf nsz oeq double %a, %b
174  %cond = select i1 %cmp, double %c, double %d
175  ret double %cond
176}
177
178
179; Test one
180define float @select_one_float(float %a, float %b, float %c, float %d) {
181; FAST-P8-LABEL: select_one_float:
182; FAST-P8:       # %bb.0: # %entry
183; FAST-P8-NEXT:    xssubsp f0, f1, f2
184; FAST-P8-NEXT:    xssubsp f1, f2, f1
185; FAST-P8-NEXT:    fsel f0, f0, f4, f3
186; FAST-P8-NEXT:    fsel f1, f1, f0, f3
187; FAST-P8-NEXT:    blr
188;
189; FAST-P9-LABEL: select_one_float:
190; FAST-P9:       # %bb.0: # %entry
191; FAST-P9-NEXT:    xssubsp f0, f2, f1
192; FAST-P9-NEXT:    xssubsp f1, f1, f2
193; FAST-P9-NEXT:    fsel f1, f1, f4, f3
194; FAST-P9-NEXT:    fsel f1, f0, f1, f3
195; FAST-P9-NEXT:    blr
196;
197; NO-FAST-P8-LABEL: select_one_float:
198; NO-FAST-P8:       # %bb.0: # %entry
199; NO-FAST-P8-NEXT:    fcmpu cr0, f1, f2
200; NO-FAST-P8-NEXT:    fmr f1, f3
201; NO-FAST-P8-NEXT:    crnor 4*cr5+lt, un, eq
202; NO-FAST-P8-NEXT:    bclr 12, 4*cr5+lt, 0
203; NO-FAST-P8-NEXT:  # %bb.1: # %entry
204; NO-FAST-P8-NEXT:    fmr f1, f4
205; NO-FAST-P8-NEXT:    blr
206;
207; NO-FAST-P9-LABEL: select_one_float:
208; NO-FAST-P9:       # %bb.0: # %entry
209; NO-FAST-P9-NEXT:    fcmpu cr0, f1, f2
210; NO-FAST-P9-NEXT:    crnor 4*cr5+lt, un, eq
211; NO-FAST-P9-NEXT:    bc 12, 4*cr5+lt, .LBB4_2
212; NO-FAST-P9-NEXT:  # %bb.1: # %entry
213; NO-FAST-P9-NEXT:    fmr f3, f4
214; NO-FAST-P9-NEXT:  .LBB4_2: # %entry
215; NO-FAST-P9-NEXT:    fmr f1, f3
216; NO-FAST-P9-NEXT:    blr
217entry:
218  %cmp = fcmp one float %a, %b
219  %cond = select i1 %cmp, float %c, float %d
220  ret float %cond
221}
222
223define double @select_one_double(double %a, double %b, double %c, double %d) {
224; FAST-P8-LABEL: select_one_double:
225; FAST-P8:       # %bb.0: # %entry
226; FAST-P8-NEXT:    xssubdp f0, f1, f2
227; FAST-P8-NEXT:    xsnegdp f1, f0
228; FAST-P8-NEXT:    fsel f0, f0, f4, f3
229; FAST-P8-NEXT:    fsel f1, f1, f0, f3
230; FAST-P8-NEXT:    blr
231;
232; FAST-P9-LABEL: select_one_double:
233; FAST-P9:       # %bb.0: # %entry
234; FAST-P9-NEXT:    xssubdp f0, f1, f2
235; FAST-P9-NEXT:    fsel f1, f0, f4, f3
236; FAST-P9-NEXT:    xsnegdp f0, f0
237; FAST-P9-NEXT:    fsel f1, f0, f1, f3
238; FAST-P9-NEXT:    blr
239;
240; NO-FAST-P8-LABEL: select_one_double:
241; NO-FAST-P8:       # %bb.0: # %entry
242; NO-FAST-P8-NEXT:    fcmpu cr0, f1, f2
243; NO-FAST-P8-NEXT:    fmr f1, f3
244; NO-FAST-P8-NEXT:    crnor 4*cr5+lt, un, eq
245; NO-FAST-P8-NEXT:    bclr 12, 4*cr5+lt, 0
246; NO-FAST-P8-NEXT:  # %bb.1: # %entry
247; NO-FAST-P8-NEXT:    fmr f1, f4
248; NO-FAST-P8-NEXT:    blr
249;
250; NO-FAST-P9-LABEL: select_one_double:
251; NO-FAST-P9:       # %bb.0: # %entry
252; NO-FAST-P9-NEXT:    fcmpu cr0, f1, f2
253; NO-FAST-P9-NEXT:    crnor 4*cr5+lt, un, eq
254; NO-FAST-P9-NEXT:    bc 12, 4*cr5+lt, .LBB5_2
255; NO-FAST-P9-NEXT:  # %bb.1: # %entry
256; NO-FAST-P9-NEXT:    fmr f3, f4
257; NO-FAST-P9-NEXT:  .LBB5_2: # %entry
258; NO-FAST-P9-NEXT:    fmr f1, f3
259; NO-FAST-P9-NEXT:    blr
260entry:
261  %cmp = fcmp one double %a, %b
262  %cond = select i1 %cmp, double %c, double %d
263  ret double %cond
264}
265
266define float @select_fast_one_float(float %a, float %b, float %c, float %d) {
267; FAST-P8-LABEL: select_fast_one_float:
268; FAST-P8:       # %bb.0: # %entry
269; FAST-P8-NEXT:    xssubsp f0, f1, f2
270; FAST-P8-NEXT:    xssubsp f1, f2, f1
271; FAST-P8-NEXT:    fsel f0, f0, f4, f3
272; FAST-P8-NEXT:    fsel f1, f1, f0, f3
273; FAST-P8-NEXT:    blr
274;
275; FAST-P9-LABEL: select_fast_one_float:
276; FAST-P9:       # %bb.0: # %entry
277; FAST-P9-NEXT:    xssubsp f0, f2, f1
278; FAST-P9-NEXT:    xssubsp f1, f1, f2
279; FAST-P9-NEXT:    fsel f1, f1, f4, f3
280; FAST-P9-NEXT:    fsel f1, f0, f1, f3
281; FAST-P9-NEXT:    blr
282;
283; NO-FAST-P8-LABEL: select_fast_one_float:
284; NO-FAST-P8:       # %bb.0: # %entry
285; NO-FAST-P8-NEXT:    xssubsp f0, f1, f2
286; NO-FAST-P8-NEXT:    xssubsp f1, f2, f1
287; NO-FAST-P8-NEXT:    fsel f0, f0, f4, f3
288; NO-FAST-P8-NEXT:    fsel f1, f1, f0, f3
289; NO-FAST-P8-NEXT:    blr
290;
291; NO-FAST-P9-LABEL: select_fast_one_float:
292; NO-FAST-P9:       # %bb.0: # %entry
293; NO-FAST-P9-NEXT:    xssubsp f0, f2, f1
294; NO-FAST-P9-NEXT:    xssubsp f1, f1, f2
295; NO-FAST-P9-NEXT:    fsel f1, f1, f4, f3
296; NO-FAST-P9-NEXT:    fsel f1, f0, f1, f3
297; NO-FAST-P9-NEXT:    blr
298entry:
299  %cmp = fcmp nnan ninf nsz one float %a, %b
300  %cond = select i1 %cmp, float %c, float %d
301  ret float %cond
302}
303
304define double @select_fast_one_double(double %a, double %b, double %c, double %d) {
305; FAST-P8-LABEL: select_fast_one_double:
306; FAST-P8:       # %bb.0: # %entry
307; FAST-P8-NEXT:    xssubdp f0, f1, f2
308; FAST-P8-NEXT:    xsnegdp f1, f0
309; FAST-P8-NEXT:    fsel f0, f0, f4, f3
310; FAST-P8-NEXT:    fsel f1, f1, f0, f3
311; FAST-P8-NEXT:    blr
312;
313; FAST-P9-LABEL: select_fast_one_double:
314; FAST-P9:       # %bb.0: # %entry
315; FAST-P9-NEXT:    xssubdp f0, f1, f2
316; FAST-P9-NEXT:    fsel f1, f0, f4, f3
317; FAST-P9-NEXT:    xsnegdp f0, f0
318; FAST-P9-NEXT:    fsel f1, f0, f1, f3
319; FAST-P9-NEXT:    blr
320;
321; NO-FAST-P8-LABEL: select_fast_one_double:
322; NO-FAST-P8:       # %bb.0: # %entry
323; NO-FAST-P8-NEXT:    xssubdp f0, f1, f2
324; NO-FAST-P8-NEXT:    xsnegdp f1, f0
325; NO-FAST-P8-NEXT:    fsel f0, f0, f4, f3
326; NO-FAST-P8-NEXT:    fsel f1, f1, f0, f3
327; NO-FAST-P8-NEXT:    blr
328;
329; NO-FAST-P9-LABEL: select_fast_one_double:
330; NO-FAST-P9:       # %bb.0: # %entry
331; NO-FAST-P9-NEXT:    xssubdp f0, f1, f2
332; NO-FAST-P9-NEXT:    fsel f1, f0, f4, f3
333; NO-FAST-P9-NEXT:    xsnegdp f0, f0
334; NO-FAST-P9-NEXT:    fsel f1, f0, f1, f3
335; NO-FAST-P9-NEXT:    blr
336entry:
337  %cmp = fcmp nnan ninf nsz one double %a, %b
338  %cond = select i1 %cmp, double %c, double %d
339  ret double %cond
340}
341
342
343; Test oge
344define float @select_oge_float(float %a, float %b, float %c, float %d) {
345; FAST-P8-LABEL: select_oge_float:
346; FAST-P8:       # %bb.0: # %entry
347; FAST-P8-NEXT:    xssubsp f0, f1, f2
348; FAST-P8-NEXT:    fsel f1, f0, f3, f4
349; FAST-P8-NEXT:    blr
350;
351; FAST-P9-LABEL: select_oge_float:
352; FAST-P9:       # %bb.0: # %entry
353; FAST-P9-NEXT:    xssubsp f0, f1, f2
354; FAST-P9-NEXT:    fsel f1, f0, f3, f4
355; FAST-P9-NEXT:    blr
356;
357; NO-FAST-P8-LABEL: select_oge_float:
358; NO-FAST-P8:       # %bb.0: # %entry
359; NO-FAST-P8-NEXT:    fcmpu cr0, f1, f2
360; NO-FAST-P8-NEXT:    fmr f1, f3
361; NO-FAST-P8-NEXT:    crnor 4*cr5+lt, un, lt
362; NO-FAST-P8-NEXT:    bclr 12, 4*cr5+lt, 0
363; NO-FAST-P8-NEXT:  # %bb.1: # %entry
364; NO-FAST-P8-NEXT:    fmr f1, f4
365; NO-FAST-P8-NEXT:    blr
366;
367; NO-FAST-P9-LABEL: select_oge_float:
368; NO-FAST-P9:       # %bb.0: # %entry
369; NO-FAST-P9-NEXT:    fcmpu cr0, f1, f2
370; NO-FAST-P9-NEXT:    crnor 4*cr5+lt, un, lt
371; NO-FAST-P9-NEXT:    bc 12, 4*cr5+lt, .LBB8_2
372; NO-FAST-P9-NEXT:  # %bb.1: # %entry
373; NO-FAST-P9-NEXT:    fmr f3, f4
374; NO-FAST-P9-NEXT:  .LBB8_2: # %entry
375; NO-FAST-P9-NEXT:    fmr f1, f3
376; NO-FAST-P9-NEXT:    blr
377entry:
378  %cmp = fcmp oge float %a, %b
379  %cond = select i1 %cmp, float %c, float %d
380  ret float %cond
381}
382
383define double @select_oge_double(double %a, double %b, double %c, double %d) {
384; FAST-P8-LABEL: select_oge_double:
385; FAST-P8:       # %bb.0: # %entry
386; FAST-P8-NEXT:    xssubdp f0, f1, f2
387; FAST-P8-NEXT:    fsel f1, f0, f3, f4
388; FAST-P8-NEXT:    blr
389;
390; FAST-P9-LABEL: select_oge_double:
391; FAST-P9:       # %bb.0: # %entry
392; FAST-P9-NEXT:    xssubdp f0, f1, f2
393; FAST-P9-NEXT:    fsel f1, f0, f3, f4
394; FAST-P9-NEXT:    blr
395;
396; NO-FAST-P8-LABEL: select_oge_double:
397; NO-FAST-P8:       # %bb.0: # %entry
398; NO-FAST-P8-NEXT:    fcmpu cr0, f1, f2
399; NO-FAST-P8-NEXT:    fmr f1, f3
400; NO-FAST-P8-NEXT:    crnor 4*cr5+lt, un, lt
401; NO-FAST-P8-NEXT:    bclr 12, 4*cr5+lt, 0
402; NO-FAST-P8-NEXT:  # %bb.1: # %entry
403; NO-FAST-P8-NEXT:    fmr f1, f4
404; NO-FAST-P8-NEXT:    blr
405;
406; NO-FAST-P9-LABEL: select_oge_double:
407; NO-FAST-P9:       # %bb.0: # %entry
408; NO-FAST-P9-NEXT:    fcmpu cr0, f1, f2
409; NO-FAST-P9-NEXT:    crnor 4*cr5+lt, un, lt
410; NO-FAST-P9-NEXT:    bc 12, 4*cr5+lt, .LBB9_2
411; NO-FAST-P9-NEXT:  # %bb.1: # %entry
412; NO-FAST-P9-NEXT:    fmr f3, f4
413; NO-FAST-P9-NEXT:  .LBB9_2: # %entry
414; NO-FAST-P9-NEXT:    fmr f1, f3
415; NO-FAST-P9-NEXT:    blr
416entry:
417  %cmp = fcmp oge double %a, %b
418  %cond = select i1 %cmp, double %c, double %d
419  ret double %cond
420}
421
422define float @select_fast_oge_float(float %a, float %b, float %c, float %d) {
423; FAST-P8-LABEL: select_fast_oge_float:
424; FAST-P8:       # %bb.0: # %entry
425; FAST-P8-NEXT:    xssubsp f0, f1, f2
426; FAST-P8-NEXT:    fsel f1, f0, f3, f4
427; FAST-P8-NEXT:    blr
428;
429; FAST-P9-LABEL: select_fast_oge_float:
430; FAST-P9:       # %bb.0: # %entry
431; FAST-P9-NEXT:    xssubsp f0, f1, f2
432; FAST-P9-NEXT:    fsel f1, f0, f3, f4
433; FAST-P9-NEXT:    blr
434;
435; NO-FAST-P8-LABEL: select_fast_oge_float:
436; NO-FAST-P8:       # %bb.0: # %entry
437; NO-FAST-P8-NEXT:    xssubsp f0, f1, f2
438; NO-FAST-P8-NEXT:    fsel f1, f0, f3, f4
439; NO-FAST-P8-NEXT:    blr
440;
441; NO-FAST-P9-LABEL: select_fast_oge_float:
442; NO-FAST-P9:       # %bb.0: # %entry
443; NO-FAST-P9-NEXT:    xssubsp f0, f1, f2
444; NO-FAST-P9-NEXT:    fsel f1, f0, f3, f4
445; NO-FAST-P9-NEXT:    blr
446entry:
447  %cmp = fcmp nnan ninf nsz oge float %a, %b
448  %cond = select i1 %cmp, float %c, float %d
449  ret float %cond
450}
451
452define double @select_fast_oge_double(double %a, double %b, double %c, double %d) {
453; FAST-P8-LABEL: select_fast_oge_double:
454; FAST-P8:       # %bb.0: # %entry
455; FAST-P8-NEXT:    xssubdp f0, f1, f2
456; FAST-P8-NEXT:    fsel f1, f0, f3, f4
457; FAST-P8-NEXT:    blr
458;
459; FAST-P9-LABEL: select_fast_oge_double:
460; FAST-P9:       # %bb.0: # %entry
461; FAST-P9-NEXT:    xssubdp f0, f1, f2
462; FAST-P9-NEXT:    fsel f1, f0, f3, f4
463; FAST-P9-NEXT:    blr
464;
465; NO-FAST-P8-LABEL: select_fast_oge_double:
466; NO-FAST-P8:       # %bb.0: # %entry
467; NO-FAST-P8-NEXT:    xssubdp f0, f1, f2
468; NO-FAST-P8-NEXT:    fsel f1, f0, f3, f4
469; NO-FAST-P8-NEXT:    blr
470;
471; NO-FAST-P9-LABEL: select_fast_oge_double:
472; NO-FAST-P9:       # %bb.0: # %entry
473; NO-FAST-P9-NEXT:    xssubdp f0, f1, f2
474; NO-FAST-P9-NEXT:    fsel f1, f0, f3, f4
475; NO-FAST-P9-NEXT:    blr
476entry:
477  %cmp = fcmp nnan ninf nsz oge double %a, %b
478  %cond = select i1 %cmp, double %c, double %d
479  ret double %cond
480}
481
482
483; Test olt
484define float @select_olt_float(float %a, float %b, float %c, float %d) {
485; FAST-P8-LABEL: select_olt_float:
486; FAST-P8:       # %bb.0: # %entry
487; FAST-P8-NEXT:    xssubsp f0, f1, f2
488; FAST-P8-NEXT:    fsel f1, f0, f4, f3
489; FAST-P8-NEXT:    blr
490;
491; FAST-P9-LABEL: select_olt_float:
492; FAST-P9:       # %bb.0: # %entry
493; FAST-P9-NEXT:    xssubsp f0, f1, f2
494; FAST-P9-NEXT:    fsel f1, f0, f4, f3
495; FAST-P9-NEXT:    blr
496;
497; NO-FAST-P8-LABEL: select_olt_float:
498; NO-FAST-P8:       # %bb.0: # %entry
499; NO-FAST-P8-NEXT:    fcmpu cr0, f1, f2
500; NO-FAST-P8-NEXT:    fmr f1, f3
501; NO-FAST-P8-NEXT:    bltlr cr0
502; NO-FAST-P8-NEXT:  # %bb.1: # %entry
503; NO-FAST-P8-NEXT:    fmr f1, f4
504; NO-FAST-P8-NEXT:    blr
505;
506; NO-FAST-P9-LABEL: select_olt_float:
507; NO-FAST-P9:       # %bb.0: # %entry
508; NO-FAST-P9-NEXT:    fcmpu cr0, f1, f2
509; NO-FAST-P9-NEXT:    blt cr0, .LBB12_2
510; NO-FAST-P9-NEXT:  # %bb.1: # %entry
511; NO-FAST-P9-NEXT:    fmr f3, f4
512; NO-FAST-P9-NEXT:  .LBB12_2: # %entry
513; NO-FAST-P9-NEXT:    fmr f1, f3
514; NO-FAST-P9-NEXT:    blr
515entry:
516  %cmp = fcmp olt float %a, %b
517  %cond = select i1 %cmp, float %c, float %d
518  ret float %cond
519}
520
521define double @select_olt_double(double %a, double %b, double %c, double %d) {
522; FAST-P8-LABEL: select_olt_double:
523; FAST-P8:       # %bb.0: # %entry
524; FAST-P8-NEXT:    xssubdp f0, f1, f2
525; FAST-P8-NEXT:    fsel f1, f0, f4, f3
526; FAST-P8-NEXT:    blr
527;
528; FAST-P9-LABEL: select_olt_double:
529; FAST-P9:       # %bb.0: # %entry
530; FAST-P9-NEXT:    xssubdp f0, f1, f2
531; FAST-P9-NEXT:    fsel f1, f0, f4, f3
532; FAST-P9-NEXT:    blr
533;
534; NO-FAST-P8-LABEL: select_olt_double:
535; NO-FAST-P8:       # %bb.0: # %entry
536; NO-FAST-P8-NEXT:    xscmpudp cr0, f1, f2
537; NO-FAST-P8-NEXT:    fmr f1, f3
538; NO-FAST-P8-NEXT:    bltlr cr0
539; NO-FAST-P8-NEXT:  # %bb.1: # %entry
540; NO-FAST-P8-NEXT:    fmr f1, f4
541; NO-FAST-P8-NEXT:    blr
542;
543; NO-FAST-P9-LABEL: select_olt_double:
544; NO-FAST-P9:       # %bb.0: # %entry
545; NO-FAST-P9-NEXT:    xscmpudp cr0, f1, f2
546; NO-FAST-P9-NEXT:    blt cr0, .LBB13_2
547; NO-FAST-P9-NEXT:  # %bb.1: # %entry
548; NO-FAST-P9-NEXT:    fmr f3, f4
549; NO-FAST-P9-NEXT:  .LBB13_2: # %entry
550; NO-FAST-P9-NEXT:    fmr f1, f3
551; NO-FAST-P9-NEXT:    blr
552entry:
553  %cmp = fcmp olt double %a, %b
554  %cond = select i1 %cmp, double %c, double %d
555  ret double %cond
556}
557
558define float @select_fast_olt_float(float %a, float %b, float %c, float %d) {
559; FAST-P8-LABEL: select_fast_olt_float:
560; FAST-P8:       # %bb.0: # %entry
561; FAST-P8-NEXT:    xssubsp f0, f1, f2
562; FAST-P8-NEXT:    fsel f1, f0, f4, f3
563; FAST-P8-NEXT:    blr
564;
565; FAST-P9-LABEL: select_fast_olt_float:
566; FAST-P9:       # %bb.0: # %entry
567; FAST-P9-NEXT:    xssubsp f0, f1, f2
568; FAST-P9-NEXT:    fsel f1, f0, f4, f3
569; FAST-P9-NEXT:    blr
570;
571; NO-FAST-P8-LABEL: select_fast_olt_float:
572; NO-FAST-P8:       # %bb.0: # %entry
573; NO-FAST-P8-NEXT:    xssubsp f0, f1, f2
574; NO-FAST-P8-NEXT:    fsel f1, f0, f4, f3
575; NO-FAST-P8-NEXT:    blr
576;
577; NO-FAST-P9-LABEL: select_fast_olt_float:
578; NO-FAST-P9:       # %bb.0: # %entry
579; NO-FAST-P9-NEXT:    xssubsp f0, f1, f2
580; NO-FAST-P9-NEXT:    fsel f1, f0, f4, f3
581; NO-FAST-P9-NEXT:    blr
582entry:
583  %cmp = fcmp ninf nnan nsz olt float %a, %b
584  %cond = select i1 %cmp, float %c, float %d
585  ret float %cond
586}
587
588define double @select_fast_olt_double(double %a, double %b, double %c, double %d) {
589; FAST-P8-LABEL: select_fast_olt_double:
590; FAST-P8:       # %bb.0: # %entry
591; FAST-P8-NEXT:    xssubdp f0, f1, f2
592; FAST-P8-NEXT:    fsel f1, f0, f4, f3
593; FAST-P8-NEXT:    blr
594;
595; FAST-P9-LABEL: select_fast_olt_double:
596; FAST-P9:       # %bb.0: # %entry
597; FAST-P9-NEXT:    xssubdp f0, f1, f2
598; FAST-P9-NEXT:    fsel f1, f0, f4, f3
599; FAST-P9-NEXT:    blr
600;
601; NO-FAST-P8-LABEL: select_fast_olt_double:
602; NO-FAST-P8:       # %bb.0: # %entry
603; NO-FAST-P8-NEXT:    xssubdp f0, f1, f2
604; NO-FAST-P8-NEXT:    fsel f1, f0, f4, f3
605; NO-FAST-P8-NEXT:    blr
606;
607; NO-FAST-P9-LABEL: select_fast_olt_double:
608; NO-FAST-P9:       # %bb.0: # %entry
609; NO-FAST-P9-NEXT:    xssubdp f0, f1, f2
610; NO-FAST-P9-NEXT:    fsel f1, f0, f4, f3
611; NO-FAST-P9-NEXT:    blr
612entry:
613  %cmp = fcmp nnan ninf nsz olt double %a, %b
614  %cond = select i1 %cmp, double %c, double %d
615  ret double %cond
616}
617
618
619; Test ogt
620define float @select_ogt_float(float %a, float %b, float %c, float %d) {
621; FAST-P8-LABEL: select_ogt_float:
622; FAST-P8:       # %bb.0: # %entry
623; FAST-P8-NEXT:    xssubsp f0, f2, f1
624; FAST-P8-NEXT:    fsel f1, f0, f4, f3
625; FAST-P8-NEXT:    blr
626;
627; FAST-P9-LABEL: select_ogt_float:
628; FAST-P9:       # %bb.0: # %entry
629; FAST-P9-NEXT:    xssubsp f0, f2, f1
630; FAST-P9-NEXT:    fsel f1, f0, f4, f3
631; FAST-P9-NEXT:    blr
632;
633; NO-FAST-P8-LABEL: select_ogt_float:
634; NO-FAST-P8:       # %bb.0: # %entry
635; NO-FAST-P8-NEXT:    fcmpu cr0, f1, f2
636; NO-FAST-P8-NEXT:    fmr f1, f3
637; NO-FAST-P8-NEXT:    bgtlr cr0
638; NO-FAST-P8-NEXT:  # %bb.1: # %entry
639; NO-FAST-P8-NEXT:    fmr f1, f4
640; NO-FAST-P8-NEXT:    blr
641;
642; NO-FAST-P9-LABEL: select_ogt_float:
643; NO-FAST-P9:       # %bb.0: # %entry
644; NO-FAST-P9-NEXT:    fcmpu cr0, f1, f2
645; NO-FAST-P9-NEXT:    bgt cr0, .LBB16_2
646; NO-FAST-P9-NEXT:  # %bb.1: # %entry
647; NO-FAST-P9-NEXT:    fmr f3, f4
648; NO-FAST-P9-NEXT:  .LBB16_2: # %entry
649; NO-FAST-P9-NEXT:    fmr f1, f3
650; NO-FAST-P9-NEXT:    blr
651entry:
652  %cmp = fcmp ogt float %a, %b
653  %cond = select i1 %cmp, float %c, float %d
654  ret float %cond
655}
656
657define double @select_ogt_double(double %a, double %b, double %c, double %d) {
658; FAST-P8-LABEL: select_ogt_double:
659; FAST-P8:       # %bb.0: # %entry
660; FAST-P8-NEXT:    xssubdp f0, f2, f1
661; FAST-P8-NEXT:    fsel f1, f0, f4, f3
662; FAST-P8-NEXT:    blr
663;
664; FAST-P9-LABEL: select_ogt_double:
665; FAST-P9:       # %bb.0: # %entry
666; FAST-P9-NEXT:    xssubdp f0, f2, f1
667; FAST-P9-NEXT:    fsel f1, f0, f4, f3
668; FAST-P9-NEXT:    blr
669;
670; NO-FAST-P8-LABEL: select_ogt_double:
671; NO-FAST-P8:       # %bb.0: # %entry
672; NO-FAST-P8-NEXT:    xscmpudp cr0, f1, f2
673; NO-FAST-P8-NEXT:    fmr f1, f3
674; NO-FAST-P8-NEXT:    bgtlr cr0
675; NO-FAST-P8-NEXT:  # %bb.1: # %entry
676; NO-FAST-P8-NEXT:    fmr f1, f4
677; NO-FAST-P8-NEXT:    blr
678;
679; NO-FAST-P9-LABEL: select_ogt_double:
680; NO-FAST-P9:       # %bb.0: # %entry
681; NO-FAST-P9-NEXT:    xscmpudp cr0, f1, f2
682; NO-FAST-P9-NEXT:    bgt cr0, .LBB17_2
683; NO-FAST-P9-NEXT:  # %bb.1: # %entry
684; NO-FAST-P9-NEXT:    fmr f3, f4
685; NO-FAST-P9-NEXT:  .LBB17_2: # %entry
686; NO-FAST-P9-NEXT:    fmr f1, f3
687; NO-FAST-P9-NEXT:    blr
688entry:
689  %cmp = fcmp ogt double %a, %b
690  %cond = select i1 %cmp, double %c, double %d
691  ret double %cond
692}
693
694define float @select_fast_ogt_float(float %a, float %b, float %c, float %d) {
695; FAST-P8-LABEL: select_fast_ogt_float:
696; FAST-P8:       # %bb.0: # %entry
697; FAST-P8-NEXT:    xssubsp f0, f2, f1
698; FAST-P8-NEXT:    fsel f1, f0, f4, f3
699; FAST-P8-NEXT:    blr
700;
701; FAST-P9-LABEL: select_fast_ogt_float:
702; FAST-P9:       # %bb.0: # %entry
703; FAST-P9-NEXT:    xssubsp f0, f2, f1
704; FAST-P9-NEXT:    fsel f1, f0, f4, f3
705; FAST-P9-NEXT:    blr
706;
707; NO-FAST-P8-LABEL: select_fast_ogt_float:
708; NO-FAST-P8:       # %bb.0: # %entry
709; NO-FAST-P8-NEXT:    xssubsp f0, f2, f1
710; NO-FAST-P8-NEXT:    fsel f1, f0, f4, f3
711; NO-FAST-P8-NEXT:    blr
712;
713; NO-FAST-P9-LABEL: select_fast_ogt_float:
714; NO-FAST-P9:       # %bb.0: # %entry
715; NO-FAST-P9-NEXT:    xssubsp f0, f2, f1
716; NO-FAST-P9-NEXT:    fsel f1, f0, f4, f3
717; NO-FAST-P9-NEXT:    blr
718entry:
719  %cmp = fcmp nnan ninf nsz ogt float %a, %b
720  %cond = select i1 %cmp, float %c, float %d
721  ret float %cond
722}
723
724define double @select_fast_ogt_double(double %a, double %b, double %c, double %d) {
725; FAST-P8-LABEL: select_fast_ogt_double:
726; FAST-P8:       # %bb.0: # %entry
727; FAST-P8-NEXT:    xssubdp f0, f2, f1
728; FAST-P8-NEXT:    fsel f1, f0, f4, f3
729; FAST-P8-NEXT:    blr
730;
731; FAST-P9-LABEL: select_fast_ogt_double:
732; FAST-P9:       # %bb.0: # %entry
733; FAST-P9-NEXT:    xssubdp f0, f2, f1
734; FAST-P9-NEXT:    fsel f1, f0, f4, f3
735; FAST-P9-NEXT:    blr
736;
737; NO-FAST-P8-LABEL: select_fast_ogt_double:
738; NO-FAST-P8:       # %bb.0: # %entry
739; NO-FAST-P8-NEXT:    xssubdp f0, f2, f1
740; NO-FAST-P8-NEXT:    fsel f1, f0, f4, f3
741; NO-FAST-P8-NEXT:    blr
742;
743; NO-FAST-P9-LABEL: select_fast_ogt_double:
744; NO-FAST-P9:       # %bb.0: # %entry
745; NO-FAST-P9-NEXT:    xssubdp f0, f2, f1
746; NO-FAST-P9-NEXT:    fsel f1, f0, f4, f3
747; NO-FAST-P9-NEXT:    blr
748entry:
749  %cmp = fcmp nnan ninf nsz ogt double %a, %b
750  %cond = select i1 %cmp, double %c, double %d
751  ret double %cond
752}
753
754
755; Test ole
756define float @select_ole_float(float %a, float %b, float %c, float %d) {
757; FAST-P8-LABEL: select_ole_float:
758; FAST-P8:       # %bb.0: # %entry
759; FAST-P8-NEXT:    xssubsp f0, f2, f1
760; FAST-P8-NEXT:    fsel f1, f0, f3, f4
761; FAST-P8-NEXT:    blr
762;
763; FAST-P9-LABEL: select_ole_float:
764; FAST-P9:       # %bb.0: # %entry
765; FAST-P9-NEXT:    xssubsp f0, f2, f1
766; FAST-P9-NEXT:    fsel f1, f0, f3, f4
767; FAST-P9-NEXT:    blr
768;
769; NO-FAST-P8-LABEL: select_ole_float:
770; NO-FAST-P8:       # %bb.0: # %entry
771; NO-FAST-P8-NEXT:    fcmpu cr0, f1, f2
772; NO-FAST-P8-NEXT:    fmr f1, f3
773; NO-FAST-P8-NEXT:    crnor 4*cr5+lt, un, gt
774; NO-FAST-P8-NEXT:    bclr 12, 4*cr5+lt, 0
775; NO-FAST-P8-NEXT:  # %bb.1: # %entry
776; NO-FAST-P8-NEXT:    fmr f1, f4
777; NO-FAST-P8-NEXT:    blr
778;
779; NO-FAST-P9-LABEL: select_ole_float:
780; NO-FAST-P9:       # %bb.0: # %entry
781; NO-FAST-P9-NEXT:    fcmpu cr0, f1, f2
782; NO-FAST-P9-NEXT:    crnor 4*cr5+lt, un, gt
783; NO-FAST-P9-NEXT:    bc 12, 4*cr5+lt, .LBB20_2
784; NO-FAST-P9-NEXT:  # %bb.1: # %entry
785; NO-FAST-P9-NEXT:    fmr f3, f4
786; NO-FAST-P9-NEXT:  .LBB20_2: # %entry
787; NO-FAST-P9-NEXT:    fmr f1, f3
788; NO-FAST-P9-NEXT:    blr
789entry:
790  %cmp = fcmp ole float %a, %b
791  %cond = select i1 %cmp, float %c, float %d
792  ret float %cond
793}
794
795define double @select_ole_double(double %a, double %b, double %c, double %d) {
796; FAST-P8-LABEL: select_ole_double:
797; FAST-P8:       # %bb.0: # %entry
798; FAST-P8-NEXT:    xssubdp f0, f2, f1
799; FAST-P8-NEXT:    fsel f1, f0, f3, f4
800; FAST-P8-NEXT:    blr
801;
802; FAST-P9-LABEL: select_ole_double:
803; FAST-P9:       # %bb.0: # %entry
804; FAST-P9-NEXT:    xssubdp f0, f2, f1
805; FAST-P9-NEXT:    fsel f1, f0, f3, f4
806; FAST-P9-NEXT:    blr
807;
808; NO-FAST-P8-LABEL: select_ole_double:
809; NO-FAST-P8:       # %bb.0: # %entry
810; NO-FAST-P8-NEXT:    fcmpu cr0, f1, f2
811; NO-FAST-P8-NEXT:    fmr f1, f3
812; NO-FAST-P8-NEXT:    crnor 4*cr5+lt, un, gt
813; NO-FAST-P8-NEXT:    bclr 12, 4*cr5+lt, 0
814; NO-FAST-P8-NEXT:  # %bb.1: # %entry
815; NO-FAST-P8-NEXT:    fmr f1, f4
816; NO-FAST-P8-NEXT:    blr
817;
818; NO-FAST-P9-LABEL: select_ole_double:
819; NO-FAST-P9:       # %bb.0: # %entry
820; NO-FAST-P9-NEXT:    fcmpu cr0, f1, f2
821; NO-FAST-P9-NEXT:    crnor 4*cr5+lt, un, gt
822; NO-FAST-P9-NEXT:    bc 12, 4*cr5+lt, .LBB21_2
823; NO-FAST-P9-NEXT:  # %bb.1: # %entry
824; NO-FAST-P9-NEXT:    fmr f3, f4
825; NO-FAST-P9-NEXT:  .LBB21_2: # %entry
826; NO-FAST-P9-NEXT:    fmr f1, f3
827; NO-FAST-P9-NEXT:    blr
828entry:
829  %cmp = fcmp ole double %a, %b
830  %cond = select i1 %cmp, double %c, double %d
831  ret double %cond
832}
833
834define float @select_fast_ole_float(float %a, float %b, float %c, float %d) {
835; FAST-P8-LABEL: select_fast_ole_float:
836; FAST-P8:       # %bb.0: # %entry
837; FAST-P8-NEXT:    xssubsp f0, f2, f1
838; FAST-P8-NEXT:    fsel f1, f0, f3, f4
839; FAST-P8-NEXT:    blr
840;
841; FAST-P9-LABEL: select_fast_ole_float:
842; FAST-P9:       # %bb.0: # %entry
843; FAST-P9-NEXT:    xssubsp f0, f2, f1
844; FAST-P9-NEXT:    fsel f1, f0, f3, f4
845; FAST-P9-NEXT:    blr
846;
847; NO-FAST-P8-LABEL: select_fast_ole_float:
848; NO-FAST-P8:       # %bb.0: # %entry
849; NO-FAST-P8-NEXT:    xssubsp f0, f2, f1
850; NO-FAST-P8-NEXT:    fsel f1, f0, f3, f4
851; NO-FAST-P8-NEXT:    blr
852;
853; NO-FAST-P9-LABEL: select_fast_ole_float:
854; NO-FAST-P9:       # %bb.0: # %entry
855; NO-FAST-P9-NEXT:    xssubsp f0, f2, f1
856; NO-FAST-P9-NEXT:    fsel f1, f0, f3, f4
857; NO-FAST-P9-NEXT:    blr
858entry:
859  %cmp = fcmp nnan ninf nsz ole float %a, %b
860  %cond = select i1 %cmp, float %c, float %d
861  ret float %cond
862}
863
864define double @select_fast_ole_double(double %a, double %b, double %c, double %d) {
865; FAST-P8-LABEL: select_fast_ole_double:
866; FAST-P8:       # %bb.0: # %entry
867; FAST-P8-NEXT:    xssubdp f0, f2, f1
868; FAST-P8-NEXT:    fsel f1, f0, f3, f4
869; FAST-P8-NEXT:    blr
870;
871; FAST-P9-LABEL: select_fast_ole_double:
872; FAST-P9:       # %bb.0: # %entry
873; FAST-P9-NEXT:    xssubdp f0, f2, f1
874; FAST-P9-NEXT:    fsel f1, f0, f3, f4
875; FAST-P9-NEXT:    blr
876;
877; NO-FAST-P8-LABEL: select_fast_ole_double:
878; NO-FAST-P8:       # %bb.0: # %entry
879; NO-FAST-P8-NEXT:    xssubdp f0, f2, f1
880; NO-FAST-P8-NEXT:    fsel f1, f0, f3, f4
881; NO-FAST-P8-NEXT:    blr
882;
883; NO-FAST-P9-LABEL: select_fast_ole_double:
884; NO-FAST-P9:       # %bb.0: # %entry
885; NO-FAST-P9-NEXT:    xssubdp f0, f2, f1
886; NO-FAST-P9-NEXT:    fsel f1, f0, f3, f4
887; NO-FAST-P9-NEXT:    blr
888entry:
889  %cmp = fcmp nnan ninf nsz ole double %a, %b
890  %cond = select i1 %cmp, double %c, double %d
891  ret double %cond
892}
893
894; Test RHS is 1.000000e+00
895define double @onecmp1(double %a, double %y, double %z) {
896; FAST-P8-LABEL: onecmp1:
897; FAST-P8:       # %bb.0: # %entry
898; FAST-P8-NEXT:    addis r3, r2, .LCPI24_0@toc@ha
899; FAST-P8-NEXT:    lfs f0, .LCPI24_0@toc@l(r3)
900; FAST-P8-NEXT:    xssubdp f0, f1, f0
901; FAST-P8-NEXT:    fsel f1, f0, f2, f3
902; FAST-P8-NEXT:    blr
903;
904; FAST-P9-LABEL: onecmp1:
905; FAST-P9:       # %bb.0: # %entry
906; FAST-P9-NEXT:    addis r3, r2, .LCPI24_0@toc@ha
907; FAST-P9-NEXT:    lfs f0, .LCPI24_0@toc@l(r3)
908; FAST-P9-NEXT:    xssubdp f0, f1, f0
909; FAST-P9-NEXT:    fsel f1, f0, f2, f3
910; FAST-P9-NEXT:    blr
911;
912; NO-FAST-P8-LABEL: onecmp1:
913; NO-FAST-P8:       # %bb.0: # %entry
914; NO-FAST-P8-NEXT:    addis r3, r2, .LCPI24_0@toc@ha
915; NO-FAST-P8-NEXT:    lfs f0, .LCPI24_0@toc@l(r3)
916; NO-FAST-P8-NEXT:    fcmpu cr0, f1, f0
917; NO-FAST-P8-NEXT:    cror 4*cr5+lt, lt, un
918; NO-FAST-P8-NEXT:    bc 12, 4*cr5+lt, .LBB24_2
919; NO-FAST-P8-NEXT:  # %bb.1: # %entry
920; NO-FAST-P8-NEXT:    fmr f3, f2
921; NO-FAST-P8-NEXT:  .LBB24_2: # %entry
922; NO-FAST-P8-NEXT:    fmr f1, f3
923; NO-FAST-P8-NEXT:    blr
924;
925; NO-FAST-P9-LABEL: onecmp1:
926; NO-FAST-P9:       # %bb.0: # %entry
927; NO-FAST-P9-NEXT:    addis r3, r2, .LCPI24_0@toc@ha
928; NO-FAST-P9-NEXT:    lfs f0, .LCPI24_0@toc@l(r3)
929; NO-FAST-P9-NEXT:    fcmpu cr0, f1, f0
930; NO-FAST-P9-NEXT:    cror 4*cr5+lt, lt, un
931; NO-FAST-P9-NEXT:    bc 12, 4*cr5+lt, .LBB24_2
932; NO-FAST-P9-NEXT:  # %bb.1: # %entry
933; NO-FAST-P9-NEXT:    fmr f3, f2
934; NO-FAST-P9-NEXT:  .LBB24_2: # %entry
935; NO-FAST-P9-NEXT:    fmr f1, f3
936; NO-FAST-P9-NEXT:    blr
937entry:
938  %cmp = fcmp ult double %a, 1.000000e+00
939  %z.y = select i1 %cmp, double %z, double %y
940  ret double %z.y
941}
942
943define double @onecmp2(double %a, double %y, double %z) {
944; FAST-P8-LABEL: onecmp2:
945; FAST-P8:       # %bb.0: # %entry
946; FAST-P8-NEXT:    addis r3, r2, .LCPI25_0@toc@ha
947; FAST-P8-NEXT:    lfs f0, .LCPI25_0@toc@l(r3)
948; FAST-P8-NEXT:    xssubdp f0, f0, f1
949; FAST-P8-NEXT:    fsel f1, f0, f3, f2
950; FAST-P8-NEXT:    blr
951;
952; FAST-P9-LABEL: onecmp2:
953; FAST-P9:       # %bb.0: # %entry
954; FAST-P9-NEXT:    addis r3, r2, .LCPI25_0@toc@ha
955; FAST-P9-NEXT:    lfs f0, .LCPI25_0@toc@l(r3)
956; FAST-P9-NEXT:    xssubdp f0, f0, f1
957; FAST-P9-NEXT:    fsel f1, f0, f3, f2
958; FAST-P9-NEXT:    blr
959;
960; NO-FAST-P8-LABEL: onecmp2:
961; NO-FAST-P8:       # %bb.0: # %entry
962; NO-FAST-P8-NEXT:    addis r3, r2, .LCPI25_0@toc@ha
963; NO-FAST-P8-NEXT:    lfs f0, .LCPI25_0@toc@l(r3)
964; NO-FAST-P8-NEXT:    xscmpudp cr0, f1, f0
965; NO-FAST-P8-NEXT:    fmr f1, f2
966; NO-FAST-P8-NEXT:    bgtlr cr0
967; NO-FAST-P8-NEXT:  # %bb.1: # %entry
968; NO-FAST-P8-NEXT:    fmr f1, f3
969; NO-FAST-P8-NEXT:    blr
970;
971; NO-FAST-P9-LABEL: onecmp2:
972; NO-FAST-P9:       # %bb.0: # %entry
973; NO-FAST-P9-NEXT:    addis r3, r2, .LCPI25_0@toc@ha
974; NO-FAST-P9-NEXT:    lfs f0, .LCPI25_0@toc@l(r3)
975; NO-FAST-P9-NEXT:    xscmpudp cr0, f1, f0
976; NO-FAST-P9-NEXT:    bgt cr0, .LBB25_2
977; NO-FAST-P9-NEXT:  # %bb.1: # %entry
978; NO-FAST-P9-NEXT:    fmr f2, f3
979; NO-FAST-P9-NEXT:  .LBB25_2: # %entry
980; NO-FAST-P9-NEXT:    fmr f1, f2
981; NO-FAST-P9-NEXT:    blr
982entry:
983  %cmp = fcmp ogt double %a, 1.000000e+00
984  %y.z = select i1 %cmp, double %y, double %z
985  ret double %y.z
986}
987
988define double @onecmp3(double %a, double %y, double %z) {
989; FAST-P8-LABEL: onecmp3:
990; FAST-P8:       # %bb.0: # %entry
991; FAST-P8-NEXT:    addis r3, r2, .LCPI26_0@toc@ha
992; FAST-P8-NEXT:    lfs f0, .LCPI26_0@toc@l(r3)
993; FAST-P8-NEXT:    xssubdp f0, f1, f0
994; FAST-P8-NEXT:    xsnegdp f1, f0
995; FAST-P8-NEXT:    fsel f0, f0, f2, f3
996; FAST-P8-NEXT:    fsel f1, f1, f0, f3
997; FAST-P8-NEXT:    blr
998;
999; FAST-P9-LABEL: onecmp3:
1000; FAST-P9:       # %bb.0: # %entry
1001; FAST-P9-NEXT:    addis r3, r2, .LCPI26_0@toc@ha
1002; FAST-P9-NEXT:    lfs f0, .LCPI26_0@toc@l(r3)
1003; FAST-P9-NEXT:    xssubdp f0, f1, f0
1004; FAST-P9-NEXT:    fsel f1, f0, f2, f3
1005; FAST-P9-NEXT:    xsnegdp f0, f0
1006; FAST-P9-NEXT:    fsel f1, f0, f1, f3
1007; FAST-P9-NEXT:    blr
1008;
1009; NO-FAST-P8-LABEL: onecmp3:
1010; NO-FAST-P8:       # %bb.0: # %entry
1011; NO-FAST-P8-NEXT:    addis r3, r2, .LCPI26_0@toc@ha
1012; NO-FAST-P8-NEXT:    lfs f0, .LCPI26_0@toc@l(r3)
1013; NO-FAST-P8-NEXT:    xscmpudp cr0, f1, f0
1014; NO-FAST-P8-NEXT:    fmr f1, f2
1015; NO-FAST-P8-NEXT:    beqlr cr0
1016; NO-FAST-P8-NEXT:  # %bb.1: # %entry
1017; NO-FAST-P8-NEXT:    fmr f1, f3
1018; NO-FAST-P8-NEXT:    blr
1019;
1020; NO-FAST-P9-LABEL: onecmp3:
1021; NO-FAST-P9:       # %bb.0: # %entry
1022; NO-FAST-P9-NEXT:    addis r3, r2, .LCPI26_0@toc@ha
1023; NO-FAST-P9-NEXT:    lfs f0, .LCPI26_0@toc@l(r3)
1024; NO-FAST-P9-NEXT:    xscmpudp cr0, f1, f0
1025; NO-FAST-P9-NEXT:    beq cr0, .LBB26_2
1026; NO-FAST-P9-NEXT:  # %bb.1: # %entry
1027; NO-FAST-P9-NEXT:    fmr f2, f3
1028; NO-FAST-P9-NEXT:  .LBB26_2: # %entry
1029; NO-FAST-P9-NEXT:    fmr f1, f2
1030; NO-FAST-P9-NEXT:    blr
1031entry:
1032  %cmp = fcmp oeq double %a, 1.000000e+00
1033  %y.z = select i1 %cmp, double %y, double %z
1034  ret double %y.z
1035}
1036