xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/sse-minmax.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mtriple=x86_64-apple-darwin -mcpu=nehalem -asm-verbose=false  | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mtriple=x86_64-apple-darwin -mcpu=nehalem -asm-verbose=false -enable-unsafe-fp-math -enable-no-nans-fp-math  | FileCheck -check-prefix=UNSAFE %s
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mtriple=x86_64-apple-darwin -mcpu=nehalem -asm-verbose=false -enable-no-nans-fp-math  | FileCheck -check-prefix=FINITE %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; Some of these patterns can be matched as SSE min or max. Some of
6*9880d681SAndroid Build Coastguard Worker; them can be matched provided that the operands are swapped.
7*9880d681SAndroid Build Coastguard Worker; Some of them can't be matched at all and require a comparison
8*9880d681SAndroid Build Coastguard Worker; and a conditional branch.
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker; The naming convention is {,x_,y_}{o,u}{gt,lt,ge,le}{,_inverse}
11*9880d681SAndroid Build Coastguard Worker;  _x: use 0.0 instead of %y
12*9880d681SAndroid Build Coastguard Worker;  _y: use -0.0 instead of %y
13*9880d681SAndroid Build Coastguard Worker; _inverse : swap the arms of the select.
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ogt:
16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd %xmm1, %xmm0
17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
18*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ogt:
19*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd %xmm1, %xmm0
20*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
21*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ogt:
22*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd %xmm1, %xmm0
23*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
24*9880d681SAndroid Build Coastguard Workerdefine double @ogt(double %x, double %y) nounwind {
25*9880d681SAndroid Build Coastguard Worker  %c = fcmp ogt double %x, %y
26*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double %y
27*9880d681SAndroid Build Coastguard Worker  ret double %d
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      olt:
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd %xmm1, %xmm0
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
33*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      olt:
34*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd %xmm1, %xmm0
35*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
36*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      olt:
37*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd %xmm1, %xmm0
38*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
39*9880d681SAndroid Build Coastguard Workerdefine double @olt(double %x, double %y) nounwind {
40*9880d681SAndroid Build Coastguard Worker  %c = fcmp olt double %x, %y
41*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double %y
42*9880d681SAndroid Build Coastguard Worker  ret double %d
43*9880d681SAndroid Build Coastguard Worker}
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ogt_inverse:
46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd  %xmm0, %xmm1
47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movap{{[sd]}} %xmm1, %xmm0
48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
49*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ogt_inverse:
50*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd  %xmm1, %xmm0
51*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
52*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ogt_inverse:
53*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd  %xmm0, %xmm1
54*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}} %xmm1, %xmm0
55*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
56*9880d681SAndroid Build Coastguard Workerdefine double @ogt_inverse(double %x, double %y) nounwind {
57*9880d681SAndroid Build Coastguard Worker  %c = fcmp ogt double %x, %y
58*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %y, double %x
59*9880d681SAndroid Build Coastguard Worker  ret double %d
60*9880d681SAndroid Build Coastguard Worker}
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      olt_inverse:
63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd  %xmm0, %xmm1
64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movap{{[sd]}} %xmm1, %xmm0
65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
66*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      olt_inverse:
67*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd  %xmm1, %xmm0
68*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
69*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      olt_inverse:
70*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd  %xmm0, %xmm1
71*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}} %xmm1, %xmm0
72*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
73*9880d681SAndroid Build Coastguard Workerdefine double @olt_inverse(double %x, double %y) nounwind {
74*9880d681SAndroid Build Coastguard Worker  %c = fcmp olt double %x, %y
75*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %y, double %x
76*9880d681SAndroid Build Coastguard Worker  ret double %d
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      oge:
80*9880d681SAndroid Build Coastguard Worker; CHECK: cmplesd %xmm0
81*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      oge:
82*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd	%xmm1, %xmm0
83*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
84*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      oge:
85*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd	%xmm1, %xmm0
86*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
87*9880d681SAndroid Build Coastguard Workerdefine double @oge(double %x, double %y) nounwind {
88*9880d681SAndroid Build Coastguard Worker  %c = fcmp oge double %x, %y
89*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double %y
90*9880d681SAndroid Build Coastguard Worker  ret double %d
91*9880d681SAndroid Build Coastguard Worker}
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ole:
94*9880d681SAndroid Build Coastguard Worker; CHECK: cmplesd %xmm1
95*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ole:
96*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd %xmm1, %xmm0
97*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ole:
98*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd %xmm1, %xmm0
99*9880d681SAndroid Build Coastguard Workerdefine double @ole(double %x, double %y) nounwind {
100*9880d681SAndroid Build Coastguard Worker  %c = fcmp ole double %x, %y
101*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double %y
102*9880d681SAndroid Build Coastguard Worker  ret double %d
103*9880d681SAndroid Build Coastguard Worker}
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      oge_inverse:
106*9880d681SAndroid Build Coastguard Worker; CHECK: cmplesd %xmm0
107*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      oge_inverse:
108*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd %xmm1, %xmm0
109*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
110*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      oge_inverse:
111*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd %xmm0, %xmm1
112*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}} %xmm1, %xmm0
113*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
114*9880d681SAndroid Build Coastguard Workerdefine double @oge_inverse(double %x, double %y) nounwind {
115*9880d681SAndroid Build Coastguard Worker  %c = fcmp oge double %x, %y
116*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %y, double %x
117*9880d681SAndroid Build Coastguard Worker  ret double %d
118*9880d681SAndroid Build Coastguard Worker}
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ole_inverse:
121*9880d681SAndroid Build Coastguard Worker; CHECK: cmplesd %xmm1
122*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ole_inverse:
123*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd %xmm1, %xmm0
124*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
125*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ole_inverse:
126*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd %xmm0, %xmm1
127*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}} %xmm1, %xmm0
128*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
129*9880d681SAndroid Build Coastguard Workerdefine double @ole_inverse(double %x, double %y) nounwind {
130*9880d681SAndroid Build Coastguard Worker  %c = fcmp ole double %x, %y
131*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %y, double %x
132*9880d681SAndroid Build Coastguard Worker  ret double %d
133*9880d681SAndroid Build Coastguard Worker}
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ogt_x:
136*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorp{{[sd]}} %xmm1, %xmm1
137*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd %xmm1, %xmm0
138*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
139*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ogt_x:
140*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
141*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd %xmm1, %xmm0
142*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
143*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ogt_x:
144*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
145*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd %xmm1, %xmm0
146*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
147*9880d681SAndroid Build Coastguard Workerdefine double @ogt_x(double %x) nounwind {
148*9880d681SAndroid Build Coastguard Worker  %c = fcmp ogt double %x, 0.000000e+00
149*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double 0.000000e+00
150*9880d681SAndroid Build Coastguard Worker  ret double %d
151*9880d681SAndroid Build Coastguard Worker}
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      olt_x:
154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorp{{[sd]}} %xmm1, %xmm1
155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd %xmm1, %xmm0
156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
157*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      olt_x:
158*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
159*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd %xmm1, %xmm0
160*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
161*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      olt_x:
162*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
163*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd %xmm1, %xmm0
164*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
165*9880d681SAndroid Build Coastguard Workerdefine double @olt_x(double %x) nounwind {
166*9880d681SAndroid Build Coastguard Worker  %c = fcmp olt double %x, 0.000000e+00
167*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double 0.000000e+00
168*9880d681SAndroid Build Coastguard Worker  ret double %d
169*9880d681SAndroid Build Coastguard Worker}
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ogt_inverse_x:
172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
173*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd  %xmm0, %xmm1
174*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movap{{[sd]}} %xmm1, %xmm0
175*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
176*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ogt_inverse_x:
177*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
178*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd  %xmm1, %xmm0
179*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
180*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ogt_inverse_x:
181*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
182*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd  %xmm0, %xmm1
183*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}} %xmm1, %xmm0
184*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
185*9880d681SAndroid Build Coastguard Workerdefine double @ogt_inverse_x(double %x) nounwind {
186*9880d681SAndroid Build Coastguard Worker  %c = fcmp ogt double %x, 0.000000e+00
187*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double 0.000000e+00, double %x
188*9880d681SAndroid Build Coastguard Worker  ret double %d
189*9880d681SAndroid Build Coastguard Worker}
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      olt_inverse_x:
192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
193*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd  %xmm0, %xmm1
194*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movap{{[sd]}} %xmm1, %xmm0
195*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
196*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      olt_inverse_x:
197*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
198*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd  %xmm1, %xmm0
199*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
200*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      olt_inverse_x:
201*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
202*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd  %xmm0, %xmm1
203*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}} %xmm1, %xmm0
204*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
205*9880d681SAndroid Build Coastguard Workerdefine double @olt_inverse_x(double %x) nounwind {
206*9880d681SAndroid Build Coastguard Worker  %c = fcmp olt double %x, 0.000000e+00
207*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double 0.000000e+00, double %x
208*9880d681SAndroid Build Coastguard Worker  ret double %d
209*9880d681SAndroid Build Coastguard Worker}
210*9880d681SAndroid Build Coastguard Worker
211*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      oge_x:
212*9880d681SAndroid Build Coastguard Worker; CHECK:      cmplesd %xmm
213*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andpd
214*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      oge_x:
215*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
216*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd   %xmm1, %xmm0
217*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
218*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      oge_x:
219*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
220*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd   %xmm1, %xmm0
221*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
222*9880d681SAndroid Build Coastguard Workerdefine double @oge_x(double %x) nounwind {
223*9880d681SAndroid Build Coastguard Worker  %c = fcmp oge double %x, 0.000000e+00
224*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double 0.000000e+00
225*9880d681SAndroid Build Coastguard Worker  ret double %d
226*9880d681SAndroid Build Coastguard Worker}
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ole_x:
229*9880d681SAndroid Build Coastguard Worker; CHECK:      cmplesd %xmm
230*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andpd
231*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ole_x:
232*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
233*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd %xmm1, %xmm0
234*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
235*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ole_x:
236*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
237*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd %xmm1, %xmm0
238*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
239*9880d681SAndroid Build Coastguard Workerdefine double @ole_x(double %x) nounwind {
240*9880d681SAndroid Build Coastguard Worker  %c = fcmp ole double %x, 0.000000e+00
241*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double 0.000000e+00
242*9880d681SAndroid Build Coastguard Worker  ret double %d
243*9880d681SAndroid Build Coastguard Worker}
244*9880d681SAndroid Build Coastguard Worker
245*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      oge_inverse_x:
246*9880d681SAndroid Build Coastguard Worker; CHECK:      cmplesd %xmm
247*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andnpd
248*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      oge_inverse_x:
249*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
250*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd   %xmm1, %xmm0
251*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
252*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      oge_inverse_x:
253*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
254*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd   %xmm0, %xmm1
255*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
256*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
257*9880d681SAndroid Build Coastguard Workerdefine double @oge_inverse_x(double %x) nounwind {
258*9880d681SAndroid Build Coastguard Worker  %c = fcmp oge double %x, 0.000000e+00
259*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double 0.000000e+00, double %x
260*9880d681SAndroid Build Coastguard Worker  ret double %d
261*9880d681SAndroid Build Coastguard Worker}
262*9880d681SAndroid Build Coastguard Worker
263*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ole_inverse_x:
264*9880d681SAndroid Build Coastguard Worker; CHECK:      cmplesd %xmm
265*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ole_inverse_x:
266*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
267*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd   %xmm1, %xmm0
268*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
269*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ole_inverse_x:
270*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
271*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd   %xmm0, %xmm1
272*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
273*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
274*9880d681SAndroid Build Coastguard Workerdefine double @ole_inverse_x(double %x) nounwind {
275*9880d681SAndroid Build Coastguard Worker  %c = fcmp ole double %x, 0.000000e+00
276*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double 0.000000e+00, double %x
277*9880d681SAndroid Build Coastguard Worker  ret double %d
278*9880d681SAndroid Build Coastguard Worker}
279*9880d681SAndroid Build Coastguard Worker
280*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ugt:
281*9880d681SAndroid Build Coastguard Worker; CHECK:      cmpnlesd %xmm1
282*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ugt:
283*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd   %xmm1, %xmm0
284*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
285*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ugt:
286*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd   %xmm1, %xmm0
287*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
288*9880d681SAndroid Build Coastguard Workerdefine double @ugt(double %x, double %y) nounwind {
289*9880d681SAndroid Build Coastguard Worker  %c = fcmp ugt double %x, %y
290*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double %y
291*9880d681SAndroid Build Coastguard Worker  ret double %d
292*9880d681SAndroid Build Coastguard Worker}
293*9880d681SAndroid Build Coastguard Worker
294*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ult:
295*9880d681SAndroid Build Coastguard Worker; CHECK:      cmpnlesd %xmm0
296*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ult:
297*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd   %xmm1, %xmm0
298*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
299*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ult:
300*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd   %xmm1, %xmm0
301*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
302*9880d681SAndroid Build Coastguard Workerdefine double @ult(double %x, double %y) nounwind {
303*9880d681SAndroid Build Coastguard Worker  %c = fcmp ult double %x, %y
304*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double %y
305*9880d681SAndroid Build Coastguard Worker  ret double %d
306*9880d681SAndroid Build Coastguard Worker}
307*9880d681SAndroid Build Coastguard Worker
308*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ugt_inverse:
309*9880d681SAndroid Build Coastguard Worker; CHECK:      cmpnlesd %xmm1
310*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ugt_inverse:
311*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd   %xmm1, %xmm0
312*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
313*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ugt_inverse:
314*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd   %xmm0, %xmm1
315*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
316*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
317*9880d681SAndroid Build Coastguard Workerdefine double @ugt_inverse(double %x, double %y) nounwind {
318*9880d681SAndroid Build Coastguard Worker  %c = fcmp ugt double %x, %y
319*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %y, double %x
320*9880d681SAndroid Build Coastguard Worker  ret double %d
321*9880d681SAndroid Build Coastguard Worker}
322*9880d681SAndroid Build Coastguard Worker
323*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ult_inverse:
324*9880d681SAndroid Build Coastguard Worker; CHECK:      cmpnlesd %xmm0
325*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ult_inverse:
326*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd   %xmm1, %xmm0
327*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
328*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ult_inverse:
329*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd   %xmm0, %xmm1
330*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
331*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
332*9880d681SAndroid Build Coastguard Workerdefine double @ult_inverse(double %x, double %y) nounwind {
333*9880d681SAndroid Build Coastguard Worker  %c = fcmp ult double %x, %y
334*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %y, double %x
335*9880d681SAndroid Build Coastguard Worker  ret double %d
336*9880d681SAndroid Build Coastguard Worker}
337*9880d681SAndroid Build Coastguard Worker
338*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      uge:
339*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd   %xmm0, %xmm1
340*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movap{{[sd]}}  %xmm1, %xmm0
341*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
342*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      uge:
343*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd   %xmm1, %xmm0
344*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
345*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      uge:
346*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd   %xmm1, %xmm0
347*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
348*9880d681SAndroid Build Coastguard Workerdefine double @uge(double %x, double %y) nounwind {
349*9880d681SAndroid Build Coastguard Worker  %c = fcmp uge double %x, %y
350*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double %y
351*9880d681SAndroid Build Coastguard Worker  ret double %d
352*9880d681SAndroid Build Coastguard Worker}
353*9880d681SAndroid Build Coastguard Worker
354*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ule:
355*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd  %xmm0, %xmm1
356*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movap{{[sd]}} %xmm1, %xmm0
357*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
358*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ule:
359*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd   %xmm1, %xmm0
360*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
361*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ule:
362*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd   %xmm1, %xmm0
363*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
364*9880d681SAndroid Build Coastguard Workerdefine double @ule(double %x, double %y) nounwind {
365*9880d681SAndroid Build Coastguard Worker  %c = fcmp ule double %x, %y
366*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double %y
367*9880d681SAndroid Build Coastguard Worker  ret double %d
368*9880d681SAndroid Build Coastguard Worker}
369*9880d681SAndroid Build Coastguard Worker
370*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      uge_inverse:
371*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd %xmm1, %xmm0
372*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
373*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      uge_inverse:
374*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd %xmm1, %xmm0
375*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
376*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      uge_inverse:
377*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd %xmm0, %xmm1
378*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}} %xmm1, %xmm0
379*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
380*9880d681SAndroid Build Coastguard Workerdefine double @uge_inverse(double %x, double %y) nounwind {
381*9880d681SAndroid Build Coastguard Worker  %c = fcmp uge double %x, %y
382*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %y, double %x
383*9880d681SAndroid Build Coastguard Worker  ret double %d
384*9880d681SAndroid Build Coastguard Worker}
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ule_inverse:
387*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd %xmm1, %xmm0
388*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
389*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ule_inverse:
390*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd %xmm1, %xmm0
391*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
392*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ule_inverse:
393*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd %xmm0, %xmm1
394*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}} %xmm1, %xmm0
395*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
396*9880d681SAndroid Build Coastguard Workerdefine double @ule_inverse(double %x, double %y) nounwind {
397*9880d681SAndroid Build Coastguard Worker  %c = fcmp ule double %x, %y
398*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %y, double %x
399*9880d681SAndroid Build Coastguard Worker  ret double %d
400*9880d681SAndroid Build Coastguard Worker}
401*9880d681SAndroid Build Coastguard Worker
402*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ugt_x:
403*9880d681SAndroid Build Coastguard Worker; CHECK:      cmpnlesd %xmm
404*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andpd
405*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ugt_x:
406*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
407*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd   %xmm1, %xmm0
408*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
409*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ugt_x:
410*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
411*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd   %xmm1, %xmm0
412*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
413*9880d681SAndroid Build Coastguard Workerdefine double @ugt_x(double %x) nounwind {
414*9880d681SAndroid Build Coastguard Worker  %c = fcmp ugt double %x, 0.000000e+00
415*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double 0.000000e+00
416*9880d681SAndroid Build Coastguard Worker  ret double %d
417*9880d681SAndroid Build Coastguard Worker}
418*9880d681SAndroid Build Coastguard Worker
419*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ult_x:
420*9880d681SAndroid Build Coastguard Worker; CHECK:      cmpnlesd %xmm
421*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andpd
422*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ult_x:
423*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
424*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd   %xmm1, %xmm0
425*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
426*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ult_x:
427*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
428*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd   %xmm1, %xmm0
429*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
430*9880d681SAndroid Build Coastguard Workerdefine double @ult_x(double %x) nounwind {
431*9880d681SAndroid Build Coastguard Worker  %c = fcmp ult double %x, 0.000000e+00
432*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double 0.000000e+00
433*9880d681SAndroid Build Coastguard Worker  ret double %d
434*9880d681SAndroid Build Coastguard Worker}
435*9880d681SAndroid Build Coastguard Worker
436*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ugt_inverse_x:
437*9880d681SAndroid Build Coastguard Worker; CHECK:      cmpnlesd %xmm
438*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andnpd
439*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ugt_inverse_x:
440*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
441*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd   %xmm1, %xmm0
442*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
443*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ugt_inverse_x:
444*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
445*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd   %xmm0, %xmm1
446*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
447*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
448*9880d681SAndroid Build Coastguard Workerdefine double @ugt_inverse_x(double %x) nounwind {
449*9880d681SAndroid Build Coastguard Worker  %c = fcmp ugt double %x, 0.000000e+00
450*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double 0.000000e+00, double %x
451*9880d681SAndroid Build Coastguard Worker  ret double %d
452*9880d681SAndroid Build Coastguard Worker}
453*9880d681SAndroid Build Coastguard Worker
454*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ult_inverse_x:
455*9880d681SAndroid Build Coastguard Worker; CHECK:      cmpnlesd %xmm
456*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andnpd
457*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ult_inverse_x:
458*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
459*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd   %xmm1, %xmm0
460*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
461*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ult_inverse_x:
462*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
463*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd   %xmm0, %xmm1
464*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
465*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
466*9880d681SAndroid Build Coastguard Workerdefine double @ult_inverse_x(double %x) nounwind {
467*9880d681SAndroid Build Coastguard Worker  %c = fcmp ult double %x, 0.000000e+00
468*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double 0.000000e+00, double %x
469*9880d681SAndroid Build Coastguard Worker  ret double %d
470*9880d681SAndroid Build Coastguard Worker}
471*9880d681SAndroid Build Coastguard Worker
472*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      uge_x:
473*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
474*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd  %xmm0, %xmm1
475*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movap{{[sd]}} %xmm1, %xmm0
476*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
477*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      uge_x:
478*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
479*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd  %xmm1, %xmm0
480*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
481*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      uge_x:
482*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
483*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd  %xmm1, %xmm0
484*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
485*9880d681SAndroid Build Coastguard Workerdefine double @uge_x(double %x) nounwind {
486*9880d681SAndroid Build Coastguard Worker  %c = fcmp uge double %x, 0.000000e+00
487*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double 0.000000e+00
488*9880d681SAndroid Build Coastguard Worker  ret double %d
489*9880d681SAndroid Build Coastguard Worker}
490*9880d681SAndroid Build Coastguard Worker
491*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ule_x:
492*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
493*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd  %xmm0, %xmm1
494*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movap{{[sd]}} %xmm1, %xmm0
495*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
496*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ule_x:
497*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
498*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd  %xmm1, %xmm0
499*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
500*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ule_x:
501*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
502*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd  %xmm1, %xmm0
503*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
504*9880d681SAndroid Build Coastguard Workerdefine double @ule_x(double %x) nounwind {
505*9880d681SAndroid Build Coastguard Worker  %c = fcmp ule double %x, 0.000000e+00
506*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double 0.000000e+00
507*9880d681SAndroid Build Coastguard Worker  ret double %d
508*9880d681SAndroid Build Coastguard Worker}
509*9880d681SAndroid Build Coastguard Worker
510*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      uge_inverse_x:
511*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorp{{[sd]}} %xmm1, %xmm1
512*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd %xmm1, %xmm0
513*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
514*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      uge_inverse_x:
515*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
516*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd %xmm1, %xmm0
517*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
518*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      uge_inverse_x:
519*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
520*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd %xmm0, %xmm1
521*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}} %xmm1, %xmm0
522*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
523*9880d681SAndroid Build Coastguard Workerdefine double @uge_inverse_x(double %x) nounwind {
524*9880d681SAndroid Build Coastguard Worker  %c = fcmp uge double %x, 0.000000e+00
525*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double 0.000000e+00, double %x
526*9880d681SAndroid Build Coastguard Worker  ret double %d
527*9880d681SAndroid Build Coastguard Worker}
528*9880d681SAndroid Build Coastguard Worker
529*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ule_inverse_x:
530*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorp{{[sd]}} %xmm1, %xmm1
531*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd %xmm1, %xmm0
532*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
533*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ule_inverse_x:
534*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
535*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd %xmm1, %xmm0
536*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
537*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ule_inverse_x:
538*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
539*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd %xmm0, %xmm1
540*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}} %xmm1, %xmm0
541*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
542*9880d681SAndroid Build Coastguard Workerdefine double @ule_inverse_x(double %x) nounwind {
543*9880d681SAndroid Build Coastguard Worker  %c = fcmp ule double %x, 0.000000e+00
544*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double 0.000000e+00, double %x
545*9880d681SAndroid Build Coastguard Worker  ret double %d
546*9880d681SAndroid Build Coastguard Worker}
547*9880d681SAndroid Build Coastguard Worker
548*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ogt_y:
549*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd {{[^,]*}}, %xmm0
550*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
551*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ogt_y:
552*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd {{[^,]*}}, %xmm0
553*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
554*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ogt_y:
555*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd {{[^,]*}}, %xmm0
556*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
557*9880d681SAndroid Build Coastguard Workerdefine double @ogt_y(double %x) nounwind {
558*9880d681SAndroid Build Coastguard Worker  %c = fcmp ogt double %x, -0.000000e+00
559*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double -0.000000e+00
560*9880d681SAndroid Build Coastguard Worker  ret double %d
561*9880d681SAndroid Build Coastguard Worker}
562*9880d681SAndroid Build Coastguard Worker
563*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      olt_y:
564*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd {{[^,]*}}, %xmm0
565*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
566*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      olt_y:
567*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd {{[^,]*}}, %xmm0
568*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
569*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      olt_y:
570*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd {{[^,]*}}, %xmm0
571*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
572*9880d681SAndroid Build Coastguard Workerdefine double @olt_y(double %x) nounwind {
573*9880d681SAndroid Build Coastguard Worker  %c = fcmp olt double %x, -0.000000e+00
574*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double -0.000000e+00
575*9880d681SAndroid Build Coastguard Worker  ret double %d
576*9880d681SAndroid Build Coastguard Worker}
577*9880d681SAndroid Build Coastguard Worker
578*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ogt_inverse_y:
579*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movsd  {{[^,]*}}, %xmm1
580*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd  %xmm0, %xmm1
581*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movap{{[sd]}} %xmm1, %xmm0
582*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
583*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ogt_inverse_y:
584*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd  {{[^,]*}}, %xmm0
585*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
586*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ogt_inverse_y:
587*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd  {{[^,]*}}, %xmm1
588*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd  %xmm0, %xmm1
589*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}} %xmm1, %xmm0
590*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
591*9880d681SAndroid Build Coastguard Workerdefine double @ogt_inverse_y(double %x) nounwind {
592*9880d681SAndroid Build Coastguard Worker  %c = fcmp ogt double %x, -0.000000e+00
593*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double -0.000000e+00, double %x
594*9880d681SAndroid Build Coastguard Worker  ret double %d
595*9880d681SAndroid Build Coastguard Worker}
596*9880d681SAndroid Build Coastguard Worker
597*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      olt_inverse_y:
598*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movsd  {{[^,]*}}, %xmm1
599*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd  %xmm0, %xmm1
600*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movap{{[sd]}} %xmm1, %xmm0
601*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
602*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      olt_inverse_y:
603*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd  {{[^,]*}}, %xmm0
604*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
605*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      olt_inverse_y:
606*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd  {{[^,]*}}, %xmm1
607*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd  %xmm0, %xmm1
608*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}} %xmm1, %xmm0
609*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
610*9880d681SAndroid Build Coastguard Workerdefine double @olt_inverse_y(double %x) nounwind {
611*9880d681SAndroid Build Coastguard Worker  %c = fcmp olt double %x, -0.000000e+00
612*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double -0.000000e+00, double %x
613*9880d681SAndroid Build Coastguard Worker  ret double %d
614*9880d681SAndroid Build Coastguard Worker}
615*9880d681SAndroid Build Coastguard Worker
616*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      oge_y:
617*9880d681SAndroid Build Coastguard Worker; CHECK:      cmplesd %xmm0
618*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      oge_y:
619*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd   {{[^,]*}}, %xmm0
620*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
621*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      oge_y:
622*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd   {{[^,]*}}, %xmm0
623*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
624*9880d681SAndroid Build Coastguard Workerdefine double @oge_y(double %x) nounwind {
625*9880d681SAndroid Build Coastguard Worker  %c = fcmp oge double %x, -0.000000e+00
626*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double -0.000000e+00
627*9880d681SAndroid Build Coastguard Worker  ret double %d
628*9880d681SAndroid Build Coastguard Worker}
629*9880d681SAndroid Build Coastguard Worker
630*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ole_y:
631*9880d681SAndroid Build Coastguard Worker; CHECK:      cmplesd %xmm
632*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ole_y:
633*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd {{[^,]*}}, %xmm0
634*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
635*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ole_y:
636*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd {{[^,]*}}, %xmm0
637*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
638*9880d681SAndroid Build Coastguard Workerdefine double @ole_y(double %x) nounwind {
639*9880d681SAndroid Build Coastguard Worker  %c = fcmp ole double %x, -0.000000e+00
640*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double -0.000000e+00
641*9880d681SAndroid Build Coastguard Worker  ret double %d
642*9880d681SAndroid Build Coastguard Worker}
643*9880d681SAndroid Build Coastguard Worker
644*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      oge_inverse_y:
645*9880d681SAndroid Build Coastguard Worker; CHECK:      cmplesd %xmm0
646*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      oge_inverse_y:
647*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd   {{[^,]*}}, %xmm0
648*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
649*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      oge_inverse_y:
650*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd   {{[^,]*}}, %xmm1
651*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd   %xmm0, %xmm1
652*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
653*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
654*9880d681SAndroid Build Coastguard Workerdefine double @oge_inverse_y(double %x) nounwind {
655*9880d681SAndroid Build Coastguard Worker  %c = fcmp oge double %x, -0.000000e+00
656*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double -0.000000e+00, double %x
657*9880d681SAndroid Build Coastguard Worker  ret double %d
658*9880d681SAndroid Build Coastguard Worker}
659*9880d681SAndroid Build Coastguard Worker
660*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ole_inverse_y:
661*9880d681SAndroid Build Coastguard Worker; CHECK:      cmplesd %xmm
662*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ole_inverse_y:
663*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd   {{[^,]*}}, %xmm0
664*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
665*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ole_inverse_y:
666*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd   {{[^,]*}}, %xmm1
667*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd   %xmm0, %xmm1
668*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
669*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
670*9880d681SAndroid Build Coastguard Workerdefine double @ole_inverse_y(double %x) nounwind {
671*9880d681SAndroid Build Coastguard Worker  %c = fcmp ole double %x, -0.000000e+00
672*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double -0.000000e+00, double %x
673*9880d681SAndroid Build Coastguard Worker  ret double %d
674*9880d681SAndroid Build Coastguard Worker}
675*9880d681SAndroid Build Coastguard Worker
676*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ugt_y:
677*9880d681SAndroid Build Coastguard Worker; CHECK:      cmpnlesd %xmm
678*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ugt_y:
679*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd   {{[^,]*}}, %xmm0
680*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
681*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ugt_y:
682*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd   {{[^,]*}}, %xmm0
683*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
684*9880d681SAndroid Build Coastguard Workerdefine double @ugt_y(double %x) nounwind {
685*9880d681SAndroid Build Coastguard Worker  %c = fcmp ugt double %x, -0.000000e+00
686*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double -0.000000e+00
687*9880d681SAndroid Build Coastguard Worker  ret double %d
688*9880d681SAndroid Build Coastguard Worker}
689*9880d681SAndroid Build Coastguard Worker
690*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ult_y:
691*9880d681SAndroid Build Coastguard Worker; CHECK:      cmpnlesd %xmm0
692*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ult_y:
693*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd   {{[^,]*}}, %xmm0
694*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
695*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ult_y:
696*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd   {{[^,]*}}, %xmm0
697*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
698*9880d681SAndroid Build Coastguard Workerdefine double @ult_y(double %x) nounwind {
699*9880d681SAndroid Build Coastguard Worker  %c = fcmp ult double %x, -0.000000e+00
700*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double -0.000000e+00
701*9880d681SAndroid Build Coastguard Worker  ret double %d
702*9880d681SAndroid Build Coastguard Worker}
703*9880d681SAndroid Build Coastguard Worker
704*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ugt_inverse_y:
705*9880d681SAndroid Build Coastguard Worker; CHECK:      cmpnlesd %xmm
706*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ugt_inverse_y:
707*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd   {{[^,]*}}, %xmm0
708*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
709*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ugt_inverse_y:
710*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd   {{[^,]*}}, %xmm1
711*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd   %xmm0, %xmm1
712*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
713*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
714*9880d681SAndroid Build Coastguard Workerdefine double @ugt_inverse_y(double %x) nounwind {
715*9880d681SAndroid Build Coastguard Worker  %c = fcmp ugt double %x, -0.000000e+00
716*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double -0.000000e+00, double %x
717*9880d681SAndroid Build Coastguard Worker  ret double %d
718*9880d681SAndroid Build Coastguard Worker}
719*9880d681SAndroid Build Coastguard Worker
720*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ult_inverse_y:
721*9880d681SAndroid Build Coastguard Worker; CHECK:      cmpnlesd %xmm
722*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ult_inverse_y:
723*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd   {{[^,]*}}, %xmm0
724*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
725*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ult_inverse_y:
726*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd   {{[^,]*}}, %xmm1
727*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd   %xmm0, %xmm1
728*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
729*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
730*9880d681SAndroid Build Coastguard Workerdefine double @ult_inverse_y(double %x) nounwind {
731*9880d681SAndroid Build Coastguard Worker  %c = fcmp ult double %x, -0.000000e+00
732*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double -0.000000e+00, double %x
733*9880d681SAndroid Build Coastguard Worker  ret double %d
734*9880d681SAndroid Build Coastguard Worker}
735*9880d681SAndroid Build Coastguard Worker
736*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      uge_y:
737*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movsd  {{[^,]*}}, %xmm1
738*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd  %xmm0, %xmm1
739*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movap{{[sd]}} %xmm1, %xmm0
740*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
741*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      uge_y:
742*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd  {{[^,]*}}, %xmm0
743*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
744*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      uge_y:
745*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd  {{[^,]*}}, %xmm0
746*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
747*9880d681SAndroid Build Coastguard Workerdefine double @uge_y(double %x) nounwind {
748*9880d681SAndroid Build Coastguard Worker  %c = fcmp uge double %x, -0.000000e+00
749*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double -0.000000e+00
750*9880d681SAndroid Build Coastguard Worker  ret double %d
751*9880d681SAndroid Build Coastguard Worker}
752*9880d681SAndroid Build Coastguard Worker
753*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ule_y:
754*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movsd  {{[^,]*}}, %xmm1
755*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd  %xmm0, %xmm1
756*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movap{{[sd]}} %xmm1, %xmm0
757*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
758*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ule_y:
759*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd  {{[^,]*}}, %xmm0
760*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
761*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ule_y:
762*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd  {{[^,]*}}, %xmm0
763*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
764*9880d681SAndroid Build Coastguard Workerdefine double @ule_y(double %x) nounwind {
765*9880d681SAndroid Build Coastguard Worker  %c = fcmp ule double %x, -0.000000e+00
766*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double %x, double -0.000000e+00
767*9880d681SAndroid Build Coastguard Worker  ret double %d
768*9880d681SAndroid Build Coastguard Worker}
769*9880d681SAndroid Build Coastguard Worker
770*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      uge_inverse_y:
771*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd {{[^,]*}}, %xmm0
772*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
773*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      uge_inverse_y:
774*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd {{[^,]*}}, %xmm0
775*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
776*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      uge_inverse_y:
777*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd {{[^,]*}}, %xmm1
778*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd %xmm0, %xmm1
779*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}} %xmm1, %xmm0
780*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
781*9880d681SAndroid Build Coastguard Workerdefine double @uge_inverse_y(double %x) nounwind {
782*9880d681SAndroid Build Coastguard Worker  %c = fcmp uge double %x, -0.000000e+00
783*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double -0.000000e+00, double %x
784*9880d681SAndroid Build Coastguard Worker  ret double %d
785*9880d681SAndroid Build Coastguard Worker}
786*9880d681SAndroid Build Coastguard Worker
787*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      ule_inverse_y:
788*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd {{[^,]*}}, %xmm0
789*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
790*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL:      ule_inverse_y:
791*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd {{[^,]*}}, %xmm0
792*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
793*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL:      ule_inverse_y:
794*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd {{[^,]*}}, %xmm1
795*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd %xmm0, %xmm1
796*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movap{{[sd]}} %xmm1, %xmm0
797*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
798*9880d681SAndroid Build Coastguard Workerdefine double @ule_inverse_y(double %x) nounwind {
799*9880d681SAndroid Build Coastguard Worker  %c = fcmp ule double %x, -0.000000e+00
800*9880d681SAndroid Build Coastguard Worker  %d = select i1 %c, double -0.000000e+00, double %x
801*9880d681SAndroid Build Coastguard Worker  ret double %d
802*9880d681SAndroid Build Coastguard Worker}
803*9880d681SAndroid Build Coastguard Worker; Test a few more misc. cases.
804*9880d681SAndroid Build Coastguard Worker
805*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clampTo3k_a:
806*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movsd {{[^,]*}}, %xmm1
807*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd %xmm0, %xmm1
808*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movapd %xmm1, %xmm0
809*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
810*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: clampTo3k_a:
811*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd {{[^,]*}}, %xmm0
812*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
813*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL: clampTo3k_a:
814*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd {{[^,]*}}, %xmm1
815*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd %xmm0, %xmm1
816*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movapd %xmm1, %xmm0
817*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
818*9880d681SAndroid Build Coastguard Workerdefine double @clampTo3k_a(double %x) nounwind readnone {
819*9880d681SAndroid Build Coastguard Workerentry:
820*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ogt double %x, 3.000000e+03           ; <i1> [#uses=1]
821*9880d681SAndroid Build Coastguard Worker  %x_addr.0 = select i1 %0, double 3.000000e+03, double %x ; <double> [#uses=1]
822*9880d681SAndroid Build Coastguard Worker  ret double %x_addr.0
823*9880d681SAndroid Build Coastguard Worker}
824*9880d681SAndroid Build Coastguard Worker
825*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clampTo3k_b:
826*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd {{[^,]*}}, %xmm0
827*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
828*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: clampTo3k_b:
829*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd {{[^,]*}}, %xmm0
830*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
831*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL: clampTo3k_b:
832*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd {{[^,]*}}, %xmm1
833*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd %xmm0, %xmm1
834*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movapd %xmm1, %xmm0
835*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
836*9880d681SAndroid Build Coastguard Workerdefine double @clampTo3k_b(double %x) nounwind readnone {
837*9880d681SAndroid Build Coastguard Workerentry:
838*9880d681SAndroid Build Coastguard Worker  %0 = fcmp uge double %x, 3.000000e+03           ; <i1> [#uses=1]
839*9880d681SAndroid Build Coastguard Worker  %x_addr.0 = select i1 %0, double 3.000000e+03, double %x ; <double> [#uses=1]
840*9880d681SAndroid Build Coastguard Worker  ret double %x_addr.0
841*9880d681SAndroid Build Coastguard Worker}
842*9880d681SAndroid Build Coastguard Worker
843*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clampTo3k_c:
844*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movsd {{[^,]*}}, %xmm1
845*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd %xmm0, %xmm1
846*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movapd %xmm1, %xmm0
847*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
848*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: clampTo3k_c:
849*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd {{[^,]*}}, %xmm0
850*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
851*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL: clampTo3k_c:
852*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd {{[^,]*}}, %xmm1
853*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd %xmm0, %xmm1
854*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movapd %xmm1, %xmm0
855*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
856*9880d681SAndroid Build Coastguard Workerdefine double @clampTo3k_c(double %x) nounwind readnone {
857*9880d681SAndroid Build Coastguard Workerentry:
858*9880d681SAndroid Build Coastguard Worker  %0 = fcmp olt double %x, 3.000000e+03           ; <i1> [#uses=1]
859*9880d681SAndroid Build Coastguard Worker  %x_addr.0 = select i1 %0, double 3.000000e+03, double %x ; <double> [#uses=1]
860*9880d681SAndroid Build Coastguard Worker  ret double %x_addr.0
861*9880d681SAndroid Build Coastguard Worker}
862*9880d681SAndroid Build Coastguard Worker
863*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clampTo3k_d:
864*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd {{[^,]*}}, %xmm0
865*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
866*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: clampTo3k_d:
867*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd {{[^,]*}}, %xmm0
868*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
869*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL: clampTo3k_d:
870*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd {{[^,]*}}, %xmm1
871*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd %xmm0, %xmm1
872*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movapd %xmm1, %xmm0
873*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
874*9880d681SAndroid Build Coastguard Workerdefine double @clampTo3k_d(double %x) nounwind readnone {
875*9880d681SAndroid Build Coastguard Workerentry:
876*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ule double %x, 3.000000e+03           ; <i1> [#uses=1]
877*9880d681SAndroid Build Coastguard Worker  %x_addr.0 = select i1 %0, double 3.000000e+03, double %x ; <double> [#uses=1]
878*9880d681SAndroid Build Coastguard Worker  ret double %x_addr.0
879*9880d681SAndroid Build Coastguard Worker}
880*9880d681SAndroid Build Coastguard Worker
881*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clampTo3k_e:
882*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movsd {{[^,]*}}, %xmm1
883*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd %xmm0, %xmm1
884*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movapd %xmm1, %xmm0
885*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
886*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: clampTo3k_e:
887*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd {{[^,]*}}, %xmm0
888*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
889*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL: clampTo3k_e:
890*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd {{[^,]*}}, %xmm1
891*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd %xmm0, %xmm1
892*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movapd %xmm1, %xmm0
893*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
894*9880d681SAndroid Build Coastguard Workerdefine double @clampTo3k_e(double %x) nounwind readnone {
895*9880d681SAndroid Build Coastguard Workerentry:
896*9880d681SAndroid Build Coastguard Worker  %0 = fcmp olt double %x, 3.000000e+03           ; <i1> [#uses=1]
897*9880d681SAndroid Build Coastguard Worker  %x_addr.0 = select i1 %0, double 3.000000e+03, double %x ; <double> [#uses=1]
898*9880d681SAndroid Build Coastguard Worker  ret double %x_addr.0
899*9880d681SAndroid Build Coastguard Worker}
900*9880d681SAndroid Build Coastguard Worker
901*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clampTo3k_f:
902*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: maxsd {{[^,]*}}, %xmm0
903*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
904*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: clampTo3k_f:
905*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxsd {{[^,]*}}, %xmm0
906*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
907*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL: clampTo3k_f:
908*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd {{[^,]*}}, %xmm1
909*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: maxsd %xmm0, %xmm1
910*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movapd %xmm1, %xmm0
911*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
912*9880d681SAndroid Build Coastguard Workerdefine double @clampTo3k_f(double %x) nounwind readnone {
913*9880d681SAndroid Build Coastguard Workerentry:
914*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ule double %x, 3.000000e+03           ; <i1> [#uses=1]
915*9880d681SAndroid Build Coastguard Worker  %x_addr.0 = select i1 %0, double 3.000000e+03, double %x ; <double> [#uses=1]
916*9880d681SAndroid Build Coastguard Worker  ret double %x_addr.0
917*9880d681SAndroid Build Coastguard Worker}
918*9880d681SAndroid Build Coastguard Worker
919*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clampTo3k_g:
920*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movsd {{[^,]*}}, %xmm1
921*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd %xmm0, %xmm1
922*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movapd %xmm1, %xmm0
923*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
924*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: clampTo3k_g:
925*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd {{[^,]*}}, %xmm0
926*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
927*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL: clampTo3k_g:
928*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd {{[^,]*}}, %xmm1
929*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd %xmm0, %xmm1
930*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movapd %xmm1, %xmm0
931*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
932*9880d681SAndroid Build Coastguard Workerdefine double @clampTo3k_g(double %x) nounwind readnone {
933*9880d681SAndroid Build Coastguard Workerentry:
934*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ogt double %x, 3.000000e+03           ; <i1> [#uses=1]
935*9880d681SAndroid Build Coastguard Worker  %x_addr.0 = select i1 %0, double 3.000000e+03, double %x ; <double> [#uses=1]
936*9880d681SAndroid Build Coastguard Worker  ret double %x_addr.0
937*9880d681SAndroid Build Coastguard Worker}
938*9880d681SAndroid Build Coastguard Worker
939*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clampTo3k_h:
940*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: minsd {{[^,]*}}, %xmm0
941*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
942*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: clampTo3k_h:
943*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minsd {{[^,]*}}, %xmm0
944*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
945*9880d681SAndroid Build Coastguard Worker; FINITE-LABEL: clampTo3k_h:
946*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movsd {{[^,]*}}, %xmm1
947*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: minsd %xmm0, %xmm1
948*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: movapd %xmm1, %xmm0
949*9880d681SAndroid Build Coastguard Worker; FINITE-NEXT: ret
950*9880d681SAndroid Build Coastguard Workerdefine double @clampTo3k_h(double %x) nounwind readnone {
951*9880d681SAndroid Build Coastguard Workerentry:
952*9880d681SAndroid Build Coastguard Worker  %0 = fcmp uge double %x, 3.000000e+03           ; <i1> [#uses=1]
953*9880d681SAndroid Build Coastguard Worker  %x_addr.0 = select i1 %0, double 3.000000e+03, double %x ; <double> [#uses=1]
954*9880d681SAndroid Build Coastguard Worker  ret double %x_addr.0
955*9880d681SAndroid Build Coastguard Worker}
956*9880d681SAndroid Build Coastguard Worker
957*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: test_maxpd:
958*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxpd %xmm1, %xmm0
959*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
960*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_maxpd(<2 x double> %x, <2 x double> %y) nounwind {
961*9880d681SAndroid Build Coastguard Worker  %max_is_x = fcmp oge <2 x double> %x, %y
962*9880d681SAndroid Build Coastguard Worker  %max = select <2 x i1> %max_is_x, <2 x double> %x, <2 x double> %y
963*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %max
964*9880d681SAndroid Build Coastguard Worker}
965*9880d681SAndroid Build Coastguard Worker
966*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: test_minpd:
967*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minpd %xmm1, %xmm0
968*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
969*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_minpd(<2 x double> %x, <2 x double> %y) nounwind {
970*9880d681SAndroid Build Coastguard Worker  %min_is_x = fcmp ole <2 x double> %x, %y
971*9880d681SAndroid Build Coastguard Worker  %min = select <2 x i1> %min_is_x, <2 x double> %x, <2 x double> %y
972*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %min
973*9880d681SAndroid Build Coastguard Worker}
974*9880d681SAndroid Build Coastguard Worker
975*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: test_maxps:
976*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxps %xmm1, %xmm0
977*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
978*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_maxps(<4 x float> %x, <4 x float> %y) nounwind {
979*9880d681SAndroid Build Coastguard Worker  %max_is_x = fcmp oge <4 x float> %x, %y
980*9880d681SAndroid Build Coastguard Worker  %max = select <4 x i1> %max_is_x, <4 x float> %x, <4 x float> %y
981*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %max
982*9880d681SAndroid Build Coastguard Worker}
983*9880d681SAndroid Build Coastguard Worker
984*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: test_minps:
985*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minps %xmm1, %xmm0
986*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
987*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_minps(<4 x float> %x, <4 x float> %y) nounwind {
988*9880d681SAndroid Build Coastguard Worker  %min_is_x = fcmp ole <4 x float> %x, %y
989*9880d681SAndroid Build Coastguard Worker  %min = select <4 x i1> %min_is_x, <4 x float> %x, <4 x float> %y
990*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %min
991*9880d681SAndroid Build Coastguard Worker}
992*9880d681SAndroid Build Coastguard Worker
993*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: test_maxps_illegal_v2f32:
994*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxps %xmm1, %xmm0
995*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
996*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_maxps_illegal_v2f32(<2 x float> %x, <2 x float> %y) nounwind {
997*9880d681SAndroid Build Coastguard Worker  %max_is_x = fcmp oge <2 x float> %x, %y
998*9880d681SAndroid Build Coastguard Worker  %max = select <2 x i1> %max_is_x, <2 x float> %x, <2 x float> %y
999*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %max
1000*9880d681SAndroid Build Coastguard Worker}
1001*9880d681SAndroid Build Coastguard Worker
1002*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: test_minps_illegal_v2f32:
1003*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minps %xmm1, %xmm0
1004*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
1005*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_minps_illegal_v2f32(<2 x float> %x, <2 x float> %y) nounwind {
1006*9880d681SAndroid Build Coastguard Worker  %min_is_x = fcmp ole <2 x float> %x, %y
1007*9880d681SAndroid Build Coastguard Worker  %min = select <2 x i1> %min_is_x, <2 x float> %x, <2 x float> %y
1008*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %min
1009*9880d681SAndroid Build Coastguard Worker}
1010*9880d681SAndroid Build Coastguard Worker
1011*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: test_maxps_illegal_v3f32:
1012*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: maxps %xmm1, %xmm0
1013*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
1014*9880d681SAndroid Build Coastguard Workerdefine <3 x float> @test_maxps_illegal_v3f32(<3 x float> %x, <3 x float> %y) nounwind {
1015*9880d681SAndroid Build Coastguard Worker  %max_is_x = fcmp oge <3 x float> %x, %y
1016*9880d681SAndroid Build Coastguard Worker  %max = select <3 x i1> %max_is_x, <3 x float> %x, <3 x float> %y
1017*9880d681SAndroid Build Coastguard Worker  ret <3 x float> %max
1018*9880d681SAndroid Build Coastguard Worker}
1019*9880d681SAndroid Build Coastguard Worker
1020*9880d681SAndroid Build Coastguard Worker; UNSAFE-LABEL: test_minps_illegal_v3f32:
1021*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: minps %xmm1, %xmm0
1022*9880d681SAndroid Build Coastguard Worker; UNSAFE-NEXT: ret
1023*9880d681SAndroid Build Coastguard Workerdefine <3 x float> @test_minps_illegal_v3f32(<3 x float> %x, <3 x float> %y) nounwind {
1024*9880d681SAndroid Build Coastguard Worker  %min_is_x = fcmp ole <3 x float> %x, %y
1025*9880d681SAndroid Build Coastguard Worker  %min = select <3 x i1> %min_is_x, <3 x float> %x, <3 x float> %y
1026*9880d681SAndroid Build Coastguard Worker  ret <3 x float> %min
1027*9880d681SAndroid Build Coastguard Worker}
1028