1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefix=SDAG 3; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefixes=FAST,FAST_NOAVX 4; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=avx | FileCheck %s --check-prefixes=FAST,FAST_AVX 5; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=avx512f | FileCheck %s --check-prefixes=FAST,FAST_AVX 6 7define zeroext i1 @fcmp_oeq(float %x, float %y) { 8; SDAG-LABEL: fcmp_oeq: 9; SDAG: ## %bb.0: 10; SDAG-NEXT: cmpeqss %xmm1, %xmm0 11; SDAG-NEXT: movd %xmm0, %eax 12; SDAG-NEXT: andl $1, %eax 13; SDAG-NEXT: ## kill: def $al killed $al killed $eax 14; SDAG-NEXT: retq 15; 16; FAST_NOAVX-LABEL: fcmp_oeq: 17; FAST_NOAVX: ## %bb.0: 18; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 19; FAST_NOAVX-NEXT: sete %cl 20; FAST_NOAVX-NEXT: setnp %al 21; FAST_NOAVX-NEXT: andb %cl, %al 22; FAST_NOAVX-NEXT: andb $1, %al 23; FAST_NOAVX-NEXT: retq 24; 25; FAST_AVX-LABEL: fcmp_oeq: 26; FAST_AVX: ## %bb.0: 27; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 28; FAST_AVX-NEXT: sete %cl 29; FAST_AVX-NEXT: setnp %al 30; FAST_AVX-NEXT: andb %cl, %al 31; FAST_AVX-NEXT: andb $1, %al 32; FAST_AVX-NEXT: retq 33 %1 = fcmp oeq float %x, %y 34 ret i1 %1 35} 36 37define zeroext i1 @fcmp_ogt(float %x, float %y) { 38; SDAG-LABEL: fcmp_ogt: 39; SDAG: ## %bb.0: 40; SDAG-NEXT: ucomiss %xmm1, %xmm0 41; SDAG-NEXT: seta %al 42; SDAG-NEXT: retq 43; 44; FAST_NOAVX-LABEL: fcmp_ogt: 45; FAST_NOAVX: ## %bb.0: 46; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 47; FAST_NOAVX-NEXT: seta %al 48; FAST_NOAVX-NEXT: andb $1, %al 49; FAST_NOAVX-NEXT: retq 50; 51; FAST_AVX-LABEL: fcmp_ogt: 52; FAST_AVX: ## %bb.0: 53; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 54; FAST_AVX-NEXT: seta %al 55; FAST_AVX-NEXT: andb $1, %al 56; FAST_AVX-NEXT: retq 57 %1 = fcmp ogt float %x, %y 58 ret i1 %1 59} 60 61define zeroext i1 @fcmp_oge(float %x, float %y) { 62; SDAG-LABEL: fcmp_oge: 63; SDAG: ## %bb.0: 64; SDAG-NEXT: ucomiss %xmm1, %xmm0 65; SDAG-NEXT: setae %al 66; SDAG-NEXT: retq 67; 68; FAST_NOAVX-LABEL: fcmp_oge: 69; FAST_NOAVX: ## %bb.0: 70; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 71; FAST_NOAVX-NEXT: setae %al 72; FAST_NOAVX-NEXT: andb $1, %al 73; FAST_NOAVX-NEXT: retq 74; 75; FAST_AVX-LABEL: fcmp_oge: 76; FAST_AVX: ## %bb.0: 77; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 78; FAST_AVX-NEXT: setae %al 79; FAST_AVX-NEXT: andb $1, %al 80; FAST_AVX-NEXT: retq 81 %1 = fcmp oge float %x, %y 82 ret i1 %1 83} 84 85define zeroext i1 @fcmp_olt(float %x, float %y) { 86; SDAG-LABEL: fcmp_olt: 87; SDAG: ## %bb.0: 88; SDAG-NEXT: ucomiss %xmm0, %xmm1 89; SDAG-NEXT: seta %al 90; SDAG-NEXT: retq 91; 92; FAST_NOAVX-LABEL: fcmp_olt: 93; FAST_NOAVX: ## %bb.0: 94; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm1 95; FAST_NOAVX-NEXT: seta %al 96; FAST_NOAVX-NEXT: andb $1, %al 97; FAST_NOAVX-NEXT: retq 98; 99; FAST_AVX-LABEL: fcmp_olt: 100; FAST_AVX: ## %bb.0: 101; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1 102; FAST_AVX-NEXT: seta %al 103; FAST_AVX-NEXT: andb $1, %al 104; FAST_AVX-NEXT: retq 105 %1 = fcmp olt float %x, %y 106 ret i1 %1 107} 108 109define zeroext i1 @fcmp_ole(float %x, float %y) { 110; SDAG-LABEL: fcmp_ole: 111; SDAG: ## %bb.0: 112; SDAG-NEXT: ucomiss %xmm0, %xmm1 113; SDAG-NEXT: setae %al 114; SDAG-NEXT: retq 115; 116; FAST_NOAVX-LABEL: fcmp_ole: 117; FAST_NOAVX: ## %bb.0: 118; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm1 119; FAST_NOAVX-NEXT: setae %al 120; FAST_NOAVX-NEXT: andb $1, %al 121; FAST_NOAVX-NEXT: retq 122; 123; FAST_AVX-LABEL: fcmp_ole: 124; FAST_AVX: ## %bb.0: 125; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1 126; FAST_AVX-NEXT: setae %al 127; FAST_AVX-NEXT: andb $1, %al 128; FAST_AVX-NEXT: retq 129 %1 = fcmp ole float %x, %y 130 ret i1 %1 131} 132 133define zeroext i1 @fcmp_one(float %x, float %y) { 134; SDAG-LABEL: fcmp_one: 135; SDAG: ## %bb.0: 136; SDAG-NEXT: ucomiss %xmm1, %xmm0 137; SDAG-NEXT: setne %al 138; SDAG-NEXT: retq 139; 140; FAST_NOAVX-LABEL: fcmp_one: 141; FAST_NOAVX: ## %bb.0: 142; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 143; FAST_NOAVX-NEXT: setne %al 144; FAST_NOAVX-NEXT: andb $1, %al 145; FAST_NOAVX-NEXT: retq 146; 147; FAST_AVX-LABEL: fcmp_one: 148; FAST_AVX: ## %bb.0: 149; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 150; FAST_AVX-NEXT: setne %al 151; FAST_AVX-NEXT: andb $1, %al 152; FAST_AVX-NEXT: retq 153 %1 = fcmp one float %x, %y 154 ret i1 %1 155} 156 157define zeroext i1 @fcmp_ord(float %x, float %y) { 158; SDAG-LABEL: fcmp_ord: 159; SDAG: ## %bb.0: 160; SDAG-NEXT: ucomiss %xmm1, %xmm0 161; SDAG-NEXT: setnp %al 162; SDAG-NEXT: retq 163; 164; FAST_NOAVX-LABEL: fcmp_ord: 165; FAST_NOAVX: ## %bb.0: 166; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 167; FAST_NOAVX-NEXT: setnp %al 168; FAST_NOAVX-NEXT: andb $1, %al 169; FAST_NOAVX-NEXT: retq 170; 171; FAST_AVX-LABEL: fcmp_ord: 172; FAST_AVX: ## %bb.0: 173; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 174; FAST_AVX-NEXT: setnp %al 175; FAST_AVX-NEXT: andb $1, %al 176; FAST_AVX-NEXT: retq 177 %1 = fcmp ord float %x, %y 178 ret i1 %1 179} 180 181define zeroext i1 @fcmp_uno(float %x, float %y) { 182; SDAG-LABEL: fcmp_uno: 183; SDAG: ## %bb.0: 184; SDAG-NEXT: ucomiss %xmm1, %xmm0 185; SDAG-NEXT: setp %al 186; SDAG-NEXT: retq 187; 188; FAST_NOAVX-LABEL: fcmp_uno: 189; FAST_NOAVX: ## %bb.0: 190; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 191; FAST_NOAVX-NEXT: setp %al 192; FAST_NOAVX-NEXT: andb $1, %al 193; FAST_NOAVX-NEXT: retq 194; 195; FAST_AVX-LABEL: fcmp_uno: 196; FAST_AVX: ## %bb.0: 197; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 198; FAST_AVX-NEXT: setp %al 199; FAST_AVX-NEXT: andb $1, %al 200; FAST_AVX-NEXT: retq 201 %1 = fcmp uno float %x, %y 202 ret i1 %1 203} 204 205define zeroext i1 @fcmp_ueq(float %x, float %y) { 206; SDAG-LABEL: fcmp_ueq: 207; SDAG: ## %bb.0: 208; SDAG-NEXT: ucomiss %xmm1, %xmm0 209; SDAG-NEXT: sete %al 210; SDAG-NEXT: retq 211; 212; FAST_NOAVX-LABEL: fcmp_ueq: 213; FAST_NOAVX: ## %bb.0: 214; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 215; FAST_NOAVX-NEXT: sete %al 216; FAST_NOAVX-NEXT: andb $1, %al 217; FAST_NOAVX-NEXT: retq 218; 219; FAST_AVX-LABEL: fcmp_ueq: 220; FAST_AVX: ## %bb.0: 221; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 222; FAST_AVX-NEXT: sete %al 223; FAST_AVX-NEXT: andb $1, %al 224; FAST_AVX-NEXT: retq 225 %1 = fcmp ueq float %x, %y 226 ret i1 %1 227} 228 229define zeroext i1 @fcmp_ugt(float %x, float %y) { 230; SDAG-LABEL: fcmp_ugt: 231; SDAG: ## %bb.0: 232; SDAG-NEXT: ucomiss %xmm0, %xmm1 233; SDAG-NEXT: setb %al 234; SDAG-NEXT: retq 235; 236; FAST_NOAVX-LABEL: fcmp_ugt: 237; FAST_NOAVX: ## %bb.0: 238; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm1 239; FAST_NOAVX-NEXT: setb %al 240; FAST_NOAVX-NEXT: andb $1, %al 241; FAST_NOAVX-NEXT: retq 242; 243; FAST_AVX-LABEL: fcmp_ugt: 244; FAST_AVX: ## %bb.0: 245; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1 246; FAST_AVX-NEXT: setb %al 247; FAST_AVX-NEXT: andb $1, %al 248; FAST_AVX-NEXT: retq 249 %1 = fcmp ugt float %x, %y 250 ret i1 %1 251} 252 253define zeroext i1 @fcmp_uge(float %x, float %y) { 254; SDAG-LABEL: fcmp_uge: 255; SDAG: ## %bb.0: 256; SDAG-NEXT: ucomiss %xmm0, %xmm1 257; SDAG-NEXT: setbe %al 258; SDAG-NEXT: retq 259; 260; FAST_NOAVX-LABEL: fcmp_uge: 261; FAST_NOAVX: ## %bb.0: 262; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm1 263; FAST_NOAVX-NEXT: setbe %al 264; FAST_NOAVX-NEXT: andb $1, %al 265; FAST_NOAVX-NEXT: retq 266; 267; FAST_AVX-LABEL: fcmp_uge: 268; FAST_AVX: ## %bb.0: 269; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1 270; FAST_AVX-NEXT: setbe %al 271; FAST_AVX-NEXT: andb $1, %al 272; FAST_AVX-NEXT: retq 273 %1 = fcmp uge float %x, %y 274 ret i1 %1 275} 276 277define zeroext i1 @fcmp_ult(float %x, float %y) { 278; SDAG-LABEL: fcmp_ult: 279; SDAG: ## %bb.0: 280; SDAG-NEXT: ucomiss %xmm1, %xmm0 281; SDAG-NEXT: setb %al 282; SDAG-NEXT: retq 283; 284; FAST_NOAVX-LABEL: fcmp_ult: 285; FAST_NOAVX: ## %bb.0: 286; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 287; FAST_NOAVX-NEXT: setb %al 288; FAST_NOAVX-NEXT: andb $1, %al 289; FAST_NOAVX-NEXT: retq 290; 291; FAST_AVX-LABEL: fcmp_ult: 292; FAST_AVX: ## %bb.0: 293; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 294; FAST_AVX-NEXT: setb %al 295; FAST_AVX-NEXT: andb $1, %al 296; FAST_AVX-NEXT: retq 297 %1 = fcmp ult float %x, %y 298 ret i1 %1 299} 300 301define zeroext i1 @fcmp_ule(float %x, float %y) { 302; SDAG-LABEL: fcmp_ule: 303; SDAG: ## %bb.0: 304; SDAG-NEXT: ucomiss %xmm1, %xmm0 305; SDAG-NEXT: setbe %al 306; SDAG-NEXT: retq 307; 308; FAST_NOAVX-LABEL: fcmp_ule: 309; FAST_NOAVX: ## %bb.0: 310; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 311; FAST_NOAVX-NEXT: setbe %al 312; FAST_NOAVX-NEXT: andb $1, %al 313; FAST_NOAVX-NEXT: retq 314; 315; FAST_AVX-LABEL: fcmp_ule: 316; FAST_AVX: ## %bb.0: 317; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 318; FAST_AVX-NEXT: setbe %al 319; FAST_AVX-NEXT: andb $1, %al 320; FAST_AVX-NEXT: retq 321 %1 = fcmp ule float %x, %y 322 ret i1 %1 323} 324 325define zeroext i1 @fcmp_une(float %x, float %y) { 326; SDAG-LABEL: fcmp_une: 327; SDAG: ## %bb.0: 328; SDAG-NEXT: cmpneqss %xmm1, %xmm0 329; SDAG-NEXT: movd %xmm0, %eax 330; SDAG-NEXT: andl $1, %eax 331; SDAG-NEXT: ## kill: def $al killed $al killed $eax 332; SDAG-NEXT: retq 333; 334; FAST_NOAVX-LABEL: fcmp_une: 335; FAST_NOAVX: ## %bb.0: 336; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 337; FAST_NOAVX-NEXT: setne %cl 338; FAST_NOAVX-NEXT: setp %al 339; FAST_NOAVX-NEXT: orb %cl, %al 340; FAST_NOAVX-NEXT: andb $1, %al 341; FAST_NOAVX-NEXT: retq 342; 343; FAST_AVX-LABEL: fcmp_une: 344; FAST_AVX: ## %bb.0: 345; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 346; FAST_AVX-NEXT: setne %cl 347; FAST_AVX-NEXT: setp %al 348; FAST_AVX-NEXT: orb %cl, %al 349; FAST_AVX-NEXT: andb $1, %al 350; FAST_AVX-NEXT: retq 351 %1 = fcmp une float %x, %y 352 ret i1 %1 353} 354 355define zeroext i1 @icmp_eq(i32 %x, i32 %y) { 356; SDAG-LABEL: icmp_eq: 357; SDAG: ## %bb.0: 358; SDAG-NEXT: cmpl %esi, %edi 359; SDAG-NEXT: sete %al 360; SDAG-NEXT: retq 361; 362; FAST-LABEL: icmp_eq: 363; FAST: ## %bb.0: 364; FAST-NEXT: cmpl %esi, %edi 365; FAST-NEXT: sete %al 366; FAST-NEXT: andb $1, %al 367; FAST-NEXT: retq 368 %1 = icmp eq i32 %x, %y 369 ret i1 %1 370} 371 372define zeroext i1 @icmp_ne(i32 %x, i32 %y) { 373; SDAG-LABEL: icmp_ne: 374; SDAG: ## %bb.0: 375; SDAG-NEXT: cmpl %esi, %edi 376; SDAG-NEXT: setne %al 377; SDAG-NEXT: retq 378; 379; FAST-LABEL: icmp_ne: 380; FAST: ## %bb.0: 381; FAST-NEXT: cmpl %esi, %edi 382; FAST-NEXT: setne %al 383; FAST-NEXT: andb $1, %al 384; FAST-NEXT: retq 385 %1 = icmp ne i32 %x, %y 386 ret i1 %1 387} 388 389define zeroext i1 @icmp_ugt(i32 %x, i32 %y) { 390; SDAG-LABEL: icmp_ugt: 391; SDAG: ## %bb.0: 392; SDAG-NEXT: cmpl %esi, %edi 393; SDAG-NEXT: seta %al 394; SDAG-NEXT: retq 395; 396; FAST-LABEL: icmp_ugt: 397; FAST: ## %bb.0: 398; FAST-NEXT: cmpl %esi, %edi 399; FAST-NEXT: seta %al 400; FAST-NEXT: andb $1, %al 401; FAST-NEXT: retq 402 %1 = icmp ugt i32 %x, %y 403 ret i1 %1 404} 405 406define zeroext i1 @icmp_uge(i32 %x, i32 %y) { 407; SDAG-LABEL: icmp_uge: 408; SDAG: ## %bb.0: 409; SDAG-NEXT: cmpl %esi, %edi 410; SDAG-NEXT: setae %al 411; SDAG-NEXT: retq 412; 413; FAST-LABEL: icmp_uge: 414; FAST: ## %bb.0: 415; FAST-NEXT: cmpl %esi, %edi 416; FAST-NEXT: setae %al 417; FAST-NEXT: andb $1, %al 418; FAST-NEXT: retq 419 %1 = icmp uge i32 %x, %y 420 ret i1 %1 421} 422 423define zeroext i1 @icmp_ult(i32 %x, i32 %y) { 424; SDAG-LABEL: icmp_ult: 425; SDAG: ## %bb.0: 426; SDAG-NEXT: cmpl %esi, %edi 427; SDAG-NEXT: setb %al 428; SDAG-NEXT: retq 429; 430; FAST-LABEL: icmp_ult: 431; FAST: ## %bb.0: 432; FAST-NEXT: cmpl %esi, %edi 433; FAST-NEXT: setb %al 434; FAST-NEXT: andb $1, %al 435; FAST-NEXT: retq 436 %1 = icmp ult i32 %x, %y 437 ret i1 %1 438} 439 440define zeroext i1 @icmp_ule(i32 %x, i32 %y) { 441; SDAG-LABEL: icmp_ule: 442; SDAG: ## %bb.0: 443; SDAG-NEXT: cmpl %esi, %edi 444; SDAG-NEXT: setbe %al 445; SDAG-NEXT: retq 446; 447; FAST-LABEL: icmp_ule: 448; FAST: ## %bb.0: 449; FAST-NEXT: cmpl %esi, %edi 450; FAST-NEXT: setbe %al 451; FAST-NEXT: andb $1, %al 452; FAST-NEXT: retq 453 %1 = icmp ule i32 %x, %y 454 ret i1 %1 455} 456 457define zeroext i1 @icmp_sgt(i32 %x, i32 %y) { 458; SDAG-LABEL: icmp_sgt: 459; SDAG: ## %bb.0: 460; SDAG-NEXT: cmpl %esi, %edi 461; SDAG-NEXT: setg %al 462; SDAG-NEXT: retq 463; 464; FAST-LABEL: icmp_sgt: 465; FAST: ## %bb.0: 466; FAST-NEXT: cmpl %esi, %edi 467; FAST-NEXT: setg %al 468; FAST-NEXT: andb $1, %al 469; FAST-NEXT: retq 470 %1 = icmp sgt i32 %x, %y 471 ret i1 %1 472} 473 474define zeroext i1 @icmp_sge(i32 %x, i32 %y) { 475; SDAG-LABEL: icmp_sge: 476; SDAG: ## %bb.0: 477; SDAG-NEXT: cmpl %esi, %edi 478; SDAG-NEXT: setge %al 479; SDAG-NEXT: retq 480; 481; FAST-LABEL: icmp_sge: 482; FAST: ## %bb.0: 483; FAST-NEXT: cmpl %esi, %edi 484; FAST-NEXT: setge %al 485; FAST-NEXT: andb $1, %al 486; FAST-NEXT: retq 487 %1 = icmp sge i32 %x, %y 488 ret i1 %1 489} 490 491define zeroext i1 @icmp_slt(i32 %x, i32 %y) { 492; SDAG-LABEL: icmp_slt: 493; SDAG: ## %bb.0: 494; SDAG-NEXT: cmpl %esi, %edi 495; SDAG-NEXT: setl %al 496; SDAG-NEXT: retq 497; 498; FAST-LABEL: icmp_slt: 499; FAST: ## %bb.0: 500; FAST-NEXT: cmpl %esi, %edi 501; FAST-NEXT: setl %al 502; FAST-NEXT: andb $1, %al 503; FAST-NEXT: retq 504 %1 = icmp slt i32 %x, %y 505 ret i1 %1 506} 507 508define zeroext i1 @icmp_sle(i32 %x, i32 %y) { 509; SDAG-LABEL: icmp_sle: 510; SDAG: ## %bb.0: 511; SDAG-NEXT: cmpl %esi, %edi 512; SDAG-NEXT: setle %al 513; SDAG-NEXT: retq 514; 515; FAST-LABEL: icmp_sle: 516; FAST: ## %bb.0: 517; FAST-NEXT: cmpl %esi, %edi 518; FAST-NEXT: setle %al 519; FAST-NEXT: andb $1, %al 520; FAST-NEXT: retq 521 %1 = icmp sle i32 %x, %y 522 ret i1 %1 523} 524 525; Test cmp folding and condition optimization. 526define zeroext i1 @fcmp_oeq2(float %x) { 527; SDAG-LABEL: fcmp_oeq2: 528; SDAG: ## %bb.0: 529; SDAG-NEXT: ucomiss %xmm0, %xmm0 530; SDAG-NEXT: setnp %al 531; SDAG-NEXT: retq 532; 533; FAST_NOAVX-LABEL: fcmp_oeq2: 534; FAST_NOAVX: ## %bb.0: 535; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0 536; FAST_NOAVX-NEXT: setnp %al 537; FAST_NOAVX-NEXT: andb $1, %al 538; FAST_NOAVX-NEXT: retq 539; 540; FAST_AVX-LABEL: fcmp_oeq2: 541; FAST_AVX: ## %bb.0: 542; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0 543; FAST_AVX-NEXT: setnp %al 544; FAST_AVX-NEXT: andb $1, %al 545; FAST_AVX-NEXT: retq 546 %1 = fcmp oeq float %x, %x 547 ret i1 %1 548} 549 550define zeroext i1 @fcmp_oeq3(float %x) { 551; SDAG-LABEL: fcmp_oeq3: 552; SDAG: ## %bb.0: 553; SDAG-NEXT: xorps %xmm1, %xmm1 554; SDAG-NEXT: cmpeqss %xmm0, %xmm1 555; SDAG-NEXT: movd %xmm1, %eax 556; SDAG-NEXT: andl $1, %eax 557; SDAG-NEXT: ## kill: def $al killed $al killed $eax 558; SDAG-NEXT: retq 559; 560; FAST_NOAVX-LABEL: fcmp_oeq3: 561; FAST_NOAVX: ## %bb.0: 562; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1 563; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 564; FAST_NOAVX-NEXT: sete %cl 565; FAST_NOAVX-NEXT: setnp %al 566; FAST_NOAVX-NEXT: andb %cl, %al 567; FAST_NOAVX-NEXT: andb $1, %al 568; FAST_NOAVX-NEXT: retq 569; 570; FAST_AVX-LABEL: fcmp_oeq3: 571; FAST_AVX: ## %bb.0: 572; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 573; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 574; FAST_AVX-NEXT: sete %cl 575; FAST_AVX-NEXT: setnp %al 576; FAST_AVX-NEXT: andb %cl, %al 577; FAST_AVX-NEXT: andb $1, %al 578; FAST_AVX-NEXT: retq 579 %1 = fcmp oeq float %x, 0.000000e+00 580 ret i1 %1 581} 582 583define zeroext i1 @fcmp_ogt2(float %x) { 584; SDAG-LABEL: fcmp_ogt2: 585; SDAG: ## %bb.0: 586; SDAG-NEXT: xorl %eax, %eax 587; SDAG-NEXT: retq 588; 589; FAST-LABEL: fcmp_ogt2: 590; FAST: ## %bb.0: 591; FAST-NEXT: xorl %eax, %eax 592; FAST-NEXT: andb $1, %al 593; FAST-NEXT: ## kill: def $al killed $al killed $eax 594; FAST-NEXT: retq 595 %1 = fcmp ogt float %x, %x 596 ret i1 %1 597} 598 599define zeroext i1 @fcmp_ogt3(float %x) { 600; SDAG-LABEL: fcmp_ogt3: 601; SDAG: ## %bb.0: 602; SDAG-NEXT: xorps %xmm1, %xmm1 603; SDAG-NEXT: ucomiss %xmm1, %xmm0 604; SDAG-NEXT: seta %al 605; SDAG-NEXT: retq 606; 607; FAST_NOAVX-LABEL: fcmp_ogt3: 608; FAST_NOAVX: ## %bb.0: 609; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1 610; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 611; FAST_NOAVX-NEXT: seta %al 612; FAST_NOAVX-NEXT: andb $1, %al 613; FAST_NOAVX-NEXT: retq 614; 615; FAST_AVX-LABEL: fcmp_ogt3: 616; FAST_AVX: ## %bb.0: 617; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 618; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 619; FAST_AVX-NEXT: seta %al 620; FAST_AVX-NEXT: andb $1, %al 621; FAST_AVX-NEXT: retq 622 %1 = fcmp ogt float %x, 0.000000e+00 623 ret i1 %1 624} 625 626define zeroext i1 @fcmp_oge2(float %x) { 627; SDAG-LABEL: fcmp_oge2: 628; SDAG: ## %bb.0: 629; SDAG-NEXT: ucomiss %xmm0, %xmm0 630; SDAG-NEXT: setnp %al 631; SDAG-NEXT: retq 632; 633; FAST_NOAVX-LABEL: fcmp_oge2: 634; FAST_NOAVX: ## %bb.0: 635; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0 636; FAST_NOAVX-NEXT: setnp %al 637; FAST_NOAVX-NEXT: andb $1, %al 638; FAST_NOAVX-NEXT: retq 639; 640; FAST_AVX-LABEL: fcmp_oge2: 641; FAST_AVX: ## %bb.0: 642; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0 643; FAST_AVX-NEXT: setnp %al 644; FAST_AVX-NEXT: andb $1, %al 645; FAST_AVX-NEXT: retq 646 %1 = fcmp oge float %x, %x 647 ret i1 %1 648} 649 650define zeroext i1 @fcmp_oge3(float %x) { 651; SDAG-LABEL: fcmp_oge3: 652; SDAG: ## %bb.0: 653; SDAG-NEXT: xorps %xmm1, %xmm1 654; SDAG-NEXT: ucomiss %xmm1, %xmm0 655; SDAG-NEXT: setae %al 656; SDAG-NEXT: retq 657; 658; FAST_NOAVX-LABEL: fcmp_oge3: 659; FAST_NOAVX: ## %bb.0: 660; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1 661; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 662; FAST_NOAVX-NEXT: setae %al 663; FAST_NOAVX-NEXT: andb $1, %al 664; FAST_NOAVX-NEXT: retq 665; 666; FAST_AVX-LABEL: fcmp_oge3: 667; FAST_AVX: ## %bb.0: 668; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 669; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 670; FAST_AVX-NEXT: setae %al 671; FAST_AVX-NEXT: andb $1, %al 672; FAST_AVX-NEXT: retq 673 %1 = fcmp oge float %x, 0.000000e+00 674 ret i1 %1 675} 676 677define zeroext i1 @fcmp_olt2(float %x) { 678; SDAG-LABEL: fcmp_olt2: 679; SDAG: ## %bb.0: 680; SDAG-NEXT: xorl %eax, %eax 681; SDAG-NEXT: retq 682; 683; FAST-LABEL: fcmp_olt2: 684; FAST: ## %bb.0: 685; FAST-NEXT: xorl %eax, %eax 686; FAST-NEXT: andb $1, %al 687; FAST-NEXT: ## kill: def $al killed $al killed $eax 688; FAST-NEXT: retq 689 %1 = fcmp olt float %x, %x 690 ret i1 %1 691} 692 693define zeroext i1 @fcmp_olt3(float %x) { 694; SDAG-LABEL: fcmp_olt3: 695; SDAG: ## %bb.0: 696; SDAG-NEXT: xorps %xmm1, %xmm1 697; SDAG-NEXT: ucomiss %xmm0, %xmm1 698; SDAG-NEXT: seta %al 699; SDAG-NEXT: retq 700; 701; FAST_NOAVX-LABEL: fcmp_olt3: 702; FAST_NOAVX: ## %bb.0: 703; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1 704; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm1 705; FAST_NOAVX-NEXT: seta %al 706; FAST_NOAVX-NEXT: andb $1, %al 707; FAST_NOAVX-NEXT: retq 708; 709; FAST_AVX-LABEL: fcmp_olt3: 710; FAST_AVX: ## %bb.0: 711; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 712; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1 713; FAST_AVX-NEXT: seta %al 714; FAST_AVX-NEXT: andb $1, %al 715; FAST_AVX-NEXT: retq 716 %1 = fcmp olt float %x, 0.000000e+00 717 ret i1 %1 718} 719 720define zeroext i1 @fcmp_ole2(float %x) { 721; SDAG-LABEL: fcmp_ole2: 722; SDAG: ## %bb.0: 723; SDAG-NEXT: ucomiss %xmm0, %xmm0 724; SDAG-NEXT: setnp %al 725; SDAG-NEXT: retq 726; 727; FAST_NOAVX-LABEL: fcmp_ole2: 728; FAST_NOAVX: ## %bb.0: 729; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0 730; FAST_NOAVX-NEXT: setnp %al 731; FAST_NOAVX-NEXT: andb $1, %al 732; FAST_NOAVX-NEXT: retq 733; 734; FAST_AVX-LABEL: fcmp_ole2: 735; FAST_AVX: ## %bb.0: 736; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0 737; FAST_AVX-NEXT: setnp %al 738; FAST_AVX-NEXT: andb $1, %al 739; FAST_AVX-NEXT: retq 740 %1 = fcmp ole float %x, %x 741 ret i1 %1 742} 743 744define zeroext i1 @fcmp_ole3(float %x) { 745; SDAG-LABEL: fcmp_ole3: 746; SDAG: ## %bb.0: 747; SDAG-NEXT: xorps %xmm1, %xmm1 748; SDAG-NEXT: ucomiss %xmm0, %xmm1 749; SDAG-NEXT: setae %al 750; SDAG-NEXT: retq 751; 752; FAST_NOAVX-LABEL: fcmp_ole3: 753; FAST_NOAVX: ## %bb.0: 754; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1 755; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm1 756; FAST_NOAVX-NEXT: setae %al 757; FAST_NOAVX-NEXT: andb $1, %al 758; FAST_NOAVX-NEXT: retq 759; 760; FAST_AVX-LABEL: fcmp_ole3: 761; FAST_AVX: ## %bb.0: 762; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 763; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1 764; FAST_AVX-NEXT: setae %al 765; FAST_AVX-NEXT: andb $1, %al 766; FAST_AVX-NEXT: retq 767 %1 = fcmp ole float %x, 0.000000e+00 768 ret i1 %1 769} 770 771define zeroext i1 @fcmp_one2(float %x) { 772; SDAG-LABEL: fcmp_one2: 773; SDAG: ## %bb.0: 774; SDAG-NEXT: xorl %eax, %eax 775; SDAG-NEXT: retq 776; 777; FAST-LABEL: fcmp_one2: 778; FAST: ## %bb.0: 779; FAST-NEXT: xorl %eax, %eax 780; FAST-NEXT: andb $1, %al 781; FAST-NEXT: ## kill: def $al killed $al killed $eax 782; FAST-NEXT: retq 783 %1 = fcmp one float %x, %x 784 ret i1 %1 785} 786 787define zeroext i1 @fcmp_one3(float %x) { 788; SDAG-LABEL: fcmp_one3: 789; SDAG: ## %bb.0: 790; SDAG-NEXT: xorps %xmm1, %xmm1 791; SDAG-NEXT: ucomiss %xmm1, %xmm0 792; SDAG-NEXT: setne %al 793; SDAG-NEXT: retq 794; 795; FAST_NOAVX-LABEL: fcmp_one3: 796; FAST_NOAVX: ## %bb.0: 797; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1 798; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 799; FAST_NOAVX-NEXT: setne %al 800; FAST_NOAVX-NEXT: andb $1, %al 801; FAST_NOAVX-NEXT: retq 802; 803; FAST_AVX-LABEL: fcmp_one3: 804; FAST_AVX: ## %bb.0: 805; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 806; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 807; FAST_AVX-NEXT: setne %al 808; FAST_AVX-NEXT: andb $1, %al 809; FAST_AVX-NEXT: retq 810 %1 = fcmp one float %x, 0.000000e+00 811 ret i1 %1 812} 813 814define zeroext i1 @fcmp_ord2(float %x) { 815; SDAG-LABEL: fcmp_ord2: 816; SDAG: ## %bb.0: 817; SDAG-NEXT: ucomiss %xmm0, %xmm0 818; SDAG-NEXT: setnp %al 819; SDAG-NEXT: retq 820; 821; FAST_NOAVX-LABEL: fcmp_ord2: 822; FAST_NOAVX: ## %bb.0: 823; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0 824; FAST_NOAVX-NEXT: setnp %al 825; FAST_NOAVX-NEXT: andb $1, %al 826; FAST_NOAVX-NEXT: retq 827; 828; FAST_AVX-LABEL: fcmp_ord2: 829; FAST_AVX: ## %bb.0: 830; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0 831; FAST_AVX-NEXT: setnp %al 832; FAST_AVX-NEXT: andb $1, %al 833; FAST_AVX-NEXT: retq 834 %1 = fcmp ord float %x, %x 835 ret i1 %1 836} 837 838define zeroext i1 @fcmp_ord3(float %x) { 839; SDAG-LABEL: fcmp_ord3: 840; SDAG: ## %bb.0: 841; SDAG-NEXT: ucomiss %xmm0, %xmm0 842; SDAG-NEXT: setnp %al 843; SDAG-NEXT: retq 844; 845; FAST_NOAVX-LABEL: fcmp_ord3: 846; FAST_NOAVX: ## %bb.0: 847; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0 848; FAST_NOAVX-NEXT: setnp %al 849; FAST_NOAVX-NEXT: andb $1, %al 850; FAST_NOAVX-NEXT: retq 851; 852; FAST_AVX-LABEL: fcmp_ord3: 853; FAST_AVX: ## %bb.0: 854; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0 855; FAST_AVX-NEXT: setnp %al 856; FAST_AVX-NEXT: andb $1, %al 857; FAST_AVX-NEXT: retq 858 %1 = fcmp ord float %x, 0.000000e+00 859 ret i1 %1 860} 861 862define zeroext i1 @fcmp_uno2(float %x) { 863; SDAG-LABEL: fcmp_uno2: 864; SDAG: ## %bb.0: 865; SDAG-NEXT: ucomiss %xmm0, %xmm0 866; SDAG-NEXT: setp %al 867; SDAG-NEXT: retq 868; 869; FAST_NOAVX-LABEL: fcmp_uno2: 870; FAST_NOAVX: ## %bb.0: 871; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0 872; FAST_NOAVX-NEXT: setp %al 873; FAST_NOAVX-NEXT: andb $1, %al 874; FAST_NOAVX-NEXT: retq 875; 876; FAST_AVX-LABEL: fcmp_uno2: 877; FAST_AVX: ## %bb.0: 878; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0 879; FAST_AVX-NEXT: setp %al 880; FAST_AVX-NEXT: andb $1, %al 881; FAST_AVX-NEXT: retq 882 %1 = fcmp uno float %x, %x 883 ret i1 %1 884} 885 886define zeroext i1 @fcmp_uno3(float %x) { 887; SDAG-LABEL: fcmp_uno3: 888; SDAG: ## %bb.0: 889; SDAG-NEXT: ucomiss %xmm0, %xmm0 890; SDAG-NEXT: setp %al 891; SDAG-NEXT: retq 892; 893; FAST_NOAVX-LABEL: fcmp_uno3: 894; FAST_NOAVX: ## %bb.0: 895; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0 896; FAST_NOAVX-NEXT: setp %al 897; FAST_NOAVX-NEXT: andb $1, %al 898; FAST_NOAVX-NEXT: retq 899; 900; FAST_AVX-LABEL: fcmp_uno3: 901; FAST_AVX: ## %bb.0: 902; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0 903; FAST_AVX-NEXT: setp %al 904; FAST_AVX-NEXT: andb $1, %al 905; FAST_AVX-NEXT: retq 906 %1 = fcmp uno float %x, 0.000000e+00 907 ret i1 %1 908} 909 910define zeroext i1 @fcmp_ueq2(float %x) { 911; SDAG-LABEL: fcmp_ueq2: 912; SDAG: ## %bb.0: 913; SDAG-NEXT: movb $1, %al 914; SDAG-NEXT: retq 915; 916; FAST-LABEL: fcmp_ueq2: 917; FAST: ## %bb.0: 918; FAST-NEXT: movb $1, %al 919; FAST-NEXT: andb $1, %al 920; FAST-NEXT: retq 921 %1 = fcmp ueq float %x, %x 922 ret i1 %1 923} 924 925define zeroext i1 @fcmp_ueq3(float %x) { 926; SDAG-LABEL: fcmp_ueq3: 927; SDAG: ## %bb.0: 928; SDAG-NEXT: xorps %xmm1, %xmm1 929; SDAG-NEXT: ucomiss %xmm1, %xmm0 930; SDAG-NEXT: sete %al 931; SDAG-NEXT: retq 932; 933; FAST_NOAVX-LABEL: fcmp_ueq3: 934; FAST_NOAVX: ## %bb.0: 935; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1 936; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 937; FAST_NOAVX-NEXT: sete %al 938; FAST_NOAVX-NEXT: andb $1, %al 939; FAST_NOAVX-NEXT: retq 940; 941; FAST_AVX-LABEL: fcmp_ueq3: 942; FAST_AVX: ## %bb.0: 943; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 944; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 945; FAST_AVX-NEXT: sete %al 946; FAST_AVX-NEXT: andb $1, %al 947; FAST_AVX-NEXT: retq 948 %1 = fcmp ueq float %x, 0.000000e+00 949 ret i1 %1 950} 951 952define zeroext i1 @fcmp_ugt2(float %x) { 953; SDAG-LABEL: fcmp_ugt2: 954; SDAG: ## %bb.0: 955; SDAG-NEXT: ucomiss %xmm0, %xmm0 956; SDAG-NEXT: setp %al 957; SDAG-NEXT: retq 958; 959; FAST_NOAVX-LABEL: fcmp_ugt2: 960; FAST_NOAVX: ## %bb.0: 961; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0 962; FAST_NOAVX-NEXT: setp %al 963; FAST_NOAVX-NEXT: andb $1, %al 964; FAST_NOAVX-NEXT: retq 965; 966; FAST_AVX-LABEL: fcmp_ugt2: 967; FAST_AVX: ## %bb.0: 968; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0 969; FAST_AVX-NEXT: setp %al 970; FAST_AVX-NEXT: andb $1, %al 971; FAST_AVX-NEXT: retq 972 %1 = fcmp ugt float %x, %x 973 ret i1 %1 974} 975 976define zeroext i1 @fcmp_ugt3(float %x) { 977; SDAG-LABEL: fcmp_ugt3: 978; SDAG: ## %bb.0: 979; SDAG-NEXT: xorps %xmm1, %xmm1 980; SDAG-NEXT: ucomiss %xmm0, %xmm1 981; SDAG-NEXT: setb %al 982; SDAG-NEXT: retq 983; 984; FAST_NOAVX-LABEL: fcmp_ugt3: 985; FAST_NOAVX: ## %bb.0: 986; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1 987; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm1 988; FAST_NOAVX-NEXT: setb %al 989; FAST_NOAVX-NEXT: andb $1, %al 990; FAST_NOAVX-NEXT: retq 991; 992; FAST_AVX-LABEL: fcmp_ugt3: 993; FAST_AVX: ## %bb.0: 994; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 995; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1 996; FAST_AVX-NEXT: setb %al 997; FAST_AVX-NEXT: andb $1, %al 998; FAST_AVX-NEXT: retq 999 %1 = fcmp ugt float %x, 0.000000e+00 1000 ret i1 %1 1001} 1002 1003define zeroext i1 @fcmp_uge2(float %x) { 1004; SDAG-LABEL: fcmp_uge2: 1005; SDAG: ## %bb.0: 1006; SDAG-NEXT: movb $1, %al 1007; SDAG-NEXT: retq 1008; 1009; FAST-LABEL: fcmp_uge2: 1010; FAST: ## %bb.0: 1011; FAST-NEXT: movb $1, %al 1012; FAST-NEXT: andb $1, %al 1013; FAST-NEXT: retq 1014 %1 = fcmp uge float %x, %x 1015 ret i1 %1 1016} 1017 1018define zeroext i1 @fcmp_uge3(float %x) { 1019; SDAG-LABEL: fcmp_uge3: 1020; SDAG: ## %bb.0: 1021; SDAG-NEXT: xorps %xmm1, %xmm1 1022; SDAG-NEXT: ucomiss %xmm0, %xmm1 1023; SDAG-NEXT: setbe %al 1024; SDAG-NEXT: retq 1025; 1026; FAST_NOAVX-LABEL: fcmp_uge3: 1027; FAST_NOAVX: ## %bb.0: 1028; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1 1029; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm1 1030; FAST_NOAVX-NEXT: setbe %al 1031; FAST_NOAVX-NEXT: andb $1, %al 1032; FAST_NOAVX-NEXT: retq 1033; 1034; FAST_AVX-LABEL: fcmp_uge3: 1035; FAST_AVX: ## %bb.0: 1036; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 1037; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1 1038; FAST_AVX-NEXT: setbe %al 1039; FAST_AVX-NEXT: andb $1, %al 1040; FAST_AVX-NEXT: retq 1041 %1 = fcmp uge float %x, 0.000000e+00 1042 ret i1 %1 1043} 1044 1045define zeroext i1 @fcmp_ult2(float %x) { 1046; SDAG-LABEL: fcmp_ult2: 1047; SDAG: ## %bb.0: 1048; SDAG-NEXT: ucomiss %xmm0, %xmm0 1049; SDAG-NEXT: setp %al 1050; SDAG-NEXT: retq 1051; 1052; FAST_NOAVX-LABEL: fcmp_ult2: 1053; FAST_NOAVX: ## %bb.0: 1054; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0 1055; FAST_NOAVX-NEXT: setp %al 1056; FAST_NOAVX-NEXT: andb $1, %al 1057; FAST_NOAVX-NEXT: retq 1058; 1059; FAST_AVX-LABEL: fcmp_ult2: 1060; FAST_AVX: ## %bb.0: 1061; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0 1062; FAST_AVX-NEXT: setp %al 1063; FAST_AVX-NEXT: andb $1, %al 1064; FAST_AVX-NEXT: retq 1065 %1 = fcmp ult float %x, %x 1066 ret i1 %1 1067} 1068 1069define zeroext i1 @fcmp_ult3(float %x) { 1070; SDAG-LABEL: fcmp_ult3: 1071; SDAG: ## %bb.0: 1072; SDAG-NEXT: xorps %xmm1, %xmm1 1073; SDAG-NEXT: ucomiss %xmm1, %xmm0 1074; SDAG-NEXT: setb %al 1075; SDAG-NEXT: retq 1076; 1077; FAST_NOAVX-LABEL: fcmp_ult3: 1078; FAST_NOAVX: ## %bb.0: 1079; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1 1080; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 1081; FAST_NOAVX-NEXT: setb %al 1082; FAST_NOAVX-NEXT: andb $1, %al 1083; FAST_NOAVX-NEXT: retq 1084; 1085; FAST_AVX-LABEL: fcmp_ult3: 1086; FAST_AVX: ## %bb.0: 1087; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 1088; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 1089; FAST_AVX-NEXT: setb %al 1090; FAST_AVX-NEXT: andb $1, %al 1091; FAST_AVX-NEXT: retq 1092 %1 = fcmp ult float %x, 0.000000e+00 1093 ret i1 %1 1094} 1095 1096define zeroext i1 @fcmp_ule2(float %x) { 1097; SDAG-LABEL: fcmp_ule2: 1098; SDAG: ## %bb.0: 1099; SDAG-NEXT: movb $1, %al 1100; SDAG-NEXT: retq 1101; 1102; FAST-LABEL: fcmp_ule2: 1103; FAST: ## %bb.0: 1104; FAST-NEXT: movb $1, %al 1105; FAST-NEXT: andb $1, %al 1106; FAST-NEXT: retq 1107 %1 = fcmp ule float %x, %x 1108 ret i1 %1 1109} 1110 1111define zeroext i1 @fcmp_ule3(float %x) { 1112; SDAG-LABEL: fcmp_ule3: 1113; SDAG: ## %bb.0: 1114; SDAG-NEXT: xorps %xmm1, %xmm1 1115; SDAG-NEXT: ucomiss %xmm1, %xmm0 1116; SDAG-NEXT: setbe %al 1117; SDAG-NEXT: retq 1118; 1119; FAST_NOAVX-LABEL: fcmp_ule3: 1120; FAST_NOAVX: ## %bb.0: 1121; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1 1122; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 1123; FAST_NOAVX-NEXT: setbe %al 1124; FAST_NOAVX-NEXT: andb $1, %al 1125; FAST_NOAVX-NEXT: retq 1126; 1127; FAST_AVX-LABEL: fcmp_ule3: 1128; FAST_AVX: ## %bb.0: 1129; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 1130; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 1131; FAST_AVX-NEXT: setbe %al 1132; FAST_AVX-NEXT: andb $1, %al 1133; FAST_AVX-NEXT: retq 1134 %1 = fcmp ule float %x, 0.000000e+00 1135 ret i1 %1 1136} 1137 1138define zeroext i1 @fcmp_une2(float %x) { 1139; SDAG-LABEL: fcmp_une2: 1140; SDAG: ## %bb.0: 1141; SDAG-NEXT: ucomiss %xmm0, %xmm0 1142; SDAG-NEXT: setp %al 1143; SDAG-NEXT: retq 1144; 1145; FAST_NOAVX-LABEL: fcmp_une2: 1146; FAST_NOAVX: ## %bb.0: 1147; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0 1148; FAST_NOAVX-NEXT: setp %al 1149; FAST_NOAVX-NEXT: andb $1, %al 1150; FAST_NOAVX-NEXT: retq 1151; 1152; FAST_AVX-LABEL: fcmp_une2: 1153; FAST_AVX: ## %bb.0: 1154; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0 1155; FAST_AVX-NEXT: setp %al 1156; FAST_AVX-NEXT: andb $1, %al 1157; FAST_AVX-NEXT: retq 1158 %1 = fcmp une float %x, %x 1159 ret i1 %1 1160} 1161 1162define zeroext i1 @fcmp_une3(float %x) { 1163; SDAG-LABEL: fcmp_une3: 1164; SDAG: ## %bb.0: 1165; SDAG-NEXT: xorps %xmm1, %xmm1 1166; SDAG-NEXT: cmpneqss %xmm0, %xmm1 1167; SDAG-NEXT: movd %xmm1, %eax 1168; SDAG-NEXT: andl $1, %eax 1169; SDAG-NEXT: ## kill: def $al killed $al killed $eax 1170; SDAG-NEXT: retq 1171; 1172; FAST_NOAVX-LABEL: fcmp_une3: 1173; FAST_NOAVX: ## %bb.0: 1174; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1 1175; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0 1176; FAST_NOAVX-NEXT: setne %cl 1177; FAST_NOAVX-NEXT: setp %al 1178; FAST_NOAVX-NEXT: orb %cl, %al 1179; FAST_NOAVX-NEXT: andb $1, %al 1180; FAST_NOAVX-NEXT: retq 1181; 1182; FAST_AVX-LABEL: fcmp_une3: 1183; FAST_AVX: ## %bb.0: 1184; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 1185; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0 1186; FAST_AVX-NEXT: setne %cl 1187; FAST_AVX-NEXT: setp %al 1188; FAST_AVX-NEXT: orb %cl, %al 1189; FAST_AVX-NEXT: andb $1, %al 1190; FAST_AVX-NEXT: retq 1191 %1 = fcmp une float %x, 0.000000e+00 1192 ret i1 %1 1193} 1194