1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -instcombine -S | FileCheck %s 3 4define i1 @PR1738(double %x, double %y) { 5; CHECK-LABEL: @PR1738( 6; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord double [[X:%.*]], [[Y:%.*]] 7; CHECK-NEXT: ret i1 [[TMP1]] 8; 9 %cmp1 = fcmp ord double %x, 0.0 10 %cmp2 = fcmp ord double %y, 0.0 11 %and = and i1 %cmp1, %cmp2 12 ret i1 %and 13} 14 15define <2 x i1> @PR1738_vec_undef(<2 x double> %x, <2 x double> %y) { 16; CHECK-LABEL: @PR1738_vec_undef( 17; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord <2 x double> [[X:%.*]], [[Y:%.*]] 18; CHECK-NEXT: ret <2 x i1> [[TMP1]] 19; 20 %cmp1 = fcmp ord <2 x double> %x, <double 0.0, double undef> 21 %cmp2 = fcmp ord <2 x double> %y, <double undef, double 0.0> 22 %or = and <2 x i1> %cmp1, %cmp2 23 ret <2 x i1> %or 24} 25 26define i1 @PR41069(i1 %z, float %c, float %d) { 27; CHECK-LABEL: @PR41069( 28; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord float [[D:%.*]], [[C:%.*]] 29; CHECK-NEXT: [[R:%.*]] = and i1 [[TMP1]], [[Z:%.*]] 30; CHECK-NEXT: ret i1 [[R]] 31; 32 %ord1 = fcmp arcp ord float %c, 0.0 33 %and = and i1 %ord1, %z 34 %ord2 = fcmp afn ord float %d, 0.0 35 %r = and i1 %and, %ord2 36 ret i1 %r 37} 38 39define i1 @PR41069_commute(i1 %z, float %c, float %d) { 40; CHECK-LABEL: @PR41069_commute( 41; CHECK-NEXT: [[TMP1:%.*]] = fcmp ninf ord float [[D:%.*]], [[C:%.*]] 42; CHECK-NEXT: [[R:%.*]] = and i1 [[TMP1]], [[Z:%.*]] 43; CHECK-NEXT: ret i1 [[R]] 44; 45 %ord1 = fcmp ninf ord float %c, 0.0 46 %and = and i1 %ord1, %z 47 %ord2 = fcmp ninf reassoc ord float %d, 0.0 48 %r = and i1 %ord2, %and 49 ret i1 %r 50} 51 52; Commute differently and make sure vectors work. 53 54define <2 x i1> @PR41069_vec(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x double> %d) { 55; CHECK-LABEL: @PR41069_vec( 56; CHECK-NEXT: [[ORD1:%.*]] = fcmp ord <2 x double> [[A:%.*]], [[B:%.*]] 57; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord <2 x double> [[D:%.*]], [[C:%.*]] 58; CHECK-NEXT: [[R:%.*]] = and <2 x i1> [[TMP1]], [[ORD1]] 59; CHECK-NEXT: ret <2 x i1> [[R]] 60; 61 %ord1 = fcmp ord <2 x double> %a, %b 62 %ord2 = fcmp ord <2 x double> %c, <double 0.0, double undef> 63 %and = and <2 x i1> %ord1, %ord2 64 %ord3 = fcmp ord <2 x double> %d, zeroinitializer 65 %r = and <2 x i1> %and, %ord3 66 ret <2 x i1> %r 67} 68 69define <2 x i1> @PR41069_vec_commute(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x double> %d) { 70; CHECK-LABEL: @PR41069_vec_commute( 71; CHECK-NEXT: [[ORD1:%.*]] = fcmp ord <2 x double> [[A:%.*]], [[B:%.*]] 72; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord <2 x double> [[D:%.*]], [[C:%.*]] 73; CHECK-NEXT: [[R:%.*]] = and <2 x i1> [[TMP1]], [[ORD1]] 74; CHECK-NEXT: ret <2 x i1> [[R]] 75; 76 %ord1 = fcmp ord <2 x double> %a, %b 77 %ord2 = fcmp ord <2 x double> %c, <double 0.0, double undef> 78 %and = and <2 x i1> %ord1, %ord2 79 %ord3 = fcmp ord <2 x double> %d, zeroinitializer 80 %r = and <2 x i1> %ord3, %and 81 ret <2 x i1> %r 82} 83 84define i1 @PR15737(float %a, double %b) { 85; CHECK-LABEL: @PR15737( 86; CHECK-NEXT: [[CMP:%.*]] = fcmp ord float [[A:%.*]], 0.000000e+00 87; CHECK-NEXT: [[CMP1:%.*]] = fcmp ord double [[B:%.*]], 0.000000e+00 88; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP]], [[CMP1]] 89; CHECK-NEXT: ret i1 [[AND]] 90; 91 %cmp = fcmp ord float %a, 0.000000e+00 92 %cmp1 = fcmp ord double %b, 0.000000e+00 93 %and = and i1 %cmp, %cmp1 94 ret i1 %and 95} 96 97define <2 x i1> @t9(<2 x float> %a, <2 x double> %b) { 98; CHECK-LABEL: @t9( 99; CHECK-NEXT: [[CMP:%.*]] = fcmp ord <2 x float> [[A:%.*]], zeroinitializer 100; CHECK-NEXT: [[CMP1:%.*]] = fcmp ord <2 x double> [[B:%.*]], zeroinitializer 101; CHECK-NEXT: [[AND:%.*]] = and <2 x i1> [[CMP]], [[CMP1]] 102; CHECK-NEXT: ret <2 x i1> [[AND]] 103; 104 %cmp = fcmp ord <2 x float> %a, zeroinitializer 105 %cmp1 = fcmp ord <2 x double> %b, zeroinitializer 106 %and = and <2 x i1> %cmp, %cmp1 107 ret <2 x i1> %and 108} 109 110define i1 @fcmp_ord_nonzero(float %x, float %y) { 111; CHECK-LABEL: @fcmp_ord_nonzero( 112; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord float [[X:%.*]], [[Y:%.*]] 113; CHECK-NEXT: ret i1 [[TMP1]] 114; 115 %cmp1 = fcmp ord float %x, 1.0 116 %cmp2 = fcmp ord float %y, 2.0 117 %and = and i1 %cmp1, %cmp2 118 ret i1 %and 119} 120 121define <3 x i1> @fcmp_ord_nonzero_vec(<3 x float> %x, <3 x float> %y) { 122; CHECK-LABEL: @fcmp_ord_nonzero_vec( 123; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord <3 x float> [[X:%.*]], [[Y:%.*]] 124; CHECK-NEXT: ret <3 x i1> [[TMP1]] 125; 126 %cmp1 = fcmp ord <3 x float> %x, <float 1.0, float 2.0, float 3.0> 127 %cmp2 = fcmp ord <3 x float> %y, <float 3.0, float 2.0, float 1.0> 128 %and = and <3 x i1> %cmp1, %cmp2 129 ret <3 x i1> %and 130} 131 132define i1 @auto_gen_0(double %a, double %b) { 133; CHECK-LABEL: @auto_gen_0( 134; CHECK-NEXT: ret i1 false 135; 136 %cmp = fcmp false double %a, %b 137 %cmp1 = fcmp false double %a, %b 138 %retval = and i1 %cmp, %cmp1 139 ret i1 %retval 140} 141 142define i1 @auto_gen_1(double %a, double %b) { 143; CHECK-LABEL: @auto_gen_1( 144; CHECK-NEXT: ret i1 false 145; 146 %cmp = fcmp oeq double %a, %b 147 %cmp1 = fcmp false double %a, %b 148 %retval = and i1 %cmp, %cmp1 149 ret i1 %retval 150} 151 152define i1 @auto_gen_2(double %a, double %b) { 153; CHECK-LABEL: @auto_gen_2( 154; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]] 155; CHECK-NEXT: ret i1 [[TMP1]] 156; 157 %cmp = fcmp oeq double %a, %b 158 %cmp1 = fcmp oeq double %a, %b 159 %retval = and i1 %cmp, %cmp1 160 ret i1 %retval 161} 162 163define i1 @auto_gen_3(double %a, double %b) { 164; CHECK-LABEL: @auto_gen_3( 165; CHECK-NEXT: ret i1 false 166; 167 %cmp = fcmp ogt double %a, %b 168 %cmp1 = fcmp false double %a, %b 169 %retval = and i1 %cmp, %cmp1 170 ret i1 %retval 171} 172 173define i1 @auto_gen_4(double %a, double %b) { 174; CHECK-LABEL: @auto_gen_4( 175; CHECK-NEXT: ret i1 false 176; 177 %cmp = fcmp ogt double %a, %b 178 %cmp1 = fcmp oeq double %a, %b 179 %retval = and i1 %cmp, %cmp1 180 ret i1 %retval 181} 182 183define i1 @auto_gen_5(double %a, double %b) { 184; CHECK-LABEL: @auto_gen_5( 185; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]] 186; CHECK-NEXT: ret i1 [[TMP1]] 187; 188 %cmp = fcmp ogt double %a, %b 189 %cmp1 = fcmp ogt double %a, %b 190 %retval = and i1 %cmp, %cmp1 191 ret i1 %retval 192} 193 194define i1 @auto_gen_6(double %a, double %b) { 195; CHECK-LABEL: @auto_gen_6( 196; CHECK-NEXT: ret i1 false 197; 198 %cmp = fcmp oge double %a, %b 199 %cmp1 = fcmp false double %a, %b 200 %retval = and i1 %cmp, %cmp1 201 ret i1 %retval 202} 203 204define i1 @auto_gen_7(double %a, double %b) { 205; CHECK-LABEL: @auto_gen_7( 206; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]] 207; CHECK-NEXT: ret i1 [[TMP1]] 208; 209 %cmp = fcmp oge double %a, %b 210 %cmp1 = fcmp oeq double %a, %b 211 %retval = and i1 %cmp, %cmp1 212 ret i1 %retval 213} 214 215define i1 @auto_gen_8(double %a, double %b) { 216; CHECK-LABEL: @auto_gen_8( 217; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]] 218; CHECK-NEXT: ret i1 [[TMP1]] 219; 220 %cmp = fcmp oge double %a, %b 221 %cmp1 = fcmp ogt double %a, %b 222 %retval = and i1 %cmp, %cmp1 223 ret i1 %retval 224} 225 226define i1 @auto_gen_9(double %a, double %b) { 227; CHECK-LABEL: @auto_gen_9( 228; CHECK-NEXT: [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]] 229; CHECK-NEXT: ret i1 [[TMP1]] 230; 231 %cmp = fcmp oge double %a, %b 232 %cmp1 = fcmp oge double %a, %b 233 %retval = and i1 %cmp, %cmp1 234 ret i1 %retval 235} 236 237define i1 @auto_gen_10(double %a, double %b) { 238; CHECK-LABEL: @auto_gen_10( 239; CHECK-NEXT: ret i1 false 240; 241 %cmp = fcmp olt double %a, %b 242 %cmp1 = fcmp false double %a, %b 243 %retval = and i1 %cmp, %cmp1 244 ret i1 %retval 245} 246 247define i1 @auto_gen_11(double %a, double %b) { 248; CHECK-LABEL: @auto_gen_11( 249; CHECK-NEXT: ret i1 false 250; 251 %cmp = fcmp olt double %a, %b 252 %cmp1 = fcmp oeq double %a, %b 253 %retval = and i1 %cmp, %cmp1 254 ret i1 %retval 255} 256 257define i1 @auto_gen_12(double %a, double %b) { 258; CHECK-LABEL: @auto_gen_12( 259; CHECK-NEXT: ret i1 false 260; 261 %cmp = fcmp olt double %a, %b 262 %cmp1 = fcmp ogt double %a, %b 263 %retval = and i1 %cmp, %cmp1 264 ret i1 %retval 265} 266 267define i1 @auto_gen_13(double %a, double %b) { 268; CHECK-LABEL: @auto_gen_13( 269; CHECK-NEXT: ret i1 false 270; 271 %cmp = fcmp olt double %a, %b 272 %cmp1 = fcmp oge double %a, %b 273 %retval = and i1 %cmp, %cmp1 274 ret i1 %retval 275} 276 277define i1 @auto_gen_14(double %a, double %b) { 278; CHECK-LABEL: @auto_gen_14( 279; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]] 280; CHECK-NEXT: ret i1 [[TMP1]] 281; 282 %cmp = fcmp olt double %a, %b 283 %cmp1 = fcmp olt double %a, %b 284 %retval = and i1 %cmp, %cmp1 285 ret i1 %retval 286} 287 288define i1 @auto_gen_15(double %a, double %b) { 289; CHECK-LABEL: @auto_gen_15( 290; CHECK-NEXT: ret i1 false 291; 292 %cmp = fcmp ole double %a, %b 293 %cmp1 = fcmp false double %a, %b 294 %retval = and i1 %cmp, %cmp1 295 ret i1 %retval 296} 297 298define i1 @auto_gen_16(double %a, double %b) { 299; CHECK-LABEL: @auto_gen_16( 300; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]] 301; CHECK-NEXT: ret i1 [[TMP1]] 302; 303 %cmp = fcmp ole double %a, %b 304 %cmp1 = fcmp oeq double %a, %b 305 %retval = and i1 %cmp, %cmp1 306 ret i1 %retval 307} 308 309define i1 @auto_gen_17(double %a, double %b) { 310; CHECK-LABEL: @auto_gen_17( 311; CHECK-NEXT: ret i1 false 312; 313 %cmp = fcmp ole double %a, %b 314 %cmp1 = fcmp ogt double %a, %b 315 %retval = and i1 %cmp, %cmp1 316 ret i1 %retval 317} 318 319define i1 @auto_gen_18(double %a, double %b) { 320; CHECK-LABEL: @auto_gen_18( 321; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]] 322; CHECK-NEXT: ret i1 [[TMP1]] 323; 324 %cmp = fcmp ole double %a, %b 325 %cmp1 = fcmp oge double %a, %b 326 %retval = and i1 %cmp, %cmp1 327 ret i1 %retval 328} 329 330define i1 @auto_gen_19(double %a, double %b) { 331; CHECK-LABEL: @auto_gen_19( 332; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]] 333; CHECK-NEXT: ret i1 [[TMP1]] 334; 335 %cmp = fcmp ole double %a, %b 336 %cmp1 = fcmp olt double %a, %b 337 %retval = and i1 %cmp, %cmp1 338 ret i1 %retval 339} 340 341define i1 @auto_gen_20(double %a, double %b) { 342; CHECK-LABEL: @auto_gen_20( 343; CHECK-NEXT: [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]] 344; CHECK-NEXT: ret i1 [[TMP1]] 345; 346 %cmp = fcmp ole double %a, %b 347 %cmp1 = fcmp ole double %a, %b 348 %retval = and i1 %cmp, %cmp1 349 ret i1 %retval 350} 351 352define i1 @auto_gen_21(double %a, double %b) { 353; CHECK-LABEL: @auto_gen_21( 354; CHECK-NEXT: ret i1 false 355; 356 %cmp = fcmp one double %a, %b 357 %cmp1 = fcmp false double %a, %b 358 %retval = and i1 %cmp, %cmp1 359 ret i1 %retval 360} 361 362define i1 @auto_gen_22(double %a, double %b) { 363; CHECK-LABEL: @auto_gen_22( 364; CHECK-NEXT: ret i1 false 365; 366 %cmp = fcmp one double %a, %b 367 %cmp1 = fcmp oeq double %a, %b 368 %retval = and i1 %cmp, %cmp1 369 ret i1 %retval 370} 371 372define i1 @auto_gen_23(double %a, double %b) { 373; CHECK-LABEL: @auto_gen_23( 374; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]] 375; CHECK-NEXT: ret i1 [[TMP1]] 376; 377 %cmp = fcmp one double %a, %b 378 %cmp1 = fcmp ogt double %a, %b 379 %retval = and i1 %cmp, %cmp1 380 ret i1 %retval 381} 382 383define i1 @auto_gen_24(double %a, double %b) { 384; CHECK-LABEL: @auto_gen_24( 385; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]] 386; CHECK-NEXT: ret i1 [[TMP1]] 387; 388 %cmp = fcmp one double %a, %b 389 %cmp1 = fcmp oge double %a, %b 390 %retval = and i1 %cmp, %cmp1 391 ret i1 %retval 392} 393 394define i1 @auto_gen_25(double %a, double %b) { 395; CHECK-LABEL: @auto_gen_25( 396; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]] 397; CHECK-NEXT: ret i1 [[TMP1]] 398; 399 %cmp = fcmp one double %a, %b 400 %cmp1 = fcmp olt double %a, %b 401 %retval = and i1 %cmp, %cmp1 402 ret i1 %retval 403} 404 405define i1 @auto_gen_26(double %a, double %b) { 406; CHECK-LABEL: @auto_gen_26( 407; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]] 408; CHECK-NEXT: ret i1 [[TMP1]] 409; 410 %cmp = fcmp one double %a, %b 411 %cmp1 = fcmp ole double %a, %b 412 %retval = and i1 %cmp, %cmp1 413 ret i1 %retval 414} 415 416define i1 @auto_gen_27(double %a, double %b) { 417; CHECK-LABEL: @auto_gen_27( 418; CHECK-NEXT: [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]] 419; CHECK-NEXT: ret i1 [[TMP1]] 420; 421 %cmp = fcmp one double %a, %b 422 %cmp1 = fcmp one double %a, %b 423 %retval = and i1 %cmp, %cmp1 424 ret i1 %retval 425} 426 427define i1 @auto_gen_28(double %a, double %b) { 428; CHECK-LABEL: @auto_gen_28( 429; CHECK-NEXT: ret i1 false 430; 431 %cmp = fcmp ord double %a, %b 432 %cmp1 = fcmp false double %a, %b 433 %retval = and i1 %cmp, %cmp1 434 ret i1 %retval 435} 436 437define i1 @auto_gen_29(double %a, double %b) { 438; CHECK-LABEL: @auto_gen_29( 439; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]] 440; CHECK-NEXT: ret i1 [[TMP1]] 441; 442 %cmp = fcmp ord double %a, %b 443 %cmp1 = fcmp oeq double %a, %b 444 %retval = and i1 %cmp, %cmp1 445 ret i1 %retval 446} 447 448define i1 @auto_gen_30(double %a, double %b) { 449; CHECK-LABEL: @auto_gen_30( 450; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]] 451; CHECK-NEXT: ret i1 [[TMP1]] 452; 453 %cmp = fcmp ord double %a, %b 454 %cmp1 = fcmp ogt double %a, %b 455 %retval = and i1 %cmp, %cmp1 456 ret i1 %retval 457} 458 459define i1 @auto_gen_31(double %a, double %b) { 460; CHECK-LABEL: @auto_gen_31( 461; CHECK-NEXT: [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]] 462; CHECK-NEXT: ret i1 [[TMP1]] 463; 464 %cmp = fcmp ord double %a, %b 465 %cmp1 = fcmp oge double %a, %b 466 %retval = and i1 %cmp, %cmp1 467 ret i1 %retval 468} 469 470define i1 @auto_gen_32(double %a, double %b) { 471; CHECK-LABEL: @auto_gen_32( 472; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]] 473; CHECK-NEXT: ret i1 [[TMP1]] 474; 475 %cmp = fcmp ord double %a, %b 476 %cmp1 = fcmp olt double %a, %b 477 %retval = and i1 %cmp, %cmp1 478 ret i1 %retval 479} 480 481define i1 @auto_gen_33(double %a, double %b) { 482; CHECK-LABEL: @auto_gen_33( 483; CHECK-NEXT: [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]] 484; CHECK-NEXT: ret i1 [[TMP1]] 485; 486 %cmp = fcmp ord double %a, %b 487 %cmp1 = fcmp ole double %a, %b 488 %retval = and i1 %cmp, %cmp1 489 ret i1 %retval 490} 491 492define i1 @auto_gen_34(double %a, double %b) { 493; CHECK-LABEL: @auto_gen_34( 494; CHECK-NEXT: [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]] 495; CHECK-NEXT: ret i1 [[TMP1]] 496; 497 %cmp = fcmp ord double %a, %b 498 %cmp1 = fcmp one double %a, %b 499 %retval = and i1 %cmp, %cmp1 500 ret i1 %retval 501} 502 503define i1 @auto_gen_35(double %a, double %b) { 504; CHECK-LABEL: @auto_gen_35( 505; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]] 506; CHECK-NEXT: ret i1 [[TMP1]] 507; 508 %cmp = fcmp ord double %a, %b 509 %cmp1 = fcmp ord double %a, %b 510 %retval = and i1 %cmp, %cmp1 511 ret i1 %retval 512} 513 514define i1 @auto_gen_36(double %a, double %b) { 515; CHECK-LABEL: @auto_gen_36( 516; CHECK-NEXT: ret i1 false 517; 518 %cmp = fcmp ueq double %a, %b 519 %cmp1 = fcmp false double %a, %b 520 %retval = and i1 %cmp, %cmp1 521 ret i1 %retval 522} 523 524define i1 @auto_gen_37(double %a, double %b) { 525; CHECK-LABEL: @auto_gen_37( 526; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]] 527; CHECK-NEXT: ret i1 [[TMP1]] 528; 529 %cmp = fcmp ueq double %a, %b 530 %cmp1 = fcmp oeq double %a, %b 531 %retval = and i1 %cmp, %cmp1 532 ret i1 %retval 533} 534 535define i1 @auto_gen_38(double %a, double %b) { 536; CHECK-LABEL: @auto_gen_38( 537; CHECK-NEXT: ret i1 false 538; 539 %cmp = fcmp ueq double %a, %b 540 %cmp1 = fcmp ogt double %a, %b 541 %retval = and i1 %cmp, %cmp1 542 ret i1 %retval 543} 544 545define i1 @auto_gen_39(double %a, double %b) { 546; CHECK-LABEL: @auto_gen_39( 547; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]] 548; CHECK-NEXT: ret i1 [[TMP1]] 549; 550 %cmp = fcmp ueq double %a, %b 551 %cmp1 = fcmp oge double %a, %b 552 %retval = and i1 %cmp, %cmp1 553 ret i1 %retval 554} 555 556define i1 @auto_gen_40(double %a, double %b) { 557; CHECK-LABEL: @auto_gen_40( 558; CHECK-NEXT: ret i1 false 559; 560 %cmp = fcmp ueq double %a, %b 561 %cmp1 = fcmp olt double %a, %b 562 %retval = and i1 %cmp, %cmp1 563 ret i1 %retval 564} 565 566define i1 @auto_gen_41(double %a, double %b) { 567; CHECK-LABEL: @auto_gen_41( 568; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]] 569; CHECK-NEXT: ret i1 [[TMP1]] 570; 571 %cmp = fcmp ueq double %a, %b 572 %cmp1 = fcmp ole double %a, %b 573 %retval = and i1 %cmp, %cmp1 574 ret i1 %retval 575} 576 577define i1 @auto_gen_42(double %a, double %b) { 578; CHECK-LABEL: @auto_gen_42( 579; CHECK-NEXT: ret i1 false 580; 581 %cmp = fcmp ueq double %a, %b 582 %cmp1 = fcmp one double %a, %b 583 %retval = and i1 %cmp, %cmp1 584 ret i1 %retval 585} 586 587define i1 @auto_gen_43(double %a, double %b) { 588; CHECK-LABEL: @auto_gen_43( 589; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]] 590; CHECK-NEXT: ret i1 [[TMP1]] 591; 592 %cmp = fcmp ueq double %a, %b 593 %cmp1 = fcmp ord double %a, %b 594 %retval = and i1 %cmp, %cmp1 595 ret i1 %retval 596} 597 598define i1 @auto_gen_44(double %a, double %b) { 599; CHECK-LABEL: @auto_gen_44( 600; CHECK-NEXT: [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]] 601; CHECK-NEXT: ret i1 [[TMP1]] 602; 603 %cmp = fcmp ueq double %a, %b 604 %cmp1 = fcmp ueq double %a, %b 605 %retval = and i1 %cmp, %cmp1 606 ret i1 %retval 607} 608 609define i1 @auto_gen_45(double %a, double %b) { 610; CHECK-LABEL: @auto_gen_45( 611; CHECK-NEXT: ret i1 false 612; 613 %cmp = fcmp ugt double %a, %b 614 %cmp1 = fcmp false double %a, %b 615 %retval = and i1 %cmp, %cmp1 616 ret i1 %retval 617} 618 619define i1 @auto_gen_46(double %a, double %b) { 620; CHECK-LABEL: @auto_gen_46( 621; CHECK-NEXT: ret i1 false 622; 623 %cmp = fcmp ugt double %a, %b 624 %cmp1 = fcmp oeq double %a, %b 625 %retval = and i1 %cmp, %cmp1 626 ret i1 %retval 627} 628 629define i1 @auto_gen_47(double %a, double %b) { 630; CHECK-LABEL: @auto_gen_47( 631; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]] 632; CHECK-NEXT: ret i1 [[TMP1]] 633; 634 %cmp = fcmp ugt double %a, %b 635 %cmp1 = fcmp ogt double %a, %b 636 %retval = and i1 %cmp, %cmp1 637 ret i1 %retval 638} 639 640define i1 @auto_gen_48(double %a, double %b) { 641; CHECK-LABEL: @auto_gen_48( 642; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]] 643; CHECK-NEXT: ret i1 [[TMP1]] 644; 645 %cmp = fcmp ugt double %a, %b 646 %cmp1 = fcmp oge double %a, %b 647 %retval = and i1 %cmp, %cmp1 648 ret i1 %retval 649} 650 651define i1 @auto_gen_49(double %a, double %b) { 652; CHECK-LABEL: @auto_gen_49( 653; CHECK-NEXT: ret i1 false 654; 655 %cmp = fcmp ugt double %a, %b 656 %cmp1 = fcmp olt double %a, %b 657 %retval = and i1 %cmp, %cmp1 658 ret i1 %retval 659} 660 661define i1 @auto_gen_50(double %a, double %b) { 662; CHECK-LABEL: @auto_gen_50( 663; CHECK-NEXT: ret i1 false 664; 665 %cmp = fcmp ugt double %a, %b 666 %cmp1 = fcmp ole double %a, %b 667 %retval = and i1 %cmp, %cmp1 668 ret i1 %retval 669} 670 671define i1 @auto_gen_51(double %a, double %b) { 672; CHECK-LABEL: @auto_gen_51( 673; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]] 674; CHECK-NEXT: ret i1 [[TMP1]] 675; 676 %cmp = fcmp ugt double %a, %b 677 %cmp1 = fcmp one double %a, %b 678 %retval = and i1 %cmp, %cmp1 679 ret i1 %retval 680} 681 682define i1 @auto_gen_52(double %a, double %b) { 683; CHECK-LABEL: @auto_gen_52( 684; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]] 685; CHECK-NEXT: ret i1 [[TMP1]] 686; 687 %cmp = fcmp ugt double %a, %b 688 %cmp1 = fcmp ord double %a, %b 689 %retval = and i1 %cmp, %cmp1 690 ret i1 %retval 691} 692 693define i1 @auto_gen_53(double %a, double %b) { 694; CHECK-LABEL: @auto_gen_53( 695; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]] 696; CHECK-NEXT: ret i1 [[TMP1]] 697; 698 %cmp = fcmp ugt double %a, %b 699 %cmp1 = fcmp ueq double %a, %b 700 %retval = and i1 %cmp, %cmp1 701 ret i1 %retval 702} 703 704define i1 @auto_gen_54(double %a, double %b) { 705; CHECK-LABEL: @auto_gen_54( 706; CHECK-NEXT: [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]] 707; CHECK-NEXT: ret i1 [[TMP1]] 708; 709 %cmp = fcmp ugt double %a, %b 710 %cmp1 = fcmp ugt double %a, %b 711 %retval = and i1 %cmp, %cmp1 712 ret i1 %retval 713} 714 715define i1 @auto_gen_55(double %a, double %b) { 716; CHECK-LABEL: @auto_gen_55( 717; CHECK-NEXT: ret i1 false 718; 719 %cmp = fcmp uge double %a, %b 720 %cmp1 = fcmp false double %a, %b 721 %retval = and i1 %cmp, %cmp1 722 ret i1 %retval 723} 724 725define i1 @auto_gen_56(double %a, double %b) { 726; CHECK-LABEL: @auto_gen_56( 727; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]] 728; CHECK-NEXT: ret i1 [[TMP1]] 729; 730 %cmp = fcmp uge double %a, %b 731 %cmp1 = fcmp oeq double %a, %b 732 %retval = and i1 %cmp, %cmp1 733 ret i1 %retval 734} 735 736define i1 @auto_gen_57(double %a, double %b) { 737; CHECK-LABEL: @auto_gen_57( 738; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]] 739; CHECK-NEXT: ret i1 [[TMP1]] 740; 741 %cmp = fcmp uge double %a, %b 742 %cmp1 = fcmp ogt double %a, %b 743 %retval = and i1 %cmp, %cmp1 744 ret i1 %retval 745} 746 747define i1 @auto_gen_58(double %a, double %b) { 748; CHECK-LABEL: @auto_gen_58( 749; CHECK-NEXT: [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]] 750; CHECK-NEXT: ret i1 [[TMP1]] 751; 752 %cmp = fcmp uge double %a, %b 753 %cmp1 = fcmp oge double %a, %b 754 %retval = and i1 %cmp, %cmp1 755 ret i1 %retval 756} 757 758define i1 @auto_gen_59(double %a, double %b) { 759; CHECK-LABEL: @auto_gen_59( 760; CHECK-NEXT: ret i1 false 761; 762 %cmp = fcmp uge double %a, %b 763 %cmp1 = fcmp olt double %a, %b 764 %retval = and i1 %cmp, %cmp1 765 ret i1 %retval 766} 767 768define i1 @auto_gen_60(double %a, double %b) { 769; CHECK-LABEL: @auto_gen_60( 770; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]] 771; CHECK-NEXT: ret i1 [[TMP1]] 772; 773 %cmp = fcmp uge double %a, %b 774 %cmp1 = fcmp ole double %a, %b 775 %retval = and i1 %cmp, %cmp1 776 ret i1 %retval 777} 778 779define i1 @auto_gen_61(double %a, double %b) { 780; CHECK-LABEL: @auto_gen_61( 781; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]] 782; CHECK-NEXT: ret i1 [[TMP1]] 783; 784 %cmp = fcmp uge double %a, %b 785 %cmp1 = fcmp one double %a, %b 786 %retval = and i1 %cmp, %cmp1 787 ret i1 %retval 788} 789 790define i1 @auto_gen_62(double %a, double %b) { 791; CHECK-LABEL: @auto_gen_62( 792; CHECK-NEXT: [[TMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]] 793; CHECK-NEXT: ret i1 [[TMP1]] 794; 795 %cmp = fcmp uge double %a, %b 796 %cmp1 = fcmp ord double %a, %b 797 %retval = and i1 %cmp, %cmp1 798 ret i1 %retval 799} 800 801define i1 @auto_gen_63(double %a, double %b) { 802; CHECK-LABEL: @auto_gen_63( 803; CHECK-NEXT: [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]] 804; CHECK-NEXT: ret i1 [[TMP1]] 805; 806 %cmp = fcmp uge double %a, %b 807 %cmp1 = fcmp ueq double %a, %b 808 %retval = and i1 %cmp, %cmp1 809 ret i1 %retval 810} 811 812define i1 @auto_gen_64(double %a, double %b) { 813; CHECK-LABEL: @auto_gen_64( 814; CHECK-NEXT: [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]] 815; CHECK-NEXT: ret i1 [[TMP1]] 816; 817 %cmp = fcmp uge double %a, %b 818 %cmp1 = fcmp ugt double %a, %b 819 %retval = and i1 %cmp, %cmp1 820 ret i1 %retval 821} 822 823define i1 @auto_gen_65(double %a, double %b) { 824; CHECK-LABEL: @auto_gen_65( 825; CHECK-NEXT: [[TMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]] 826; CHECK-NEXT: ret i1 [[TMP1]] 827; 828 %cmp = fcmp uge double %a, %b 829 %cmp1 = fcmp uge double %a, %b 830 %retval = and i1 %cmp, %cmp1 831 ret i1 %retval 832} 833 834define i1 @auto_gen_66(double %a, double %b) { 835; CHECK-LABEL: @auto_gen_66( 836; CHECK-NEXT: ret i1 false 837; 838 %cmp = fcmp ult double %a, %b 839 %cmp1 = fcmp false double %a, %b 840 %retval = and i1 %cmp, %cmp1 841 ret i1 %retval 842} 843 844define i1 @auto_gen_67(double %a, double %b) { 845; CHECK-LABEL: @auto_gen_67( 846; CHECK-NEXT: ret i1 false 847; 848 %cmp = fcmp ult double %a, %b 849 %cmp1 = fcmp oeq double %a, %b 850 %retval = and i1 %cmp, %cmp1 851 ret i1 %retval 852} 853 854define i1 @auto_gen_68(double %a, double %b) { 855; CHECK-LABEL: @auto_gen_68( 856; CHECK-NEXT: ret i1 false 857; 858 %cmp = fcmp ult double %a, %b 859 %cmp1 = fcmp ogt double %a, %b 860 %retval = and i1 %cmp, %cmp1 861 ret i1 %retval 862} 863 864define i1 @auto_gen_69(double %a, double %b) { 865; CHECK-LABEL: @auto_gen_69( 866; CHECK-NEXT: ret i1 false 867; 868 %cmp = fcmp ult double %a, %b 869 %cmp1 = fcmp oge double %a, %b 870 %retval = and i1 %cmp, %cmp1 871 ret i1 %retval 872} 873 874define i1 @auto_gen_70(double %a, double %b) { 875; CHECK-LABEL: @auto_gen_70( 876; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]] 877; CHECK-NEXT: ret i1 [[TMP1]] 878; 879 %cmp = fcmp ult double %a, %b 880 %cmp1 = fcmp olt double %a, %b 881 %retval = and i1 %cmp, %cmp1 882 ret i1 %retval 883} 884 885define i1 @auto_gen_71(double %a, double %b) { 886; CHECK-LABEL: @auto_gen_71( 887; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]] 888; CHECK-NEXT: ret i1 [[TMP1]] 889; 890 %cmp = fcmp ult double %a, %b 891 %cmp1 = fcmp ole double %a, %b 892 %retval = and i1 %cmp, %cmp1 893 ret i1 %retval 894} 895 896define i1 @auto_gen_72(double %a, double %b) { 897; CHECK-LABEL: @auto_gen_72( 898; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]] 899; CHECK-NEXT: ret i1 [[TMP1]] 900; 901 %cmp = fcmp ult double %a, %b 902 %cmp1 = fcmp one double %a, %b 903 %retval = and i1 %cmp, %cmp1 904 ret i1 %retval 905} 906 907define i1 @auto_gen_73(double %a, double %b) { 908; CHECK-LABEL: @auto_gen_73( 909; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]] 910; CHECK-NEXT: ret i1 [[TMP1]] 911; 912 %cmp = fcmp ult double %a, %b 913 %cmp1 = fcmp ord double %a, %b 914 %retval = and i1 %cmp, %cmp1 915 ret i1 %retval 916} 917 918define i1 @auto_gen_74(double %a, double %b) { 919; CHECK-LABEL: @auto_gen_74( 920; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]] 921; CHECK-NEXT: ret i1 [[TMP1]] 922; 923 %cmp = fcmp ult double %a, %b 924 %cmp1 = fcmp ueq double %a, %b 925 %retval = and i1 %cmp, %cmp1 926 ret i1 %retval 927} 928 929define i1 @auto_gen_75(double %a, double %b) { 930; CHECK-LABEL: @auto_gen_75( 931; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]] 932; CHECK-NEXT: ret i1 [[TMP1]] 933; 934 %cmp = fcmp ult double %a, %b 935 %cmp1 = fcmp ugt double %a, %b 936 %retval = and i1 %cmp, %cmp1 937 ret i1 %retval 938} 939 940define i1 @auto_gen_76(double %a, double %b) { 941; CHECK-LABEL: @auto_gen_76( 942; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]] 943; CHECK-NEXT: ret i1 [[TMP1]] 944; 945 %cmp = fcmp ult double %a, %b 946 %cmp1 = fcmp uge double %a, %b 947 %retval = and i1 %cmp, %cmp1 948 ret i1 %retval 949} 950 951define i1 @auto_gen_77(double %a, double %b) { 952; CHECK-LABEL: @auto_gen_77( 953; CHECK-NEXT: [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]] 954; CHECK-NEXT: ret i1 [[TMP1]] 955; 956 %cmp = fcmp ult double %a, %b 957 %cmp1 = fcmp ult double %a, %b 958 %retval = and i1 %cmp, %cmp1 959 ret i1 %retval 960} 961 962define i1 @auto_gen_78(double %a, double %b) { 963; CHECK-LABEL: @auto_gen_78( 964; CHECK-NEXT: ret i1 false 965; 966 %cmp = fcmp ule double %a, %b 967 %cmp1 = fcmp false double %a, %b 968 %retval = and i1 %cmp, %cmp1 969 ret i1 %retval 970} 971 972define i1 @auto_gen_79(double %a, double %b) { 973; CHECK-LABEL: @auto_gen_79( 974; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]] 975; CHECK-NEXT: ret i1 [[TMP1]] 976; 977 %cmp = fcmp ule double %a, %b 978 %cmp1 = fcmp oeq double %a, %b 979 %retval = and i1 %cmp, %cmp1 980 ret i1 %retval 981} 982 983define i1 @auto_gen_80(double %a, double %b) { 984; CHECK-LABEL: @auto_gen_80( 985; CHECK-NEXT: ret i1 false 986; 987 %cmp = fcmp ule double %a, %b 988 %cmp1 = fcmp ogt double %a, %b 989 %retval = and i1 %cmp, %cmp1 990 ret i1 %retval 991} 992 993define i1 @auto_gen_81(double %a, double %b) { 994; CHECK-LABEL: @auto_gen_81( 995; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]] 996; CHECK-NEXT: ret i1 [[TMP1]] 997; 998 %cmp = fcmp ule double %a, %b 999 %cmp1 = fcmp oge double %a, %b 1000 %retval = and i1 %cmp, %cmp1 1001 ret i1 %retval 1002} 1003 1004define i1 @auto_gen_82(double %a, double %b) { 1005; CHECK-LABEL: @auto_gen_82( 1006; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]] 1007; CHECK-NEXT: ret i1 [[TMP1]] 1008; 1009 %cmp = fcmp ule double %a, %b 1010 %cmp1 = fcmp olt double %a, %b 1011 %retval = and i1 %cmp, %cmp1 1012 ret i1 %retval 1013} 1014 1015define i1 @auto_gen_83(double %a, double %b) { 1016; CHECK-LABEL: @auto_gen_83( 1017; CHECK-NEXT: [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]] 1018; CHECK-NEXT: ret i1 [[TMP1]] 1019; 1020 %cmp = fcmp ule double %a, %b 1021 %cmp1 = fcmp ole double %a, %b 1022 %retval = and i1 %cmp, %cmp1 1023 ret i1 %retval 1024} 1025 1026define i1 @auto_gen_84(double %a, double %b) { 1027; CHECK-LABEL: @auto_gen_84( 1028; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]] 1029; CHECK-NEXT: ret i1 [[TMP1]] 1030; 1031 %cmp = fcmp ule double %a, %b 1032 %cmp1 = fcmp one double %a, %b 1033 %retval = and i1 %cmp, %cmp1 1034 ret i1 %retval 1035} 1036 1037define i1 @auto_gen_85(double %a, double %b) { 1038; CHECK-LABEL: @auto_gen_85( 1039; CHECK-NEXT: [[TMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]] 1040; CHECK-NEXT: ret i1 [[TMP1]] 1041; 1042 %cmp = fcmp ule double %a, %b 1043 %cmp1 = fcmp ord double %a, %b 1044 %retval = and i1 %cmp, %cmp1 1045 ret i1 %retval 1046} 1047 1048define i1 @auto_gen_86(double %a, double %b) { 1049; CHECK-LABEL: @auto_gen_86( 1050; CHECK-NEXT: [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]] 1051; CHECK-NEXT: ret i1 [[TMP1]] 1052; 1053 %cmp = fcmp ule double %a, %b 1054 %cmp1 = fcmp ueq double %a, %b 1055 %retval = and i1 %cmp, %cmp1 1056 ret i1 %retval 1057} 1058 1059define i1 @auto_gen_87(double %a, double %b) { 1060; CHECK-LABEL: @auto_gen_87( 1061; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]] 1062; CHECK-NEXT: ret i1 [[TMP1]] 1063; 1064 %cmp = fcmp ule double %a, %b 1065 %cmp1 = fcmp ugt double %a, %b 1066 %retval = and i1 %cmp, %cmp1 1067 ret i1 %retval 1068} 1069 1070define i1 @auto_gen_88(double %a, double %b) { 1071; CHECK-LABEL: @auto_gen_88( 1072; CHECK-NEXT: [[TMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]] 1073; CHECK-NEXT: ret i1 [[TMP1]] 1074; 1075 %cmp = fcmp ule double %a, %b 1076 %cmp1 = fcmp uge double %a, %b 1077 %retval = and i1 %cmp, %cmp1 1078 ret i1 %retval 1079} 1080 1081define i1 @auto_gen_89(double %a, double %b) { 1082; CHECK-LABEL: @auto_gen_89( 1083; CHECK-NEXT: [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]] 1084; CHECK-NEXT: ret i1 [[TMP1]] 1085; 1086 %cmp = fcmp ule double %a, %b 1087 %cmp1 = fcmp ult double %a, %b 1088 %retval = and i1 %cmp, %cmp1 1089 ret i1 %retval 1090} 1091 1092define i1 @auto_gen_90(double %a, double %b) { 1093; CHECK-LABEL: @auto_gen_90( 1094; CHECK-NEXT: [[TMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]] 1095; CHECK-NEXT: ret i1 [[TMP1]] 1096; 1097 %cmp = fcmp ule double %a, %b 1098 %cmp1 = fcmp ule double %a, %b 1099 %retval = and i1 %cmp, %cmp1 1100 ret i1 %retval 1101} 1102 1103define i1 @auto_gen_91(double %a, double %b) { 1104; CHECK-LABEL: @auto_gen_91( 1105; CHECK-NEXT: ret i1 false 1106; 1107 %cmp = fcmp une double %a, %b 1108 %cmp1 = fcmp false double %a, %b 1109 %retval = and i1 %cmp, %cmp1 1110 ret i1 %retval 1111} 1112 1113define i1 @auto_gen_92(double %a, double %b) { 1114; CHECK-LABEL: @auto_gen_92( 1115; CHECK-NEXT: ret i1 false 1116; 1117 %cmp = fcmp une double %a, %b 1118 %cmp1 = fcmp oeq double %a, %b 1119 %retval = and i1 %cmp, %cmp1 1120 ret i1 %retval 1121} 1122 1123define i1 @auto_gen_93(double %a, double %b) { 1124; CHECK-LABEL: @auto_gen_93( 1125; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]] 1126; CHECK-NEXT: ret i1 [[TMP1]] 1127; 1128 %cmp = fcmp une double %a, %b 1129 %cmp1 = fcmp ogt double %a, %b 1130 %retval = and i1 %cmp, %cmp1 1131 ret i1 %retval 1132} 1133 1134define i1 @auto_gen_94(double %a, double %b) { 1135; CHECK-LABEL: @auto_gen_94( 1136; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]] 1137; CHECK-NEXT: ret i1 [[TMP1]] 1138; 1139 %cmp = fcmp une double %a, %b 1140 %cmp1 = fcmp oge double %a, %b 1141 %retval = and i1 %cmp, %cmp1 1142 ret i1 %retval 1143} 1144 1145define i1 @auto_gen_95(double %a, double %b) { 1146; CHECK-LABEL: @auto_gen_95( 1147; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]] 1148; CHECK-NEXT: ret i1 [[TMP1]] 1149; 1150 %cmp = fcmp une double %a, %b 1151 %cmp1 = fcmp olt double %a, %b 1152 %retval = and i1 %cmp, %cmp1 1153 ret i1 %retval 1154} 1155 1156define i1 @auto_gen_96(double %a, double %b) { 1157; CHECK-LABEL: @auto_gen_96( 1158; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]] 1159; CHECK-NEXT: ret i1 [[TMP1]] 1160; 1161 %cmp = fcmp une double %a, %b 1162 %cmp1 = fcmp ole double %a, %b 1163 %retval = and i1 %cmp, %cmp1 1164 ret i1 %retval 1165} 1166 1167define i1 @auto_gen_97(double %a, double %b) { 1168; CHECK-LABEL: @auto_gen_97( 1169; CHECK-NEXT: [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]] 1170; CHECK-NEXT: ret i1 [[TMP1]] 1171; 1172 %cmp = fcmp une double %a, %b 1173 %cmp1 = fcmp one double %a, %b 1174 %retval = and i1 %cmp, %cmp1 1175 ret i1 %retval 1176} 1177 1178define i1 @auto_gen_98(double %a, double %b) { 1179; CHECK-LABEL: @auto_gen_98( 1180; CHECK-NEXT: [[TMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]] 1181; CHECK-NEXT: ret i1 [[TMP1]] 1182; 1183 %cmp = fcmp une double %a, %b 1184 %cmp1 = fcmp ord double %a, %b 1185 %retval = and i1 %cmp, %cmp1 1186 ret i1 %retval 1187} 1188 1189define i1 @auto_gen_99(double %a, double %b) { 1190; CHECK-LABEL: @auto_gen_99( 1191; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]] 1192; CHECK-NEXT: ret i1 [[TMP1]] 1193; 1194 %cmp = fcmp une double %a, %b 1195 %cmp1 = fcmp ueq double %a, %b 1196 %retval = and i1 %cmp, %cmp1 1197 ret i1 %retval 1198} 1199 1200define i1 @auto_gen_100(double %a, double %b) { 1201; CHECK-LABEL: @auto_gen_100( 1202; CHECK-NEXT: [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]] 1203; CHECK-NEXT: ret i1 [[TMP1]] 1204; 1205 %cmp = fcmp une double %a, %b 1206 %cmp1 = fcmp ugt double %a, %b 1207 %retval = and i1 %cmp, %cmp1 1208 ret i1 %retval 1209} 1210 1211define i1 @auto_gen_101(double %a, double %b) { 1212; CHECK-LABEL: @auto_gen_101( 1213; CHECK-NEXT: [[TMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]] 1214; CHECK-NEXT: ret i1 [[TMP1]] 1215; 1216 %cmp = fcmp une double %a, %b 1217 %cmp1 = fcmp uge double %a, %b 1218 %retval = and i1 %cmp, %cmp1 1219 ret i1 %retval 1220} 1221 1222define i1 @auto_gen_102(double %a, double %b) { 1223; CHECK-LABEL: @auto_gen_102( 1224; CHECK-NEXT: [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]] 1225; CHECK-NEXT: ret i1 [[TMP1]] 1226; 1227 %cmp = fcmp une double %a, %b 1228 %cmp1 = fcmp ult double %a, %b 1229 %retval = and i1 %cmp, %cmp1 1230 ret i1 %retval 1231} 1232 1233define i1 @auto_gen_103(double %a, double %b) { 1234; CHECK-LABEL: @auto_gen_103( 1235; CHECK-NEXT: [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]] 1236; CHECK-NEXT: ret i1 [[TMP1]] 1237; 1238 %cmp = fcmp une double %a, %b 1239 %cmp1 = fcmp ule double %a, %b 1240 %retval = and i1 %cmp, %cmp1 1241 ret i1 %retval 1242} 1243 1244define i1 @auto_gen_104(double %a, double %b) { 1245; CHECK-LABEL: @auto_gen_104( 1246; CHECK-NEXT: [[TMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]] 1247; CHECK-NEXT: ret i1 [[TMP1]] 1248; 1249 %cmp = fcmp une double %a, %b 1250 %cmp1 = fcmp une double %a, %b 1251 %retval = and i1 %cmp, %cmp1 1252 ret i1 %retval 1253} 1254 1255define i1 @auto_gen_105(double %a, double %b) { 1256; CHECK-LABEL: @auto_gen_105( 1257; CHECK-NEXT: ret i1 false 1258; 1259 %cmp = fcmp uno double %a, %b 1260 %cmp1 = fcmp false double %a, %b 1261 %retval = and i1 %cmp, %cmp1 1262 ret i1 %retval 1263} 1264 1265define i1 @auto_gen_106(double %a, double %b) { 1266; CHECK-LABEL: @auto_gen_106( 1267; CHECK-NEXT: ret i1 false 1268; 1269 %cmp = fcmp uno double %a, %b 1270 %cmp1 = fcmp oeq double %a, %b 1271 %retval = and i1 %cmp, %cmp1 1272 ret i1 %retval 1273} 1274 1275define i1 @auto_gen_107(double %a, double %b) { 1276; CHECK-LABEL: @auto_gen_107( 1277; CHECK-NEXT: ret i1 false 1278; 1279 %cmp = fcmp uno double %a, %b 1280 %cmp1 = fcmp ogt double %a, %b 1281 %retval = and i1 %cmp, %cmp1 1282 ret i1 %retval 1283} 1284 1285define i1 @auto_gen_108(double %a, double %b) { 1286; CHECK-LABEL: @auto_gen_108( 1287; CHECK-NEXT: ret i1 false 1288; 1289 %cmp = fcmp uno double %a, %b 1290 %cmp1 = fcmp oge double %a, %b 1291 %retval = and i1 %cmp, %cmp1 1292 ret i1 %retval 1293} 1294 1295define i1 @auto_gen_109(double %a, double %b) { 1296; CHECK-LABEL: @auto_gen_109( 1297; CHECK-NEXT: ret i1 false 1298; 1299 %cmp = fcmp uno double %a, %b 1300 %cmp1 = fcmp olt double %a, %b 1301 %retval = and i1 %cmp, %cmp1 1302 ret i1 %retval 1303} 1304 1305define i1 @auto_gen_110(double %a, double %b) { 1306; CHECK-LABEL: @auto_gen_110( 1307; CHECK-NEXT: ret i1 false 1308; 1309 %cmp = fcmp uno double %a, %b 1310 %cmp1 = fcmp ole double %a, %b 1311 %retval = and i1 %cmp, %cmp1 1312 ret i1 %retval 1313} 1314 1315define i1 @auto_gen_111(double %a, double %b) { 1316; CHECK-LABEL: @auto_gen_111( 1317; CHECK-NEXT: ret i1 false 1318; 1319 %cmp = fcmp uno double %a, %b 1320 %cmp1 = fcmp one double %a, %b 1321 %retval = and i1 %cmp, %cmp1 1322 ret i1 %retval 1323} 1324 1325define i1 @auto_gen_112(double %a, double %b) { 1326; CHECK-LABEL: @auto_gen_112( 1327; CHECK-NEXT: ret i1 false 1328; 1329 %cmp = fcmp uno double %a, %b 1330 %cmp1 = fcmp ord double %a, %b 1331 %retval = and i1 %cmp, %cmp1 1332 ret i1 %retval 1333} 1334 1335define i1 @auto_gen_113(double %a, double %b) { 1336; CHECK-LABEL: @auto_gen_113( 1337; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]] 1338; CHECK-NEXT: ret i1 [[TMP1]] 1339; 1340 %cmp = fcmp uno double %a, %b 1341 %cmp1 = fcmp ueq double %a, %b 1342 %retval = and i1 %cmp, %cmp1 1343 ret i1 %retval 1344} 1345 1346define i1 @auto_gen_114(double %a, double %b) { 1347; CHECK-LABEL: @auto_gen_114( 1348; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]] 1349; CHECK-NEXT: ret i1 [[TMP1]] 1350; 1351 %cmp = fcmp uno double %a, %b 1352 %cmp1 = fcmp ugt double %a, %b 1353 %retval = and i1 %cmp, %cmp1 1354 ret i1 %retval 1355} 1356 1357define i1 @auto_gen_115(double %a, double %b) { 1358; CHECK-LABEL: @auto_gen_115( 1359; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]] 1360; CHECK-NEXT: ret i1 [[TMP1]] 1361; 1362 %cmp = fcmp uno double %a, %b 1363 %cmp1 = fcmp uge double %a, %b 1364 %retval = and i1 %cmp, %cmp1 1365 ret i1 %retval 1366} 1367 1368define i1 @auto_gen_116(double %a, double %b) { 1369; CHECK-LABEL: @auto_gen_116( 1370; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]] 1371; CHECK-NEXT: ret i1 [[TMP1]] 1372; 1373 %cmp = fcmp uno double %a, %b 1374 %cmp1 = fcmp ult double %a, %b 1375 %retval = and i1 %cmp, %cmp1 1376 ret i1 %retval 1377} 1378 1379define i1 @auto_gen_117(double %a, double %b) { 1380; CHECK-LABEL: @auto_gen_117( 1381; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]] 1382; CHECK-NEXT: ret i1 [[TMP1]] 1383; 1384 %cmp = fcmp uno double %a, %b 1385 %cmp1 = fcmp ule double %a, %b 1386 %retval = and i1 %cmp, %cmp1 1387 ret i1 %retval 1388} 1389 1390define i1 @auto_gen_118(double %a, double %b) { 1391; CHECK-LABEL: @auto_gen_118( 1392; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]] 1393; CHECK-NEXT: ret i1 [[TMP1]] 1394; 1395 %cmp = fcmp uno double %a, %b 1396 %cmp1 = fcmp une double %a, %b 1397 %retval = and i1 %cmp, %cmp1 1398 ret i1 %retval 1399} 1400 1401define i1 @auto_gen_119(double %a, double %b) { 1402; CHECK-LABEL: @auto_gen_119( 1403; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]] 1404; CHECK-NEXT: ret i1 [[TMP1]] 1405; 1406 %cmp = fcmp uno double %a, %b 1407 %cmp1 = fcmp uno double %a, %b 1408 %retval = and i1 %cmp, %cmp1 1409 ret i1 %retval 1410} 1411 1412define i1 @auto_gen_120(double %a, double %b) { 1413; CHECK-LABEL: @auto_gen_120( 1414; CHECK-NEXT: ret i1 false 1415; 1416 %cmp = fcmp true double %a, %b 1417 %cmp1 = fcmp false double %a, %b 1418 %retval = and i1 %cmp, %cmp1 1419 ret i1 %retval 1420} 1421 1422define i1 @auto_gen_121(double %a, double %b) { 1423; CHECK-LABEL: @auto_gen_121( 1424; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double [[A:%.*]], [[B:%.*]] 1425; CHECK-NEXT: ret i1 [[CMP1]] 1426; 1427 %cmp = fcmp true double %a, %b 1428 %cmp1 = fcmp oeq double %a, %b 1429 %retval = and i1 %cmp, %cmp1 1430 ret i1 %retval 1431} 1432 1433define i1 @auto_gen_122(double %a, double %b) { 1434; CHECK-LABEL: @auto_gen_122( 1435; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double [[A:%.*]], [[B:%.*]] 1436; CHECK-NEXT: ret i1 [[CMP1]] 1437; 1438 %cmp = fcmp true double %a, %b 1439 %cmp1 = fcmp ogt double %a, %b 1440 %retval = and i1 %cmp, %cmp1 1441 ret i1 %retval 1442} 1443 1444define i1 @auto_gen_123(double %a, double %b) { 1445; CHECK-LABEL: @auto_gen_123( 1446; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double [[A:%.*]], [[B:%.*]] 1447; CHECK-NEXT: ret i1 [[CMP1]] 1448; 1449 %cmp = fcmp true double %a, %b 1450 %cmp1 = fcmp oge double %a, %b 1451 %retval = and i1 %cmp, %cmp1 1452 ret i1 %retval 1453} 1454 1455define i1 @auto_gen_124(double %a, double %b) { 1456; CHECK-LABEL: @auto_gen_124( 1457; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]] 1458; CHECK-NEXT: ret i1 [[CMP1]] 1459; 1460 %cmp = fcmp true double %a, %b 1461 %cmp1 = fcmp olt double %a, %b 1462 %retval = and i1 %cmp, %cmp1 1463 ret i1 %retval 1464} 1465 1466define i1 @auto_gen_125(double %a, double %b) { 1467; CHECK-LABEL: @auto_gen_125( 1468; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double [[A:%.*]], [[B:%.*]] 1469; CHECK-NEXT: ret i1 [[CMP1]] 1470; 1471 %cmp = fcmp true double %a, %b 1472 %cmp1 = fcmp ole double %a, %b 1473 %retval = and i1 %cmp, %cmp1 1474 ret i1 %retval 1475} 1476 1477define i1 @auto_gen_126(double %a, double %b) { 1478; CHECK-LABEL: @auto_gen_126( 1479; CHECK-NEXT: [[CMP1:%.*]] = fcmp one double [[A:%.*]], [[B:%.*]] 1480; CHECK-NEXT: ret i1 [[CMP1]] 1481; 1482 %cmp = fcmp true double %a, %b 1483 %cmp1 = fcmp one double %a, %b 1484 %retval = and i1 %cmp, %cmp1 1485 ret i1 %retval 1486} 1487 1488define i1 @auto_gen_127(double %a, double %b) { 1489; CHECK-LABEL: @auto_gen_127( 1490; CHECK-NEXT: [[CMP1:%.*]] = fcmp ord double [[A:%.*]], [[B:%.*]] 1491; CHECK-NEXT: ret i1 [[CMP1]] 1492; 1493 %cmp = fcmp true double %a, %b 1494 %cmp1 = fcmp ord double %a, %b 1495 %retval = and i1 %cmp, %cmp1 1496 ret i1 %retval 1497} 1498 1499define i1 @auto_gen_128(double %a, double %b) { 1500; CHECK-LABEL: @auto_gen_128( 1501; CHECK-NEXT: [[CMP1:%.*]] = fcmp ueq double [[A:%.*]], [[B:%.*]] 1502; CHECK-NEXT: ret i1 [[CMP1]] 1503; 1504 %cmp = fcmp true double %a, %b 1505 %cmp1 = fcmp ueq double %a, %b 1506 %retval = and i1 %cmp, %cmp1 1507 ret i1 %retval 1508} 1509 1510define i1 @auto_gen_129(double %a, double %b) { 1511; CHECK-LABEL: @auto_gen_129( 1512; CHECK-NEXT: [[CMP1:%.*]] = fcmp ugt double [[A:%.*]], [[B:%.*]] 1513; CHECK-NEXT: ret i1 [[CMP1]] 1514; 1515 %cmp = fcmp true double %a, %b 1516 %cmp1 = fcmp ugt double %a, %b 1517 %retval = and i1 %cmp, %cmp1 1518 ret i1 %retval 1519} 1520 1521define i1 @auto_gen_130(double %a, double %b) { 1522; CHECK-LABEL: @auto_gen_130( 1523; CHECK-NEXT: [[CMP1:%.*]] = fcmp uge double [[A:%.*]], [[B:%.*]] 1524; CHECK-NEXT: ret i1 [[CMP1]] 1525; 1526 %cmp = fcmp true double %a, %b 1527 %cmp1 = fcmp uge double %a, %b 1528 %retval = and i1 %cmp, %cmp1 1529 ret i1 %retval 1530} 1531 1532define i1 @auto_gen_131(double %a, double %b) { 1533; CHECK-LABEL: @auto_gen_131( 1534; CHECK-NEXT: [[CMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]] 1535; CHECK-NEXT: ret i1 [[CMP1]] 1536; 1537 %cmp = fcmp true double %a, %b 1538 %cmp1 = fcmp ult double %a, %b 1539 %retval = and i1 %cmp, %cmp1 1540 ret i1 %retval 1541} 1542 1543define i1 @auto_gen_132(double %a, double %b) { 1544; CHECK-LABEL: @auto_gen_132( 1545; CHECK-NEXT: [[CMP1:%.*]] = fcmp ule double [[A:%.*]], [[B:%.*]] 1546; CHECK-NEXT: ret i1 [[CMP1]] 1547; 1548 %cmp = fcmp true double %a, %b 1549 %cmp1 = fcmp ule double %a, %b 1550 %retval = and i1 %cmp, %cmp1 1551 ret i1 %retval 1552} 1553 1554define i1 @auto_gen_133(double %a, double %b) { 1555; CHECK-LABEL: @auto_gen_133( 1556; CHECK-NEXT: [[CMP1:%.*]] = fcmp une double [[A:%.*]], [[B:%.*]] 1557; CHECK-NEXT: ret i1 [[CMP1]] 1558; 1559 %cmp = fcmp true double %a, %b 1560 %cmp1 = fcmp une double %a, %b 1561 %retval = and i1 %cmp, %cmp1 1562 ret i1 %retval 1563} 1564 1565define i1 @auto_gen_134(double %a, double %b) { 1566; CHECK-LABEL: @auto_gen_134( 1567; CHECK-NEXT: [[CMP1:%.*]] = fcmp uno double [[A:%.*]], [[B:%.*]] 1568; CHECK-NEXT: ret i1 [[CMP1]] 1569; 1570 %cmp = fcmp true double %a, %b 1571 %cmp1 = fcmp uno double %a, %b 1572 %retval = and i1 %cmp, %cmp1 1573 ret i1 %retval 1574} 1575 1576define i1 @auto_gen_135(double %a, double %b) { 1577; CHECK-LABEL: @auto_gen_135( 1578; CHECK-NEXT: ret i1 true 1579; 1580 %cmp = fcmp true double %a, %b 1581 %cmp1 = fcmp true double %a, %b 1582 %retval = and i1 %cmp, %cmp1 1583 ret i1 %retval 1584} 1585