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