1*86f0399cSc8ef; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*86f0399cSc8ef; RUN: opt < %s -passes=instcombine -S | FileCheck %s 3*86f0399cSc8ef 4*86f0399cSc8efdefine i1 @floor_x_ole(float %x) { 5*86f0399cSc8ef; CHECK-LABEL: @floor_x_ole( 6*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp ninf ord float [[X:%.*]], 0.000000e+00 7*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 8*86f0399cSc8ef; 9*86f0399cSc8ef %floor = call float @llvm.floor.f32(float %x) 10*86f0399cSc8ef %ret = fcmp ninf ole float %floor, %x 11*86f0399cSc8ef ret i1 %ret 12*86f0399cSc8ef} 13*86f0399cSc8ef 14*86f0399cSc8efdefine i1 @floor_x_ule(float %x) { 15*86f0399cSc8ef; CHECK-LABEL: @floor_x_ule( 16*86f0399cSc8ef; CHECK-NEXT: ret i1 true 17*86f0399cSc8ef; 18*86f0399cSc8ef %floor = call float @llvm.floor.f32(float %x) 19*86f0399cSc8ef %ret = fcmp ule float %floor, %x 20*86f0399cSc8ef ret i1 %ret 21*86f0399cSc8ef} 22*86f0399cSc8ef 23*86f0399cSc8efdefine i1 @floor_x_ogt(float %x) { 24*86f0399cSc8ef; CHECK-LABEL: @floor_x_ogt( 25*86f0399cSc8ef; CHECK-NEXT: ret i1 false 26*86f0399cSc8ef; 27*86f0399cSc8ef %floor = call float @llvm.floor.f32(float %x) 28*86f0399cSc8ef %ret = fcmp ogt float %floor, %x 29*86f0399cSc8ef ret i1 %ret 30*86f0399cSc8ef} 31*86f0399cSc8ef 32*86f0399cSc8efdefine i1 @floor_x_ugt(float %x) { 33*86f0399cSc8ef; CHECK-LABEL: @floor_x_ugt( 34*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp ninf uno float [[X:%.*]], 0.000000e+00 35*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 36*86f0399cSc8ef; 37*86f0399cSc8ef %floor = call float @llvm.floor.f32(float %x) 38*86f0399cSc8ef %ret = fcmp ninf ugt float %floor, %x 39*86f0399cSc8ef ret i1 %ret 40*86f0399cSc8ef} 41*86f0399cSc8ef 42*86f0399cSc8efdefine i1 @x_floor_oge(float %x) { 43*86f0399cSc8ef; CHECK-LABEL: @x_floor_oge( 44*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp ninf ord float [[X:%.*]], 0.000000e+00 45*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 46*86f0399cSc8ef; 47*86f0399cSc8ef %floor = call float @llvm.floor.f32(float %x) 48*86f0399cSc8ef %ret = fcmp ninf oge float %x, %floor 49*86f0399cSc8ef ret i1 %ret 50*86f0399cSc8ef} 51*86f0399cSc8ef 52*86f0399cSc8efdefine i1 @x_floor_uge(float %x) { 53*86f0399cSc8ef; CHECK-LABEL: @x_floor_uge( 54*86f0399cSc8ef; CHECK-NEXT: ret i1 true 55*86f0399cSc8ef; 56*86f0399cSc8ef %floor = call float @llvm.floor.f32(float %x) 57*86f0399cSc8ef %ret = fcmp uge float %x, %floor 58*86f0399cSc8ef ret i1 %ret 59*86f0399cSc8ef} 60*86f0399cSc8ef 61*86f0399cSc8efdefine i1 @x_floor_olt(float %x) { 62*86f0399cSc8ef; CHECK-LABEL: @x_floor_olt( 63*86f0399cSc8ef; CHECK-NEXT: ret i1 false 64*86f0399cSc8ef; 65*86f0399cSc8ef %floor = call float @llvm.floor.f32(float %x) 66*86f0399cSc8ef %ret = fcmp olt float %x, %floor 67*86f0399cSc8ef ret i1 %ret 68*86f0399cSc8ef} 69*86f0399cSc8ef 70*86f0399cSc8efdefine i1 @x_floor_ult(float %x) { 71*86f0399cSc8ef; CHECK-LABEL: @x_floor_ult( 72*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp ninf uno float [[X:%.*]], 0.000000e+00 73*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 74*86f0399cSc8ef; 75*86f0399cSc8ef %floor = call float @llvm.floor.f32(float %x) 76*86f0399cSc8ef %ret = fcmp ninf ult float %x, %floor 77*86f0399cSc8ef ret i1 %ret 78*86f0399cSc8ef} 79*86f0399cSc8ef 80*86f0399cSc8efdefine <2 x i1> @x_floor_olt_vec(<2 x float> %x) { 81*86f0399cSc8ef; CHECK-LABEL: @x_floor_olt_vec( 82*86f0399cSc8ef; CHECK-NEXT: ret <2 x i1> zeroinitializer 83*86f0399cSc8ef; 84*86f0399cSc8ef %floor = call <2 x float> @llvm.floor.f32(<2 x float> %x) 85*86f0399cSc8ef %ret = fcmp olt <2 x float> %x, %floor 86*86f0399cSc8ef ret <2 x i1> %ret 87*86f0399cSc8ef} 88*86f0399cSc8ef 89*86f0399cSc8efdefine i1 @x_floor_ole_neg(float %x) { 90*86f0399cSc8ef; CHECK-LABEL: @x_floor_ole_neg( 91*86f0399cSc8ef; CHECK-NEXT: [[FLOOR:%.*]] = call float @llvm.floor.f32(float [[X:%.*]]) 92*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp ole float [[X]], [[FLOOR]] 93*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 94*86f0399cSc8ef; 95*86f0399cSc8ef %floor = call float @llvm.floor.f32(float %x) 96*86f0399cSc8ef %ret = fcmp ole float %x, %floor 97*86f0399cSc8ef ret i1 %ret 98*86f0399cSc8ef} 99*86f0399cSc8ef 100*86f0399cSc8efdefine i1 @x_floor_ogt_neg(float %x) { 101*86f0399cSc8ef; CHECK-LABEL: @x_floor_ogt_neg( 102*86f0399cSc8ef; CHECK-NEXT: [[FLOOR:%.*]] = call float @llvm.floor.f32(float [[X:%.*]]) 103*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp ogt float [[X]], [[FLOOR]] 104*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 105*86f0399cSc8ef; 106*86f0399cSc8ef %floor = call float @llvm.floor.f32(float %x) 107*86f0399cSc8ef %ret = fcmp ogt float %x, %floor 108*86f0399cSc8ef ret i1 %ret 109*86f0399cSc8ef} 110*86f0399cSc8ef 111*86f0399cSc8efdefine i1 @x_floor_ueq_neg(float %x) { 112*86f0399cSc8ef; CHECK-LABEL: @x_floor_ueq_neg( 113*86f0399cSc8ef; CHECK-NEXT: [[FLOOR:%.*]] = call float @llvm.floor.f32(float [[X:%.*]]) 114*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp ueq float [[X]], [[FLOOR]] 115*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 116*86f0399cSc8ef; 117*86f0399cSc8ef %floor = call float @llvm.floor.f32(float %x) 118*86f0399cSc8ef %ret = fcmp ueq float %x, %floor 119*86f0399cSc8ef ret i1 %ret 120*86f0399cSc8ef} 121*86f0399cSc8ef 122*86f0399cSc8efdefine i1 @x_floor_une_neg(float %x) { 123*86f0399cSc8ef; CHECK-LABEL: @x_floor_une_neg( 124*86f0399cSc8ef; CHECK-NEXT: [[FLOOR:%.*]] = call float @llvm.floor.f32(float [[X:%.*]]) 125*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp une float [[X]], [[FLOOR]] 126*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 127*86f0399cSc8ef; 128*86f0399cSc8ef %floor = call float @llvm.floor.f32(float %x) 129*86f0399cSc8ef %ret = fcmp une float %x, %floor 130*86f0399cSc8ef ret i1 %ret 131*86f0399cSc8ef} 132*86f0399cSc8ef 133*86f0399cSc8efdefine i1 @ceil_x_oge(float %x) { 134*86f0399cSc8ef; CHECK-LABEL: @ceil_x_oge( 135*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp ninf ord float [[X:%.*]], 0.000000e+00 136*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 137*86f0399cSc8ef; 138*86f0399cSc8ef %ceil = call float @llvm.ceil.f32(float %x) 139*86f0399cSc8ef %ret = fcmp ninf oge float %ceil, %x 140*86f0399cSc8ef ret i1 %ret 141*86f0399cSc8ef} 142*86f0399cSc8ef 143*86f0399cSc8efdefine i1 @ceil_x_uge(float %x) { 144*86f0399cSc8ef; CHECK-LABEL: @ceil_x_uge( 145*86f0399cSc8ef; CHECK-NEXT: ret i1 true 146*86f0399cSc8ef; 147*86f0399cSc8ef %ceil = call float @llvm.ceil.f32(float %x) 148*86f0399cSc8ef %ret = fcmp uge float %ceil, %x 149*86f0399cSc8ef ret i1 %ret 150*86f0399cSc8ef} 151*86f0399cSc8ef 152*86f0399cSc8efdefine i1 @ceil_x_olt(float %x) { 153*86f0399cSc8ef; CHECK-LABEL: @ceil_x_olt( 154*86f0399cSc8ef; CHECK-NEXT: ret i1 false 155*86f0399cSc8ef; 156*86f0399cSc8ef %ceil = call float @llvm.ceil.f32(float %x) 157*86f0399cSc8ef %ret = fcmp olt float %ceil, %x 158*86f0399cSc8ef ret i1 %ret 159*86f0399cSc8ef} 160*86f0399cSc8ef 161*86f0399cSc8efdefine i1 @ceil_x_ult(float %x) { 162*86f0399cSc8ef; CHECK-LABEL: @ceil_x_ult( 163*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp ninf uno float [[X:%.*]], 0.000000e+00 164*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 165*86f0399cSc8ef; 166*86f0399cSc8ef %ceil = call float @llvm.ceil.f32(float %x) 167*86f0399cSc8ef %ret = fcmp ninf ult float %ceil, %x 168*86f0399cSc8ef ret i1 %ret 169*86f0399cSc8ef} 170*86f0399cSc8ef 171*86f0399cSc8efdefine i1 @x_ceil_ole(float %x) { 172*86f0399cSc8ef; CHECK-LABEL: @x_ceil_ole( 173*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp ninf ord float [[X:%.*]], 0.000000e+00 174*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 175*86f0399cSc8ef; 176*86f0399cSc8ef %ceil = call float @llvm.ceil.f32(float %x) 177*86f0399cSc8ef %ret = fcmp ninf ole float %x, %ceil 178*86f0399cSc8ef ret i1 %ret 179*86f0399cSc8ef} 180*86f0399cSc8ef 181*86f0399cSc8efdefine i1 @x_ceil_ule(float %x) { 182*86f0399cSc8ef; CHECK-LABEL: @x_ceil_ule( 183*86f0399cSc8ef; CHECK-NEXT: ret i1 true 184*86f0399cSc8ef; 185*86f0399cSc8ef %ceil = call float @llvm.ceil.f32(float %x) 186*86f0399cSc8ef %ret = fcmp ule float %x, %ceil 187*86f0399cSc8ef ret i1 %ret 188*86f0399cSc8ef} 189*86f0399cSc8ef 190*86f0399cSc8efdefine i1 @x_ceil_ogt(float %x) { 191*86f0399cSc8ef; CHECK-LABEL: @x_ceil_ogt( 192*86f0399cSc8ef; CHECK-NEXT: ret i1 false 193*86f0399cSc8ef; 194*86f0399cSc8ef %ceil = call float @llvm.ceil.f32(float %x) 195*86f0399cSc8ef %ret = fcmp ogt float %x, %ceil 196*86f0399cSc8ef ret i1 %ret 197*86f0399cSc8ef} 198*86f0399cSc8ef 199*86f0399cSc8efdefine i1 @x_ceil_ugt(float %x) { 200*86f0399cSc8ef; CHECK-LABEL: @x_ceil_ugt( 201*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp ninf uno float [[X:%.*]], 0.000000e+00 202*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 203*86f0399cSc8ef; 204*86f0399cSc8ef %ceil = call float @llvm.ceil.f32(float %x) 205*86f0399cSc8ef %ret = fcmp ninf ugt float %x, %ceil 206*86f0399cSc8ef ret i1 %ret 207*86f0399cSc8ef} 208*86f0399cSc8ef 209*86f0399cSc8efdefine <2 x i1> @x_ceil_ogt_vec(<2 x float> %x) { 210*86f0399cSc8ef; CHECK-LABEL: @x_ceil_ogt_vec( 211*86f0399cSc8ef; CHECK-NEXT: ret <2 x i1> zeroinitializer 212*86f0399cSc8ef; 213*86f0399cSc8ef %ceil = call <2 x float> @llvm.ceil.f32(<2 x float> %x) 214*86f0399cSc8ef %ret = fcmp ogt <2 x float> %x, %ceil 215*86f0399cSc8ef ret <2 x i1> %ret 216*86f0399cSc8ef} 217*86f0399cSc8ef 218*86f0399cSc8efdefine i1 @x_ceil_oge_neg(float %x) { 219*86f0399cSc8ef; CHECK-LABEL: @x_ceil_oge_neg( 220*86f0399cSc8ef; CHECK-NEXT: [[CEIL:%.*]] = call float @llvm.ceil.f32(float [[X:%.*]]) 221*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp oge float [[X]], [[CEIL]] 222*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 223*86f0399cSc8ef; 224*86f0399cSc8ef %ceil = call float @llvm.ceil.f32(float %x) 225*86f0399cSc8ef %ret = fcmp oge float %x, %ceil 226*86f0399cSc8ef ret i1 %ret 227*86f0399cSc8ef} 228*86f0399cSc8ef 229*86f0399cSc8efdefine i1 @x_ceil_olt_neg(float %x) { 230*86f0399cSc8ef; CHECK-LABEL: @x_ceil_olt_neg( 231*86f0399cSc8ef; CHECK-NEXT: [[CEIL:%.*]] = call float @llvm.ceil.f32(float [[X:%.*]]) 232*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp olt float [[X]], [[CEIL]] 233*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 234*86f0399cSc8ef; 235*86f0399cSc8ef %ceil = call float @llvm.ceil.f32(float %x) 236*86f0399cSc8ef %ret = fcmp olt float %x, %ceil 237*86f0399cSc8ef ret i1 %ret 238*86f0399cSc8ef} 239*86f0399cSc8ef 240*86f0399cSc8efdefine i1 @x_ceil_oeq_neg(float %x) { 241*86f0399cSc8ef; CHECK-LABEL: @x_ceil_oeq_neg( 242*86f0399cSc8ef; CHECK-NEXT: [[CEIL:%.*]] = call float @llvm.ceil.f32(float [[X:%.*]]) 243*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp oeq float [[X]], [[CEIL]] 244*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 245*86f0399cSc8ef; 246*86f0399cSc8ef %ceil = call float @llvm.ceil.f32(float %x) 247*86f0399cSc8ef %ret = fcmp oeq float %x, %ceil 248*86f0399cSc8ef ret i1 %ret 249*86f0399cSc8ef} 250*86f0399cSc8ef 251*86f0399cSc8efdefine i1 @x_ceil_one_neg(float %x) { 252*86f0399cSc8ef; CHECK-LABEL: @x_ceil_one_neg( 253*86f0399cSc8ef; CHECK-NEXT: [[CEIL:%.*]] = call float @llvm.ceil.f32(float [[X:%.*]]) 254*86f0399cSc8ef; CHECK-NEXT: [[RET:%.*]] = fcmp one float [[X]], [[CEIL]] 255*86f0399cSc8ef; CHECK-NEXT: ret i1 [[RET]] 256*86f0399cSc8ef; 257*86f0399cSc8ef %ceil = call float @llvm.ceil.f32(float %x) 258*86f0399cSc8ef %ret = fcmp one float %x, %ceil 259*86f0399cSc8ef ret i1 %ret 260*86f0399cSc8ef} 261