675 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -passes=instcombine -S < %s | FileCheck %s3 4 5define i1 @fcmp_trunc(double %0) {6; CHECK-LABEL: define i1 @fcmp_trunc(7; CHECK-SAME: double [[TMP0:%.*]]) {8; CHECK-NEXT: [[RESULT:%.*]] = fcmp oge double [[TMP0]], 0x4058FFFFF00000009; CHECK-NEXT: ret i1 [[RESULT]]10;11 %trunc = fptrunc double %0 to float12 %result = fcmp oge float %trunc, 1.000000e+0213 ret i1 %result14}15 16define i1 @fcmp_trunc_ult(double %0) {17; CHECK-LABEL: define i1 @fcmp_trunc_ult(18; CHECK-SAME: double [[TMP0:%.*]]) {19; CHECK-NEXT: [[RESULT:%.*]] = fcmp ult double [[TMP0]], 0x4068FFFFF000000020; CHECK-NEXT: ret i1 [[RESULT]]21;22 %trunc = fptrunc double %0 to float23 %result = fcmp ult float %trunc, 2.000000e+0224 ret i1 %result25}26 27define i1 @fcmp_trunc_ole(double %0) {28; CHECK-LABEL: define i1 @fcmp_trunc_ole(29; CHECK-SAME: double [[TMP0:%.*]]) {30; CHECK-NEXT: [[RESULT:%.*]] = fcmp ole double [[TMP0]], 0x4072C0001000000031; CHECK-NEXT: ret i1 [[RESULT]]32;33 %trunc = fptrunc double %0 to float34 %result = fcmp ole float %trunc, 3.000000e+0235 ret i1 %result36}37 38define i1 @fcmp_trunc_ogt(double %0) {39; CHECK-LABEL: define i1 @fcmp_trunc_ogt(40; CHECK-SAME: double [[TMP0:%.*]]) {41; CHECK-NEXT: [[RESULT:%.*]] = fcmp ogt double [[TMP0]], 0x407900001000000042; CHECK-NEXT: ret i1 [[RESULT]]43;44 %trunc = fptrunc double %0 to float45 %result = fcmp ogt float %trunc, 4.000000e+0246 ret i1 %result47}48 49define i1 @fcmp_trunc_zero(double %0) {50; CHECK-LABEL: define i1 @fcmp_trunc_zero(51; CHECK-SAME: double [[TMP0:%.*]]) {52; CHECK-NEXT: [[RESULT:%.*]] = fcmp oge double [[TMP0]], 0xB69000000000000053; CHECK-NEXT: ret i1 [[RESULT]]54;55 %trunc = fptrunc double %0 to float56 %result = fcmp oge float %trunc, 0.00000057 ret i1 %result58}59 60define i1 @fcmp_trunc_with_nnan(double %0) {61; CHECK-LABEL: define i1 @fcmp_trunc_with_nnan(62; CHECK-SAME: double [[TMP0:%.*]]) {63; CHECK-NEXT: [[RESULT:%.*]] = fcmp nnan oge double [[TMP0]], 0x4058FFFFF000000064; CHECK-NEXT: ret i1 [[RESULT]]65;66 %trunc = fptrunc double %0 to float67 %result = fcmp nnan oge float %trunc, 1.000000e+0268 ret i1 %result69}70 71define i1 @fcmp_trunc_with_ninf(double %0) {72; CHECK-LABEL: define i1 @fcmp_trunc_with_ninf(73; CHECK-SAME: double [[TMP0:%.*]]) {74; CHECK-NEXT: [[RESULT:%.*]] = fcmp ninf oge double [[TMP0]], 0x4058FFFFF000000075; CHECK-NEXT: ret i1 [[RESULT]]76;77 %trunc = fptrunc double %0 to float78 %result = fcmp ninf oge float %trunc, 1.000000e+0279 ret i1 %result80}81 82define i1 @fcmp_trunc_with_nsz(double %0) {83; CHECK-LABEL: define i1 @fcmp_trunc_with_nsz(84; CHECK-SAME: double [[TMP0:%.*]]) {85; CHECK-NEXT: [[RESULT:%.*]] = fcmp nsz oge double [[TMP0]], 0x4058FFFFF000000086; CHECK-NEXT: ret i1 [[RESULT]]87;88 %trunc = fptrunc double %0 to float89 %result = fcmp nsz oge float %trunc, 1.000000e+0290 ret i1 %result91}92 93define i1 @fcmp_trunc_with_reassoc(double %0) {94; CHECK-LABEL: define i1 @fcmp_trunc_with_reassoc(95; CHECK-SAME: double [[TMP0:%.*]]) {96; CHECK-NEXT: [[RESULT:%.*]] = fcmp reassoc oge double [[TMP0]], 0x4058FFFFF000000097; CHECK-NEXT: ret i1 [[RESULT]]98;99 %trunc = fptrunc double %0 to float100 %result = fcmp reassoc oge float %trunc, 1.000000e+02101 ret i1 %result102}103 104define i1 @fcmp_trunc_with_fast(double %0) {105; CHECK-LABEL: define i1 @fcmp_trunc_with_fast(106; CHECK-SAME: double [[TMP0:%.*]]) {107; CHECK-NEXT: [[RESULT:%.*]] = fcmp fast oge double [[TMP0]], 0x4058FFFFF0000000 108; CHECK-NEXT: ret i1 [[RESULT]]109;110 %trunc = fptrunc double %0 to float111 %result = fcmp fast oge float %trunc, 1.000000e+02112 ret i1 %result113}114 115define <4 x i1> @fcmp_vec_trunc(<4 x double> %0) {116; CHECK-LABEL: define <4 x i1> @fcmp_vec_trunc(117; CHECK-SAME: <4 x double> [[TMP0:%.*]]) {118; CHECK-NEXT: [[CMP:%.*]] = fcmp olt <4 x double> [[TMP0]], splat (double 0x3FEFFFFFF0000000)119; CHECK-NEXT: ret <4 x i1> [[CMP]]120;121 %vec = fptrunc <4 x double> %0 to <4 x float>122 %cmp = fcmp olt <4 x float> %vec, <float 1.0, float 1.0, float 1.0, float 1.0>123 ret <4 x i1> %cmp124}125 126define <1 x i1> @fcmp_vec_trunc_scalar(<1 x double> %0) {127; CHECK-LABEL: define <1 x i1> @fcmp_vec_trunc_scalar(128; CHECK-SAME: <1 x double> [[TMP0:%.*]]) {129; CHECK-NEXT: [[CMP:%.*]] = fcmp fast olt <1 x double> [[TMP0]], splat (double 0x3FEFFFFFF0000000)130; CHECK-NEXT: ret <1 x i1> [[CMP]]131;132 %vec = fptrunc <1 x double> %0 to <1 x float>133 %cmp = fcmp fast olt <1 x float> %vec, <float 1.0>134 ret <1 x i1> %cmp135}136 137define i1 @fcmp_trunc_fp128(fp128 %0) {138; CHECK-LABEL: define i1 @fcmp_trunc_fp128(139; CHECK-SAME: fp128 [[TMP0:%.*]]) {140; CHECK-NEXT: [[RESULT:%.*]] = fcmp fast oge fp128 [[TMP0]], 0xL000000000000000040058FFFFF000000141; CHECK-NEXT: ret i1 [[RESULT]]142;143 %trunc = fptrunc fp128 %0 to float144 %result = fcmp fast oge float %trunc, 1.000000e+02145 ret i1 %result146}147 148define i1 @fcmp_trunc_x86_fp80(x86_fp80 %0) {149; CHECK-LABEL: define i1 @fcmp_trunc_x86_fp80(150; CHECK-SAME: x86_fp80 [[TMP0:%.*]]) {151; CHECK-NEXT: [[RESULT:%.*]] = fcmp fast oge x86_fp80 [[TMP0]], 0xK4005C7FFFF8000000000152; CHECK-NEXT: ret i1 [[RESULT]]153;154 %trunc = fptrunc x86_fp80 %0 to float155 %result = fcmp fast oge float %trunc, 1.000000e+02156 ret i1 %result157}158 159define i1 @fcmp_trunc_ppc_fp128(ppc_fp128 %0) {160; CHECK-LABEL: define i1 @fcmp_trunc_ppc_fp128(161; CHECK-SAME: ppc_fp128 [[TMP0:%.*]]) {162; CHECK-NEXT: [[RESULT:%.*]] = fcmp fast oge ppc_fp128 [[TMP0]], 0xM4058FFFFF00000000000000000000000163; CHECK-NEXT: ret i1 [[RESULT]]164;165 %trunc = fptrunc ppc_fp128 %0 to float166 %result = fcmp fast oge float %trunc, 1.000000e+02167 ret i1 %result168}169 170define i1 @fcmp_trunc_nan(double %0) {171; CHECK-LABEL: define i1 @fcmp_trunc_nan(172; CHECK-SAME: double [[TMP0:%.*]]) {173; CHECK-NEXT: ret i1 false174;175 %trunc = fptrunc double %0 to float176 %result = fcmp oge float %trunc, 0x7FF8000000000000177 ret i1 %result178}179 180; denomalized 0x00000001181define i1 @fcmp_trunc_d1(double %0) {182; CHECK-LABEL: define i1 @fcmp_trunc_d1(183; CHECK-SAME: double [[TMP0:%.*]]) {184; CHECK-NEXT: [[RESULT:%.*]] = fcmp oge double [[TMP0]], 0x3690000000000001185; CHECK-NEXT: ret i1 [[RESULT]]186;187 %trunc = fptrunc double %0 to float188 %result = fcmp oge float %trunc, 1.40129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125e-45189 ret i1 %result190}191 192; denomalized 0x00000001 ole193define i1 @fcmp_trunc_d1_ole(double %0) {194; CHECK-LABEL: define i1 @fcmp_trunc_d1_ole(195; CHECK-SAME: double [[TMP0:%.*]]) {196; CHECK-NEXT: [[RESULT:%.*]] = fcmp ole double [[TMP0]], 0x36A7FFFFFFFFFFFF197; CHECK-NEXT: ret i1 [[RESULT]]198;199 %trunc = fptrunc double %0 to float200 %result = fcmp ole float %trunc, 1.40129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125e-45201 ret i1 %result202}203 204; denomalized 0x00000002205define i1 @fcmp_trunc_d2(double %0) {206; CHECK-LABEL: define i1 @fcmp_trunc_d2(207; CHECK-SAME: double [[TMP0:%.*]]) {208; CHECK-NEXT: [[RESULT:%.*]] = fcmp oge double [[TMP0]], 0x36A8000000000000209; CHECK-NEXT: ret i1 [[RESULT]]210;211 %trunc = fptrunc double %0 to float212 %result = fcmp oge float %trunc, 2.8025969286496341418474591665798322625605238837530315435141365677795821653717212029732763767242431640625e-45213 ret i1 %result214}215 216; denomalized 0x7fffff217define i1 @fcmp_trunc_d3(double %0) {218; CHECK-LABEL: define i1 @fcmp_trunc_d3(219; CHECK-SAME: double [[TMP0:%.*]]) {220; CHECK-NEXT: [[RESULT:%.*]] = fcmp ogt double [[TMP0]], 0x380FFFFFDFFFFFFF221; CHECK-NEXT: ret i1 [[RESULT]]222;223 %trunc = fptrunc double %0 to float224 %result = fcmp ogt float %trunc, 1.175494210692441075487029444849287348827052428745893333857174530571588870475618904265502351336181163787841796875e-38225 ret i1 %result226}227 228; denomalized 0x80000001229define i1 @fcmp_trunc_d4(double %0) {230; CHECK-LABEL: define i1 @fcmp_trunc_d4(231; CHECK-SAME: double [[TMP0:%.*]]) {232; CHECK-NEXT: [[RESULT:%.*]] = fcmp ogt double [[TMP0]], 0xB690000000000001233; CHECK-NEXT: ret i1 [[RESULT]]234;235 %trunc = fptrunc double %0 to float236 %result = fcmp ogt float %trunc, -1.40129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125e-45237 ret i1 %result238}239 240; denomalized 0x80000001241define i1 @fcmp_trunc_d5(double %0) {242; CHECK-LABEL: define i1 @fcmp_trunc_d5(243; CHECK-SAME: double [[TMP0:%.*]]) {244; CHECK-NEXT: [[RESULT:%.*]] = fcmp olt double [[TMP0]], 0xB80FFFFFDFFFFFFF245; CHECK-NEXT: ret i1 [[RESULT]]246;247 %trunc = fptrunc double %0 to float248 %result = fcmp olt float %trunc, -1.175494210692441075487029444849287348827052428745893333857174530571588870475618904265502351336181163787841796875e-38249 ret i1 %result250}251 252 253; +0254define i1 @fcmp_trunc_p0(double %0) {255; CHECK-LABEL: define i1 @fcmp_trunc_p0(256; CHECK-SAME: double [[TMP0:%.*]]) {257; CHECK-NEXT: [[RESULT:%.*]] = fcmp oge double [[TMP0]], 0xB690000000000000258; CHECK-NEXT: ret i1 [[RESULT]]259;260 %trunc = fptrunc double %0 to float261 %result = fcmp oge float %trunc, 0x00000000262 ret i1 %result263}264 265 266; -0267define i1 @fcmp_trunc_n0(double %0) {268; CHECK-LABEL: define i1 @fcmp_trunc_n0(269; CHECK-SAME: double [[TMP0:%.*]]) {270; CHECK-NEXT: [[RESULT:%.*]] = fcmp ogt double [[TMP0]], 0x3690000000000000271; CHECK-NEXT: ret i1 [[RESULT]]272;273 %trunc = fptrunc double %0 to float274 %result = fcmp ogt float %trunc, 0x8000000000000000275 ret i1 %result276}277 278 279; max representable280define i1 @fcmp_trunc_mx(double %0) {281; CHECK-LABEL: define i1 @fcmp_trunc_mx(282; CHECK-SAME: double [[TMP0:%.*]]) {283; CHECK-NEXT: [[RESULT:%.*]] = fcmp ogt double [[TMP0]], 0x47EFFFFFEFFFFFFF284; CHECK-NEXT: ret i1 [[RESULT]]285;286 %trunc = fptrunc double %0 to float287 %result = fcmp ogt float %trunc, 0x47EFFFFFE0000000288 ret i1 %result289}290 291; negative max representable292define i1 @fcmp_trunc_mn(double %0) {293; CHECK-LABEL: define i1 @fcmp_trunc_mn(294; CHECK-SAME: double [[TMP0:%.*]]) {295; CHECK-NEXT: [[RESULT:%.*]] = fcmp olt double [[TMP0]], 0xC7EFFFFFEFFFFFFF296; CHECK-NEXT: ret i1 [[RESULT]]297;298 %trunc = fptrunc double %0 to float299 %result = fcmp olt float %trunc, -3.4028234663852885981170418348451692544e38300 ret i1 %result301}302 303 304define i1 @fcmp_trunc_literal_nan(double %0) {305; CHECK-LABEL: define i1 @fcmp_trunc_literal_nan(306; CHECK-SAME: double [[TMP0:%.*]]) {307; CHECK-NEXT: ret i1 false308;309 %trunc = fptrunc double %0 to float310 %result = fcmp oge float %trunc, 0x7FF8000000000000311 ret i1 %result312}313 314define i1 @fcmp_trunc_literal_positive_inf(double %0) {315; CHECK-LABEL: define i1 @fcmp_trunc_literal_positive_inf(316; CHECK-SAME: double [[TMP0:%.*]]) {317; CHECK-NEXT: [[TRUNC:%.*]] = fptrunc double [[TMP0]] to float318; CHECK-NEXT: [[RESULT:%.*]] = fcmp oeq float [[TRUNC]], 0x7FF0000000000000319; CHECK-NEXT: ret i1 [[RESULT]]320;321 %trunc = fptrunc double %0 to float322 %result = fcmp oge float %trunc, 0x7FF0000000000000323 ret i1 %result324}325 326 327define i1 @fcmp_trunc_literal_negative_inf(double %0) {328; CHECK-LABEL: define i1 @fcmp_trunc_literal_negative_inf(329; CHECK-SAME: double [[TMP0:%.*]]) {330; CHECK-NEXT: [[TRUNC:%.*]] = fptrunc double [[TMP0]] to float331; CHECK-NEXT: [[RESULT:%.*]] = fcmp uno float [[TRUNC]], 0.000000e+00332; CHECK-NEXT: ret i1 [[RESULT]]333;334 %trunc = fptrunc double %0 to float335 %result = fcmp ult float %trunc, 0xFFF0000000000000336 ret i1 %result337}338 339 340define i1 @fcmp_trunc_nan_ugt(double %0) {341; CHECK-LABEL: define i1 @fcmp_trunc_nan_ugt(342; CHECK-SAME: double [[TMP0:%.*]]) {343; CHECK-NEXT: ret i1 true344;345 %trunc = fptrunc double %0 to float346 %result = fcmp ugt float %trunc, 0x7FF8000000000000347 ret i1 %result348}349 350define i1 @fcmp_trunc_inf_uge(double %0) {351; CHECK-LABEL: define i1 @fcmp_trunc_inf_uge(352; CHECK-SAME: double [[TMP0:%.*]]) {353; CHECK-NEXT: [[TRUNC:%.*]] = fptrunc double [[TMP0]] to float354; CHECK-NEXT: [[RESULT:%.*]] = fcmp ueq float [[TRUNC]], 0x7FF0000000000000355; CHECK-NEXT: ret i1 [[RESULT]]356;357 %trunc = fptrunc double %0 to float358 %result = fcmp uge float %trunc, 0x7FF0000000000000359 ret i1 %result360}361 362 363define i1 @fcmp_trunc_ninf_olt(double %0) {364; CHECK-LABEL: define i1 @fcmp_trunc_ninf_olt(365; CHECK-SAME: double [[TMP0:%.*]]) {366; CHECK-NEXT: ret i1 false367;368 %trunc = fptrunc double %0 to float369 %result = fcmp olt float %trunc, 0xFFF0000000000000370 ret i1 %result371}372 373 374define i1 @fcmp_trunc_uge(double %0) {375; CHECK-LABEL: define i1 @fcmp_trunc_uge(376; CHECK-SAME: double [[TMP0:%.*]]) {377; CHECK-NEXT: [[RESULT:%.*]] = fcmp uge double [[TMP0]], 0x405EBFFFF0000000378; CHECK-NEXT: ret i1 [[RESULT]]379;380 %trunc = fptrunc double %0 to float381 %result = fcmp uge float %trunc, 123.0382 ret i1 %result383}384 385 386define i1 @fcmp_trunc_neg_uge(double %0) {387; CHECK-LABEL: define i1 @fcmp_trunc_neg_uge(388; CHECK-SAME: double [[TMP0:%.*]]) {389; CHECK-NEXT: [[RESULT:%.*]] = fcmp uge double [[TMP0]], 0xC05EC00010000000390; CHECK-NEXT: ret i1 [[RESULT]]391;392 %trunc = fptrunc double %0 to float393 %result = fcmp uge float %trunc, -123.0394 ret i1 %result395}396 397 398define i1 @fcmp_trunc_oge(double %0) {399; CHECK-LABEL: define i1 @fcmp_trunc_oge(400; CHECK-SAME: double [[TMP0:%.*]]) {401; CHECK-NEXT: [[RESULT:%.*]] = fcmp oge double [[TMP0]], 0x405EBFFFF0000000402; CHECK-NEXT: ret i1 [[RESULT]]403;404 %trunc = fptrunc double %0 to float405 %result = fcmp oge float %trunc, 123.0406 ret i1 %result407}408 409 410define i1 @fcmp_trunc_neg_oge(double %0) {411; CHECK-LABEL: define i1 @fcmp_trunc_neg_oge(412; CHECK-SAME: double [[TMP0:%.*]]) {413; CHECK-NEXT: [[RESULT:%.*]] = fcmp oge double [[TMP0]], 0xC05EC00010000000414; CHECK-NEXT: ret i1 [[RESULT]]415;416 %trunc = fptrunc double %0 to float417 %result = fcmp oge float %trunc, -123.0418 ret i1 %result419}420 421 422define i1 @fcmp_trunc_ugt(double %0) {423; CHECK-LABEL: define i1 @fcmp_trunc_ugt(424; CHECK-SAME: double [[TMP0:%.*]]) {425; CHECK-NEXT: [[RESULT:%.*]] = fcmp ugt double [[TMP0]], 0x40FE0F3010000000426; CHECK-NEXT: ret i1 [[RESULT]]427;428 %trunc = fptrunc double %0 to float429 %result = fcmp ugt float %trunc, 123123.0430 ret i1 %result431}432 433 434define i1 @fcmp_trunc_neg_ugt(double %0) {435; CHECK-LABEL: define i1 @fcmp_trunc_neg_ugt(436; CHECK-SAME: double [[TMP0:%.*]]) {437; CHECK-NEXT: [[RESULT:%.*]] = fcmp ugt double [[TMP0]], 0xC0FE1B8FF0000000438; CHECK-NEXT: ret i1 [[RESULT]]439;440 %trunc = fptrunc double %0 to float441 %result = fcmp ugt float %trunc, -123321.0442 ret i1 %result443}444 445 446define i1 @fcmp_trunc_neg_ogt(double %0) {447; CHECK-LABEL: define i1 @fcmp_trunc_neg_ogt(448; CHECK-SAME: double [[TMP0:%.*]]) {449; CHECK-NEXT: [[RESULT:%.*]] = fcmp ogt double [[TMP0]], 0xC0FE1B8FF0000000450; CHECK-NEXT: ret i1 [[RESULT]]451;452 %trunc = fptrunc double %0 to float453 %result = fcmp ogt float %trunc, -123321.0454 ret i1 %result455}456 457 458 459define i1 @fcmp_trunc_ule(double %0) {460; CHECK-LABEL: define i1 @fcmp_trunc_ule(461; CHECK-SAME: double [[TMP0:%.*]]) {462; CHECK-NEXT: [[RESULT:%.*]] = fcmp ule double [[TMP0]], 0x408ED80010000000463; CHECK-NEXT: ret i1 [[RESULT]]464;465 %trunc = fptrunc double %0 to float466 %result = fcmp ule float %trunc, 987.0467 ret i1 %result468}469 470 471 472define i1 @fcmp_trunc_neg_ule(double %0) {473; CHECK-LABEL: define i1 @fcmp_trunc_neg_ule(474; CHECK-SAME: double [[TMP0:%.*]]) {475; CHECK-NEXT: [[RESULT:%.*]] = fcmp ule double [[TMP0]], 0xC088A7FFF0000000476; CHECK-NEXT: ret i1 [[RESULT]]477;478 %trunc = fptrunc double %0 to float479 %result = fcmp ule float %trunc, -789.0480 ret i1 %result481}482 483 484 485define i1 @fcmp_trunc_neg_ole(double %0) {486; CHECK-LABEL: define i1 @fcmp_trunc_neg_ole(487; CHECK-SAME: double [[TMP0:%.*]]) {488; CHECK-NEXT: [[RESULT:%.*]] = fcmp ole double [[TMP0]], 0xC088A7FFF0000000489; CHECK-NEXT: ret i1 [[RESULT]]490;491 %trunc = fptrunc double %0 to float492 %result = fcmp ole float %trunc, -789.0493 ret i1 %result494}495 496 497define i1 @fcmp_trunc_neg_ult(double %0) {498; CHECK-LABEL: define i1 @fcmp_trunc_neg_ult(499; CHECK-SAME: double [[TMP0:%.*]]) {500; CHECK-NEXT: [[RESULT:%.*]] = fcmp ult double [[TMP0]], 0xC088A80010000000501; CHECK-NEXT: ret i1 [[RESULT]]502;503 %trunc = fptrunc double %0 to float504 %result = fcmp ult float %trunc, -789.0505 ret i1 %result506}507 508 509 510define i1 @fcmp_trunc_olt(double %0) {511; CHECK-LABEL: define i1 @fcmp_trunc_olt(512; CHECK-SAME: double [[TMP0:%.*]]) {513; CHECK-NEXT: [[RESULT:%.*]] = fcmp olt double [[TMP0]], 0x408ED7FFF0000000514; CHECK-NEXT: ret i1 [[RESULT]]515;516 %trunc = fptrunc double %0 to float517 %result = fcmp olt float %trunc, 987.0518 ret i1 %result519}520 521 522 523define i1 @fcmp_trunc_neg_olt(double %0) {524; CHECK-LABEL: define i1 @fcmp_trunc_neg_olt(525; CHECK-SAME: double [[TMP0:%.*]]) {526; CHECK-NEXT: [[RESULT:%.*]] = fcmp olt double [[TMP0]], 0xC088A80010000000527; CHECK-NEXT: ret i1 [[RESULT]]528;529 %trunc = fptrunc double %0 to float530 %result = fcmp olt float %trunc, -789.0531 ret i1 %result532}533 534 535define i1 @fcmp_trunc_neg_nsz_uge(double %0) {536; CHECK-LABEL: define i1 @fcmp_trunc_neg_nsz_uge(537; CHECK-SAME: double [[TMP0:%.*]]) {538; CHECK-NEXT: [[RESULT:%.*]] = fcmp nsz uge double [[TMP0]], 0xC05EC00010000000539; CHECK-NEXT: ret i1 [[RESULT]]540;541 %trunc = fptrunc double %0 to float542 %result = fcmp nsz uge float %trunc, -123.0543 ret i1 %result544}545 546 547 548define i1 @fcmp_trunc_reassoc_ugt(double %0) {549; CHECK-LABEL: define i1 @fcmp_trunc_reassoc_ugt(550; CHECK-SAME: double [[TMP0:%.*]]) {551; CHECK-NEXT: [[RESULT:%.*]] = fcmp reassoc ugt double [[TMP0]], 0x40889F8210000000552; CHECK-NEXT: ret i1 [[RESULT]]553;554 %trunc = fptrunc double %0 to float555 %result = fcmp reassoc ugt float %trunc, 787.9384765625556 ret i1 %result557}558 559 560define i1 @fcmp_trunc_neg_reassoc_ugt(double %0) {561; CHECK-LABEL: define i1 @fcmp_trunc_neg_reassoc_ugt(562; CHECK-SAME: double [[TMP0:%.*]]) {563; CHECK-NEXT: [[RESULT:%.*]] = fcmp reassoc ugt double [[TMP0]], 0xC0889F81F0000000564; CHECK-NEXT: ret i1 [[RESULT]]565;566 %trunc = fptrunc double %0 to float567 %result = fcmp reassoc ugt float %trunc, -787.9384765625568 ret i1 %result569}570 571 572 573define i1 @fcmp_trunc_fast_ult(double %0) {574; CHECK-LABEL: define i1 @fcmp_trunc_fast_ult(575; CHECK-SAME: double [[TMP0:%.*]]) {576; CHECK-NEXT: [[RESULT:%.*]] = fcmp fast uge double [[TMP0]], 0x40F8E8E010000001577; CHECK-NEXT: ret i1 [[RESULT]]578;579 %trunc = fptrunc double %0 to float580 %result = fcmp fast uge float %trunc, 102030.0078125581 ret i1 %result582}583 584 585define i1 @fcmp_trunc_neg_fast_ult(double %0) {586; CHECK-LABEL: define i1 @fcmp_trunc_neg_fast_ult(587; CHECK-SAME: double [[TMP0:%.*]]) {588; CHECK-NEXT: [[RESULT:%.*]] = fcmp fast uge double [[TMP0]], 0xC0F8E8E02FFFFFFF589; CHECK-NEXT: ret i1 [[RESULT]]590;591 %trunc = fptrunc double %0 to float592 %result = fcmp fast uge float %trunc, -102030.0078125593 ret i1 %result594}595 596 597; max representable float to fp128598define i1 @fcmp_trunc_mx_fp128(fp128 %0) {599; CHECK-LABEL: define i1 @fcmp_trunc_mx_fp128(600; CHECK-SAME: fp128 [[TMP0:%.*]]) {601; CHECK-NEXT: [[RESULT:%.*]] = fcmp ole fp128 [[TMP0]], 0xLFFFFFFFFFFFFFFFF407EFFFFFEFFFFFF602; CHECK-NEXT: ret i1 [[RESULT]]603;604 %trunc = fptrunc fp128 %0 to float605 %result = fcmp ole float %trunc, 0x47EFFFFFE0000000606 ret i1 %result607}608 609 610; max representable float to x86_fp80611define i1 @fcmp_trunc_mx_x86_fp80(x86_fp80 %0) {612; CHECK-LABEL: define i1 @fcmp_trunc_mx_x86_fp80(613; CHECK-SAME: x86_fp80 [[TMP0:%.*]]) {614; CHECK-NEXT: [[RESULT:%.*]] = fcmp ule x86_fp80 [[TMP0]], 0xK407EFFFFFF7FFFFFFFFF615; CHECK-NEXT: ret i1 [[RESULT]]616;617 %trunc = fptrunc x86_fp80 %0 to float618 %result = fcmp ule float %trunc, 0x47EFFFFFE0000000619 ret i1 %result620}621 622 623; max representable float to ppc_fp128624define i1 @fcmp_trunc_mx_ppc_fp128(ppc_fp128 %0) {625; CHECK-LABEL: define i1 @fcmp_trunc_mx_ppc_fp128(626; CHECK-SAME: ppc_fp128 [[TMP0:%.*]]) {627; CHECK-NEXT: [[TRUNC:%.*]] = fptrunc ppc_fp128 [[TMP0]] to float628; CHECK-NEXT: [[RESULT:%.*]] = fcmp ole float [[TRUNC]], 0x47EFFFFFE0000000629; CHECK-NEXT: ret i1 [[RESULT]]630;631 %trunc = fptrunc ppc_fp128 %0 to float632 %result = fcmp ole float %trunc, 0x47EFFFFFE0000000633 ret i1 %result634}635 636 637; negative max representable float to fp128638define i1 @fcmp_trunc_mn_fp128(fp128 %0) {639; CHECK-LABEL: define i1 @fcmp_trunc_mn_fp128(640; CHECK-SAME: fp128 [[TMP0:%.*]]) {641; CHECK-NEXT: [[RESULT:%.*]] = fcmp olt fp128 [[TMP0]], 0xL0000000000000000C07EFFFFF1000000642; CHECK-NEXT: ret i1 [[RESULT]]643;644 %trunc = fptrunc fp128 %0 to float645 %result = fcmp olt float %trunc, 0xC7EFFFFF00000000646 ret i1 %result647}648 649 650; negative max representable float to x86_fp80651define i1 @fcmp_trunc_mn_x86_fp80(x86_fp80 %0) {652; CHECK-LABEL: define i1 @fcmp_trunc_mn_x86_fp80(653; CHECK-SAME: x86_fp80 [[TMP0:%.*]]) {654; CHECK-NEXT: [[RESULT:%.*]] = fcmp oge x86_fp80 [[TMP0]], 0xKC07EFFFFF88000000000655; CHECK-NEXT: ret i1 [[RESULT]]656;657 %trunc = fptrunc x86_fp80 %0 to float658 %result = fcmp oge float %trunc, 0xC7EFFFFF00000000659 ret i1 %result660}661 662 663; negative max representable float to ppc_fp128664define i1 @fcmp_trunc_mn_ppc_fp128(ppc_fp128 %0) {665; CHECK-LABEL: define i1 @fcmp_trunc_mn_ppc_fp128(666; CHECK-SAME: ppc_fp128 [[TMP0:%.*]]) {667; CHECK-NEXT: [[RESULT:%.*]] = fcmp uge ppc_fp128 [[TMP0]], 0xMC7EFFFFF100000000000000000000000668; CHECK-NEXT: ret i1 [[RESULT]]669;670 %trunc = fptrunc ppc_fp128 %0 to float671 %result = fcmp uge float %trunc, 0xC7EFFFFF00000000672 ret i1 %result673}674 675