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