1*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -instcombine < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.minnum.f32(float, float) #0 4*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.minnum.v2f32(<2 x float>, <2 x float>) #0 5*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.minnum.v4f32(<4 x float>, <4 x float>) #0 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.minnum.f64(double, double) #0 8*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.minnum.v2f64(<2 x double>, <2 x double>) #0 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.maxnum.f32(float, float) #0 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @constant_fold_minnum_f32 13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 1.000000e+00 14*9880d681SAndroid Build Coastguard Workerdefine float @constant_fold_minnum_f32() #0 { 15*9880d681SAndroid Build Coastguard Worker %x = call float @llvm.minnum.f32(float 1.0, float 2.0) #0 16*9880d681SAndroid Build Coastguard Worker ret float %x 17*9880d681SAndroid Build Coastguard Worker} 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @constant_fold_minnum_f32_inv 20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 1.000000e+00 21*9880d681SAndroid Build Coastguard Workerdefine float @constant_fold_minnum_f32_inv() #0 { 22*9880d681SAndroid Build Coastguard Worker %x = call float @llvm.minnum.f32(float 2.0, float 1.0) #0 23*9880d681SAndroid Build Coastguard Worker ret float %x 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @constant_fold_minnum_f32_nan0 27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 2.000000e+00 28*9880d681SAndroid Build Coastguard Workerdefine float @constant_fold_minnum_f32_nan0() #0 { 29*9880d681SAndroid Build Coastguard Worker %x = call float @llvm.minnum.f32(float 0x7FF8000000000000, float 2.0) #0 30*9880d681SAndroid Build Coastguard Worker ret float %x 31*9880d681SAndroid Build Coastguard Worker} 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @constant_fold_minnum_f32_nan1 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 2.000000e+00 35*9880d681SAndroid Build Coastguard Workerdefine float @constant_fold_minnum_f32_nan1() #0 { 36*9880d681SAndroid Build Coastguard Worker %x = call float @llvm.minnum.f32(float 2.0, float 0x7FF8000000000000) #0 37*9880d681SAndroid Build Coastguard Worker ret float %x 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @constant_fold_minnum_f32_nan_nan 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 0x7FF8000000000000 42*9880d681SAndroid Build Coastguard Workerdefine float @constant_fold_minnum_f32_nan_nan() #0 { 43*9880d681SAndroid Build Coastguard Worker %x = call float @llvm.minnum.f32(float 0x7FF8000000000000, float 0x7FF8000000000000) #0 44*9880d681SAndroid Build Coastguard Worker ret float %x 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @constant_fold_minnum_f32_p0_p0 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 0.000000e+00 49*9880d681SAndroid Build Coastguard Workerdefine float @constant_fold_minnum_f32_p0_p0() #0 { 50*9880d681SAndroid Build Coastguard Worker %x = call float @llvm.minnum.f32(float 0.0, float 0.0) #0 51*9880d681SAndroid Build Coastguard Worker ret float %x 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @constant_fold_minnum_f32_p0_n0 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 0.000000e+00 56*9880d681SAndroid Build Coastguard Workerdefine float @constant_fold_minnum_f32_p0_n0() #0 { 57*9880d681SAndroid Build Coastguard Worker %x = call float @llvm.minnum.f32(float 0.0, float -0.0) #0 58*9880d681SAndroid Build Coastguard Worker ret float %x 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @constant_fold_minnum_f32_n0_p0 62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float -0.000000e+00 63*9880d681SAndroid Build Coastguard Workerdefine float @constant_fold_minnum_f32_n0_p0() #0 { 64*9880d681SAndroid Build Coastguard Worker %x = call float @llvm.minnum.f32(float -0.0, float 0.0) #0 65*9880d681SAndroid Build Coastguard Worker ret float %x 66*9880d681SAndroid Build Coastguard Worker} 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @constant_fold_minnum_f32_n0_n0 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float -0.000000e+00 70*9880d681SAndroid Build Coastguard Workerdefine float @constant_fold_minnum_f32_n0_n0() #0 { 71*9880d681SAndroid Build Coastguard Worker %x = call float @llvm.minnum.f32(float -0.0, float -0.0) #0 72*9880d681SAndroid Build Coastguard Worker ret float %x 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @constant_fold_minnum_v4f32 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <4 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 5.000000e+00> 77*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @constant_fold_minnum_v4f32() #0 { 78*9880d681SAndroid Build Coastguard Worker %x = call <4 x float> @llvm.minnum.v4f32(<4 x float> <float 1.0, float 8.0, float 3.0, float 9.0>, <4 x float> <float 2.0, float 2.0, float 10.0, float 5.0>) 79*9880d681SAndroid Build Coastguard Worker ret <4 x float> %x 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @constant_fold_minnum_f64 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret double 1.000000e+00 84*9880d681SAndroid Build Coastguard Workerdefine double @constant_fold_minnum_f64() #0 { 85*9880d681SAndroid Build Coastguard Worker %x = call double @llvm.minnum.f64(double 1.0, double 2.0) #0 86*9880d681SAndroid Build Coastguard Worker ret double %x 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @constant_fold_minnum_f64_nan0 90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret double 2.000000e+00 91*9880d681SAndroid Build Coastguard Workerdefine double @constant_fold_minnum_f64_nan0() #0 { 92*9880d681SAndroid Build Coastguard Worker %x = call double @llvm.minnum.f64(double 0x7FF8000000000000, double 2.0) #0 93*9880d681SAndroid Build Coastguard Worker ret double %x 94*9880d681SAndroid Build Coastguard Worker} 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @constant_fold_minnum_f64_nan1 97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret double 2.000000e+00 98*9880d681SAndroid Build Coastguard Workerdefine double @constant_fold_minnum_f64_nan1() #0 { 99*9880d681SAndroid Build Coastguard Worker %x = call double @llvm.minnum.f64(double 2.0, double 0x7FF8000000000000) #0 100*9880d681SAndroid Build Coastguard Worker ret double %x 101*9880d681SAndroid Build Coastguard Worker} 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @constant_fold_minnum_f64_nan_nan 104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret double 0x7FF8000000000000 105*9880d681SAndroid Build Coastguard Workerdefine double @constant_fold_minnum_f64_nan_nan() #0 { 106*9880d681SAndroid Build Coastguard Worker %x = call double @llvm.minnum.f64(double 0x7FF8000000000000, double 0x7FF8000000000000) #0 107*9880d681SAndroid Build Coastguard Worker ret double %x 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @canonicalize_constant_minnum_f32 111*9880d681SAndroid Build Coastguard Worker; CHECK: call float @llvm.minnum.f32(float %x, float 1.000000e+00) 112*9880d681SAndroid Build Coastguard Workerdefine float @canonicalize_constant_minnum_f32(float %x) #0 { 113*9880d681SAndroid Build Coastguard Worker %y = call float @llvm.minnum.f32(float 1.0, float %x) #0 114*9880d681SAndroid Build Coastguard Worker ret float %y 115*9880d681SAndroid Build Coastguard Worker} 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @noop_minnum_f32 118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float %x 119*9880d681SAndroid Build Coastguard Workerdefine float @noop_minnum_f32(float %x) #0 { 120*9880d681SAndroid Build Coastguard Worker %y = call float @llvm.minnum.f32(float %x, float %x) #0 121*9880d681SAndroid Build Coastguard Worker ret float %y 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @minnum_f32_nan_val 125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float %x 126*9880d681SAndroid Build Coastguard Workerdefine float @minnum_f32_nan_val(float %x) #0 { 127*9880d681SAndroid Build Coastguard Worker %y = call float @llvm.minnum.f32(float 0x7FF8000000000000, float %x) #0 128*9880d681SAndroid Build Coastguard Worker ret float %y 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @minnum_f32_val_nan 132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float %x 133*9880d681SAndroid Build Coastguard Workerdefine float @minnum_f32_val_nan(float %x) #0 { 134*9880d681SAndroid Build Coastguard Worker %y = call float @llvm.minnum.f32(float %x, float 0x7FF8000000000000) #0 135*9880d681SAndroid Build Coastguard Worker ret float %y 136*9880d681SAndroid Build Coastguard Worker} 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @fold_minnum_f32_undef_undef 139*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float undef 140*9880d681SAndroid Build Coastguard Workerdefine float @fold_minnum_f32_undef_undef(float %x) nounwind { 141*9880d681SAndroid Build Coastguard Worker %val = call float @llvm.minnum.f32(float undef, float undef) #0 142*9880d681SAndroid Build Coastguard Worker ret float %val 143*9880d681SAndroid Build Coastguard Worker} 144*9880d681SAndroid Build Coastguard Worker 145*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @fold_minnum_f32_val_undef 146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float %x 147*9880d681SAndroid Build Coastguard Workerdefine float @fold_minnum_f32_val_undef(float %x) nounwind { 148*9880d681SAndroid Build Coastguard Worker %val = call float @llvm.minnum.f32(float %x, float undef) #0 149*9880d681SAndroid Build Coastguard Worker ret float %val 150*9880d681SAndroid Build Coastguard Worker} 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @fold_minnum_f32_undef_val 153*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float %x 154*9880d681SAndroid Build Coastguard Workerdefine float @fold_minnum_f32_undef_val(float %x) nounwind { 155*9880d681SAndroid Build Coastguard Worker %val = call float @llvm.minnum.f32(float undef, float %x) #0 156*9880d681SAndroid Build Coastguard Worker ret float %val 157*9880d681SAndroid Build Coastguard Worker} 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @minnum_x_minnum_x_y 160*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call float @llvm.minnum.f32(float %x, float %y) 161*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 162*9880d681SAndroid Build Coastguard Workerdefine float @minnum_x_minnum_x_y(float %x, float %y) #0 { 163*9880d681SAndroid Build Coastguard Worker %a = call float @llvm.minnum.f32(float %x, float %y) #0 164*9880d681SAndroid Build Coastguard Worker %b = call float @llvm.minnum.f32(float %x, float %a) #0 165*9880d681SAndroid Build Coastguard Worker ret float %b 166*9880d681SAndroid Build Coastguard Worker} 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @minnum_y_minnum_x_y 169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call float @llvm.minnum.f32(float %x, float %y) 170*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 171*9880d681SAndroid Build Coastguard Workerdefine float @minnum_y_minnum_x_y(float %x, float %y) #0 { 172*9880d681SAndroid Build Coastguard Worker %a = call float @llvm.minnum.f32(float %x, float %y) #0 173*9880d681SAndroid Build Coastguard Worker %b = call float @llvm.minnum.f32(float %y, float %a) #0 174*9880d681SAndroid Build Coastguard Worker ret float %b 175*9880d681SAndroid Build Coastguard Worker} 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @minnum_z_minnum_x_y 178*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call float @llvm.minnum.f32(float %x, float %y) 179*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call float @llvm.minnum.f32(float %z, float %a) 180*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 181*9880d681SAndroid Build Coastguard Workerdefine float @minnum_z_minnum_x_y(float %x, float %y, float %z) #0 { 182*9880d681SAndroid Build Coastguard Worker %a = call float @llvm.minnum.f32(float %x, float %y) #0 183*9880d681SAndroid Build Coastguard Worker %b = call float @llvm.minnum.f32(float %z, float %a) #0 184*9880d681SAndroid Build Coastguard Worker ret float %b 185*9880d681SAndroid Build Coastguard Worker} 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @minnum_minnum_x_y_z 188*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call float @llvm.minnum.f32(float %x, float %y) 189*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call float @llvm.minnum.f32(float %a, float %z) 190*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 191*9880d681SAndroid Build Coastguard Workerdefine float @minnum_minnum_x_y_z(float %x, float %y, float %z) #0 { 192*9880d681SAndroid Build Coastguard Worker %a = call float @llvm.minnum.f32(float %x, float %y) #0 193*9880d681SAndroid Build Coastguard Worker %b = call float @llvm.minnum.f32(float %a, float %z) #0 194*9880d681SAndroid Build Coastguard Worker ret float %b 195*9880d681SAndroid Build Coastguard Worker} 196*9880d681SAndroid Build Coastguard Worker 197*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @minnum4 198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call float @llvm.minnum.f32(float %x, float %y) 199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call float @llvm.minnum.f32(float %z, float %w) 200*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call float @llvm.minnum.f32(float %a, float %b) 201*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 202*9880d681SAndroid Build Coastguard Workerdefine float @minnum4(float %x, float %y, float %z, float %w) #0 { 203*9880d681SAndroid Build Coastguard Worker %a = call float @llvm.minnum.f32(float %x, float %y) #0 204*9880d681SAndroid Build Coastguard Worker %b = call float @llvm.minnum.f32(float %z, float %w) #0 205*9880d681SAndroid Build Coastguard Worker %c = call float @llvm.minnum.f32(float %a, float %b) #0 206*9880d681SAndroid Build Coastguard Worker ret float %c 207*9880d681SAndroid Build Coastguard Worker} 208*9880d681SAndroid Build Coastguard Worker 209*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @minnum_x_maxnum_x_y 210*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call float @llvm.maxnum.f32 211*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call float @llvm.minnum.f32 212*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 213*9880d681SAndroid Build Coastguard Workerdefine float @minnum_x_maxnum_x_y(float %x, float %y) #0 { 214*9880d681SAndroid Build Coastguard Worker %a = call float @llvm.maxnum.f32(float %x, float %y) #0 215*9880d681SAndroid Build Coastguard Worker %b = call float @llvm.minnum.f32(float %x, float %a) #0 216*9880d681SAndroid Build Coastguard Worker ret float %b 217*9880d681SAndroid Build Coastguard Worker} 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @maxnum_x_minnum_x_y 220*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call float @llvm.minnum.f32 221*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call float @llvm.maxnum.f32 222*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 223*9880d681SAndroid Build Coastguard Workerdefine float @maxnum_x_minnum_x_y(float %x, float %y) #0 { 224*9880d681SAndroid Build Coastguard Worker %a = call float @llvm.minnum.f32(float %x, float %y) #0 225*9880d681SAndroid Build Coastguard Worker %b = call float @llvm.maxnum.f32(float %x, float %a) #0 226*9880d681SAndroid Build Coastguard Worker ret float %b 227*9880d681SAndroid Build Coastguard Worker} 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @fold_minnum_f32_inf_val 230*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call float @llvm.minnum.f32(float %x, float 0x7FF0000000000000) 231*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 232*9880d681SAndroid Build Coastguard Workerdefine float @fold_minnum_f32_inf_val(float %x) nounwind { 233*9880d681SAndroid Build Coastguard Worker %val = call float @llvm.minnum.f32(float 0x7FF0000000000000, float %x) #0 234*9880d681SAndroid Build Coastguard Worker ret float %val 235*9880d681SAndroid Build Coastguard Worker} 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @fold_minnum_f32_minf_val 238*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret float 0xFFF0000000000000 239*9880d681SAndroid Build Coastguard Workerdefine float @fold_minnum_f32_minf_val(float %x) nounwind { 240*9880d681SAndroid Build Coastguard Worker %val = call float @llvm.minnum.f32(float 0xFFF0000000000000, float %x) #0 241*9880d681SAndroid Build Coastguard Worker ret float %val 242*9880d681SAndroid Build Coastguard Worker} 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone } 245