1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple armv8 -mattr=+neon,+fp-armv8 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; vectors 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @vmaxnmq(<4 x float>* %A, <4 x float>* %B) nounwind { 6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vmaxnmq: 7*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxnm.f32 q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} 8*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x float>, <4 x float>* %A 9*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x float>, <4 x float>* %B 10*9880d681SAndroid Build Coastguard Worker %tmp3 = call <4 x float> @llvm.arm.neon.vmaxnm.v4f32(<4 x float> %tmp1, <4 x float> %tmp2) 11*9880d681SAndroid Build Coastguard Worker ret <4 x float> %tmp3 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @vmaxnmd(<2 x float>* %A, <2 x float>* %B) nounwind { 15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vmaxnmd: 16*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxnm.f32 d{{[0-9]+}}, d{{[0-9]+}}, d{{[0-9]+}} 17*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x float>, <2 x float>* %A 18*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x float>, <2 x float>* %B 19*9880d681SAndroid Build Coastguard Worker %tmp3 = call <2 x float> @llvm.arm.neon.vmaxnm.v2f32(<2 x float> %tmp1, <2 x float> %tmp2) 20*9880d681SAndroid Build Coastguard Worker ret <2 x float> %tmp3 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @vminnmq(<4 x float>* %A, <4 x float>* %B) nounwind { 24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vminnmq: 25*9880d681SAndroid Build Coastguard Worker; CHECK: vminnm.f32 q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} 26*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x float>, <4 x float>* %A 27*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x float>, <4 x float>* %B 28*9880d681SAndroid Build Coastguard Worker %tmp3 = call <4 x float> @llvm.arm.neon.vminnm.v4f32(<4 x float> %tmp1, <4 x float> %tmp2) 29*9880d681SAndroid Build Coastguard Worker ret <4 x float> %tmp3 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @vminnmd(<2 x float>* %A, <2 x float>* %B) nounwind { 33*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vminnmd: 34*9880d681SAndroid Build Coastguard Worker; CHECK: vminnm.f32 d{{[0-9]+}}, d{{[0-9]+}}, d{{[0-9]+}} 35*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x float>, <2 x float>* %A 36*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x float>, <2 x float>* %B 37*9880d681SAndroid Build Coastguard Worker %tmp3 = call <2 x float> @llvm.arm.neon.vminnm.v2f32(<2 x float> %tmp1, <2 x float> %tmp2) 38*9880d681SAndroid Build Coastguard Worker ret <2 x float> %tmp3 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; scalars 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vminnm_o(float %a, float %b) { 44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_o": 45*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f32 46*9880d681SAndroid Build Coastguard Worker %cmp = fcmp olt float %a, %b 47*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, float %a, float %b 48*9880d681SAndroid Build Coastguard Worker ret float %cond 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workerdefine double @fp-armv8_vminnm_ole(double %a, double %b) { 52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_ole": 53*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f64 54*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ole double %a, %b 55*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, double %a, double %b 56*9880d681SAndroid Build Coastguard Worker ret double %cond 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vminnm_o_rev(float %a, float %b) { 60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_o_rev": 61*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f32 62*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ogt float %a, %b 63*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, float %b, float %a 64*9880d681SAndroid Build Coastguard Worker ret float %cond 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerdefine double @fp-armv8_vminnm_oge_rev(double %a, double %b) { 68*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_oge_rev": 69*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f64 70*9880d681SAndroid Build Coastguard Worker %cmp = fcmp oge double %a, %b 71*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, double %b, double %a 72*9880d681SAndroid Build Coastguard Worker ret double %cond 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vminnm_u(float %a, float %b) { 76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_u": 77*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f32 78*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ult float %a, %b 79*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, float %a, float %b 80*9880d681SAndroid Build Coastguard Worker ret float %cond 81*9880d681SAndroid Build Coastguard Worker} 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vminnm_ule(float %a, float %b) { 84*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_ule": 85*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f32 86*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ule float %a, %b 87*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, float %a, float %b 88*9880d681SAndroid Build Coastguard Worker ret float %cond 89*9880d681SAndroid Build Coastguard Worker} 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vminnm_u_rev(float %a, float %b) { 92*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_u_rev": 93*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f32 94*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ugt float %a, %b 95*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, float %b, float %a 96*9880d681SAndroid Build Coastguard Worker ret float %cond 97*9880d681SAndroid Build Coastguard Worker} 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Workerdefine double @fp-armv8_vminnm_uge_rev(double %a, double %b) { 100*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_uge_rev": 101*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f64 102*9880d681SAndroid Build Coastguard Worker %cmp = fcmp uge double %a, %b 103*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, double %b, double %a 104*9880d681SAndroid Build Coastguard Worker ret double %cond 105*9880d681SAndroid Build Coastguard Worker} 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vmaxnm_o(float %a, float %b) { 108*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_o": 109*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 110*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ogt float %a, %b 111*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, float %a, float %b 112*9880d681SAndroid Build Coastguard Worker ret float %cond 113*9880d681SAndroid Build Coastguard Worker} 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vmaxnm_oge(float %a, float %b) { 116*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_oge": 117*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 118*9880d681SAndroid Build Coastguard Worker %cmp = fcmp oge float %a, %b 119*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, float %a, float %b 120*9880d681SAndroid Build Coastguard Worker ret float %cond 121*9880d681SAndroid Build Coastguard Worker} 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vmaxnm_o_rev(float %a, float %b) { 124*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_o_rev": 125*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 126*9880d681SAndroid Build Coastguard Worker %cmp = fcmp olt float %a, %b 127*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, float %b, float %a 128*9880d681SAndroid Build Coastguard Worker ret float %cond 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vmaxnm_ole_rev(float %a, float %b) { 132*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_ole_rev": 133*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 134*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ole float %a, %b 135*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, float %b, float %a 136*9880d681SAndroid Build Coastguard Worker ret float %cond 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vmaxnm_u(float %a, float %b) { 140*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_u": 141*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 142*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ugt float %a, %b 143*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, float %a, float %b 144*9880d681SAndroid Build Coastguard Worker ret float %cond 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vmaxnm_uge(float %a, float %b) { 148*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_uge": 149*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 150*9880d681SAndroid Build Coastguard Worker %cmp = fcmp uge float %a, %b 151*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, float %a, float %b 152*9880d681SAndroid Build Coastguard Worker ret float %cond 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vmaxnm_u_rev(float %a, float %b) { 156*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_u_rev": 157*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 158*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ult float %a, %b 159*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, float %b, float %a 160*9880d681SAndroid Build Coastguard Worker ret float %cond 161*9880d681SAndroid Build Coastguard Worker} 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Workerdefine double @fp-armv8_vmaxnm_ule_rev(double %a, double %b) { 164*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_ule_rev": 165*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f64 166*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ule double %a, %b 167*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, double %b, double %a 168*9880d681SAndroid Build Coastguard Worker ret double %cond 169*9880d681SAndroid Build Coastguard Worker} 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Worker; known non-NaNs 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vminnm_NNNo(float %a) { 174*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_NNNo": 175*9880d681SAndroid Build Coastguard Worker; CHECK: vminnm.f32 176*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f32 177*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp olt float %a, 12. 178*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float %a, float 12. 179*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp olt float 34., %cond1 180*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float 34., float %cond1 181*9880d681SAndroid Build Coastguard Worker ret float %cond2 182*9880d681SAndroid Build Coastguard Worker} 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Workerdefine double @fp-armv8_vminnm_NNNole(double %a) { 185*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_NNNole": 186*9880d681SAndroid Build Coastguard Worker; CHECK: vminnm.f64 187*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f64 188*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp ole double %a, 34. 189*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, double %a, double 34. 190*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp ole double 56., %cond1 191*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, double 56., double %cond1 192*9880d681SAndroid Build Coastguard Worker ret double %cond2 193*9880d681SAndroid Build Coastguard Worker} 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vminnm_NNNo_rev(float %a) { 196*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_NNNo_rev": 197*9880d681SAndroid Build Coastguard Worker; CHECK: vminnm.f32 198*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f32 199*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp ogt float %a, 56. 200*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float 56., float %a 201*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp ogt float 78., %cond1 202*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float %cond1, float 78. 203*9880d681SAndroid Build Coastguard Worker ret float %cond2 204*9880d681SAndroid Build Coastguard Worker} 205*9880d681SAndroid Build Coastguard Worker 206*9880d681SAndroid Build Coastguard Workerdefine double @fp-armv8_vminnm_NNNoge_rev(double %a) { 207*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_NNNoge_rev": 208*9880d681SAndroid Build Coastguard Worker; CHECK: vminnm.f64 209*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f64 210*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp oge double %a, 78. 211*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, double 78., double %a 212*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp oge double 90., %cond1 213*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, double %cond1, double 90. 214*9880d681SAndroid Build Coastguard Worker ret double %cond2 215*9880d681SAndroid Build Coastguard Worker} 216*9880d681SAndroid Build Coastguard Worker 217*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vminnm_NNNu(float %b) { 218*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_NNNu": 219*9880d681SAndroid Build Coastguard Worker; CHECK: vminnm.f32 220*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f32 221*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp ult float 12., %b 222*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float 12., float %b 223*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp ult float %cond1, 34. 224*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float %cond1, float 34. 225*9880d681SAndroid Build Coastguard Worker ret float %cond2 226*9880d681SAndroid Build Coastguard Worker} 227*9880d681SAndroid Build Coastguard Worker 228*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vminnm_NNNule(float %b) { 229*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_NNNule": 230*9880d681SAndroid Build Coastguard Worker; CHECK: vminnm.f32 231*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f32 232*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp ule float 34., %b 233*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float 34., float %b 234*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp ule float %cond1, 56. 235*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float %cond1, float 56. 236*9880d681SAndroid Build Coastguard Worker ret float %cond2 237*9880d681SAndroid Build Coastguard Worker} 238*9880d681SAndroid Build Coastguard Worker 239*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vminnm_NNNu_rev(float %b) { 240*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_NNNu_rev": 241*9880d681SAndroid Build Coastguard Worker; CHECK: vminnm.f32 242*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f32 243*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp ugt float 56., %b 244*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float %b, float 56. 245*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp ugt float %cond1, 78. 246*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float 78., float %cond1 247*9880d681SAndroid Build Coastguard Worker ret float %cond2 248*9880d681SAndroid Build Coastguard Worker} 249*9880d681SAndroid Build Coastguard Worker 250*9880d681SAndroid Build Coastguard Workerdefine double @fp-armv8_vminnm_NNNuge_rev(double %b) { 251*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminnm_NNNuge_rev": 252*9880d681SAndroid Build Coastguard Worker; CHECK: vminnm.f64 253*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f64 254*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp uge double 78., %b 255*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, double %b, double 78. 256*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp uge double %cond1, 90. 257*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, double 90., double %cond1 258*9880d681SAndroid Build Coastguard Worker ret double %cond2 259*9880d681SAndroid Build Coastguard Worker} 260*9880d681SAndroid Build Coastguard Worker 261*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vmaxnm_NNNo(float %a) { 262*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_NNNo": 263*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxnm.f32 264*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 265*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp ogt float %a, 12. 266*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float %a, float 12. 267*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp ogt float 34., %cond1 268*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float 34., float %cond1 269*9880d681SAndroid Build Coastguard Worker ret float %cond2 270*9880d681SAndroid Build Coastguard Worker} 271*9880d681SAndroid Build Coastguard Worker 272*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vmaxnm_NNNoge(float %a) { 273*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_NNNoge": 274*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxnm.f32 275*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 276*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp oge float %a, 34. 277*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float %a, float 34. 278*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp oge float 56., %cond1 279*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float 56., float %cond1 280*9880d681SAndroid Build Coastguard Worker ret float %cond2 281*9880d681SAndroid Build Coastguard Worker} 282*9880d681SAndroid Build Coastguard Worker 283*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vmaxnm_NNNo_rev(float %a) { 284*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_NNNo_rev": 285*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxnm.f32 286*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 287*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp olt float %a, 56. 288*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float 56., float %a 289*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp olt float 78., %cond1 290*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float %cond1, float 78. 291*9880d681SAndroid Build Coastguard Worker ret float %cond2 292*9880d681SAndroid Build Coastguard Worker} 293*9880d681SAndroid Build Coastguard Worker 294*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vmaxnm_NNNole_rev(float %a) { 295*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_NNNole_rev": 296*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxnm.f32 297*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 298*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp ole float %a, 78. 299*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float 78., float %a 300*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp ole float 90., %cond1 301*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float %cond1, float 90. 302*9880d681SAndroid Build Coastguard Worker ret float %cond2 303*9880d681SAndroid Build Coastguard Worker} 304*9880d681SAndroid Build Coastguard Worker 305*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vmaxnm_NNNu(float %b) { 306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_NNNu": 307*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxnm.f32 308*9880d681SAndroid Build Coastguard Worker; CHEC-NOT: vmaxnm.f32 309*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp ugt float 12., %b 310*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float 12., float %b 311*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp ugt float %cond1, 34. 312*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float %cond1, float 34. 313*9880d681SAndroid Build Coastguard Worker ret float %cond2 314*9880d681SAndroid Build Coastguard Worker} 315*9880d681SAndroid Build Coastguard Worker 316*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vmaxnm_NNNuge(float %b) { 317*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_NNNuge": 318*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxnm.f32 319*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 320*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp uge float 34., %b 321*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float 34., float %b 322*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp uge float %cond1, 56. 323*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float %cond1, float 56. 324*9880d681SAndroid Build Coastguard Worker ret float %cond2 325*9880d681SAndroid Build Coastguard Worker} 326*9880d681SAndroid Build Coastguard Worker 327*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vmaxnm_NNNu_rev(float %b) { 328*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_NNNu_rev": 329*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxnm.f32 330*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 331*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp ult float 56., %b 332*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float %b, float 56. 333*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp ult float %cond1, 78. 334*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float 78., float %cond1 335*9880d681SAndroid Build Coastguard Worker ret float %cond2 336*9880d681SAndroid Build Coastguard Worker} 337*9880d681SAndroid Build Coastguard Worker 338*9880d681SAndroid Build Coastguard Workerdefine double @fp-armv8_vmaxnm_NNNule_rev( double %b) { 339*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vmaxnm_NNNule_rev": 340*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxnm.f64 341*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f64 342*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp ule double 78., %b 343*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, double %b, double 78. 344*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp ule double %cond1, 90. 345*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, double 90., double %cond1 346*9880d681SAndroid Build Coastguard Worker ret double %cond2 347*9880d681SAndroid Build Coastguard Worker} 348*9880d681SAndroid Build Coastguard Worker 349*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vminmaxnm_0(float %a) { 350*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminmaxnm_0": 351*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f32 352*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxnm.f32 353*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp ult float %a, 0. 354*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float %a, float 0. 355*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp ogt float %cond1, 0. 356*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float %cond1, float 0. 357*9880d681SAndroid Build Coastguard Worker ret float %cond2 358*9880d681SAndroid Build Coastguard Worker} 359*9880d681SAndroid Build Coastguard Worker 360*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vminmaxnm_neg0(float %a) { 361*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminmaxnm_neg0": 362*9880d681SAndroid Build Coastguard Worker; CHECK: vminnm.f32 363*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 364*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp olt float %a, -0. 365*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float %a, float -0. 366*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp ugt float %cond1, -0. 367*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float %cond1, float -0. 368*9880d681SAndroid Build Coastguard Worker ret float %cond2 369*9880d681SAndroid Build Coastguard Worker} 370*9880d681SAndroid Build Coastguard Worker 371*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vminmaxnm_e_0(float %a) { 372*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminmaxnm_e_0": 373*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vminnm.f32 374*9880d681SAndroid Build Coastguard Worker; CHECK: vmaxnm.f32 375*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp nsz ole float 0., %a 376*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float 0., float %a 377*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp nsz uge float 0., %cond1 378*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float 0., float %cond1 379*9880d681SAndroid Build Coastguard Worker ret float %cond2 380*9880d681SAndroid Build Coastguard Worker} 381*9880d681SAndroid Build Coastguard Worker 382*9880d681SAndroid Build Coastguard Workerdefine float @fp-armv8_vminmaxnm_e_neg0(float %a) { 383*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: "fp-armv8_vminmaxnm_e_neg0": 384*9880d681SAndroid Build Coastguard Worker; CHECK: vminnm.f32 385*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmaxnm.f32 386*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp nsz ule float -0., %a 387*9880d681SAndroid Build Coastguard Worker %cond1 = select i1 %cmp1, float -0., float %a 388*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp nsz oge float -0., %cond1 389*9880d681SAndroid Build Coastguard Worker %cond2 = select i1 %cmp2, float -0., float %cond1 390*9880d681SAndroid Build Coastguard Worker ret float %cond2 391*9880d681SAndroid Build Coastguard Worker} 392*9880d681SAndroid Build Coastguard Worker 393*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.arm.neon.vminnm.v4f32(<4 x float>, <4 x float>) nounwind readnone 394*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.arm.neon.vminnm.v2f32(<2 x float>, <2 x float>) nounwind readnone 395*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.arm.neon.vmaxnm.v4f32(<4 x float>, <4 x float>) nounwind readnone 396*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.arm.neon.vmaxnm.v2f32(<2 x float>, <2 x float>) nounwind readnone 397