1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc --mtriple=loongarch32 --mattr=+d < %s | FileCheck %s --check-prefix=LA32 3; RUN: llc --mtriple=loongarch64 --mattr=+d < %s | FileCheck %s --check-prefix=LA64 4 5;; Test integers selection after `fcmp` 6 7define i32 @f32_fcmp_false(float %a, float %b, i32 %x, i32 %y) { 8; LA32-LABEL: f32_fcmp_false: 9; LA32: # %bb.0: 10; LA32-NEXT: move $a0, $a1 11; LA32-NEXT: ret 12; 13; LA64-LABEL: f32_fcmp_false: 14; LA64: # %bb.0: 15; LA64-NEXT: move $a0, $a1 16; LA64-NEXT: ret 17 %cmp = fcmp false float %a, %b 18 %res = select i1 %cmp, i32 %x, i32 %y 19 ret i32 %res 20} 21 22define i32 @f32_fcmp_oeq(float %a, float %b, i32 %x, i32 %y) { 23; LA32-LABEL: f32_fcmp_oeq: 24; LA32: # %bb.0: 25; LA32-NEXT: fcmp.ceq.s $fcc0, $fa0, $fa1 26; LA32-NEXT: movcf2gr $a2, $fcc0 27; LA32-NEXT: masknez $a1, $a1, $a2 28; LA32-NEXT: maskeqz $a0, $a0, $a2 29; LA32-NEXT: or $a0, $a0, $a1 30; LA32-NEXT: ret 31; 32; LA64-LABEL: f32_fcmp_oeq: 33; LA64: # %bb.0: 34; LA64-NEXT: fcmp.ceq.s $fcc0, $fa0, $fa1 35; LA64-NEXT: movcf2gr $a2, $fcc0 36; LA64-NEXT: masknez $a1, $a1, $a2 37; LA64-NEXT: maskeqz $a0, $a0, $a2 38; LA64-NEXT: or $a0, $a0, $a1 39; LA64-NEXT: ret 40 %cmp = fcmp oeq float %a, %b 41 %res = select i1 %cmp, i32 %x, i32 %y 42 ret i32 %res 43} 44 45define i32 @f32_fcmp_ogt(float %a, float %b, i32 %x, i32 %y) { 46; LA32-LABEL: f32_fcmp_ogt: 47; LA32: # %bb.0: 48; LA32-NEXT: fcmp.clt.s $fcc0, $fa1, $fa0 49; LA32-NEXT: movcf2gr $a2, $fcc0 50; LA32-NEXT: masknez $a1, $a1, $a2 51; LA32-NEXT: maskeqz $a0, $a0, $a2 52; LA32-NEXT: or $a0, $a0, $a1 53; LA32-NEXT: ret 54; 55; LA64-LABEL: f32_fcmp_ogt: 56; LA64: # %bb.0: 57; LA64-NEXT: fcmp.clt.s $fcc0, $fa1, $fa0 58; LA64-NEXT: movcf2gr $a2, $fcc0 59; LA64-NEXT: masknez $a1, $a1, $a2 60; LA64-NEXT: maskeqz $a0, $a0, $a2 61; LA64-NEXT: or $a0, $a0, $a1 62; LA64-NEXT: ret 63 %cmp = fcmp ogt float %a, %b 64 %res = select i1 %cmp, i32 %x, i32 %y 65 ret i32 %res 66} 67 68define i32 @f32_fcmp_oge(float %a, float %b, i32 %x, i32 %y) { 69; LA32-LABEL: f32_fcmp_oge: 70; LA32: # %bb.0: 71; LA32-NEXT: fcmp.cle.s $fcc0, $fa1, $fa0 72; LA32-NEXT: movcf2gr $a2, $fcc0 73; LA32-NEXT: masknez $a1, $a1, $a2 74; LA32-NEXT: maskeqz $a0, $a0, $a2 75; LA32-NEXT: or $a0, $a0, $a1 76; LA32-NEXT: ret 77; 78; LA64-LABEL: f32_fcmp_oge: 79; LA64: # %bb.0: 80; LA64-NEXT: fcmp.cle.s $fcc0, $fa1, $fa0 81; LA64-NEXT: movcf2gr $a2, $fcc0 82; LA64-NEXT: masknez $a1, $a1, $a2 83; LA64-NEXT: maskeqz $a0, $a0, $a2 84; LA64-NEXT: or $a0, $a0, $a1 85; LA64-NEXT: ret 86 %cmp = fcmp oge float %a, %b 87 %res = select i1 %cmp, i32 %x, i32 %y 88 ret i32 %res 89} 90 91define i32 @f32_fcmp_olt(float %a, float %b, i32 %x, i32 %y) { 92; LA32-LABEL: f32_fcmp_olt: 93; LA32: # %bb.0: 94; LA32-NEXT: fcmp.clt.s $fcc0, $fa0, $fa1 95; LA32-NEXT: movcf2gr $a2, $fcc0 96; LA32-NEXT: masknez $a1, $a1, $a2 97; LA32-NEXT: maskeqz $a0, $a0, $a2 98; LA32-NEXT: or $a0, $a0, $a1 99; LA32-NEXT: ret 100; 101; LA64-LABEL: f32_fcmp_olt: 102; LA64: # %bb.0: 103; LA64-NEXT: fcmp.clt.s $fcc0, $fa0, $fa1 104; LA64-NEXT: movcf2gr $a2, $fcc0 105; LA64-NEXT: masknez $a1, $a1, $a2 106; LA64-NEXT: maskeqz $a0, $a0, $a2 107; LA64-NEXT: or $a0, $a0, $a1 108; LA64-NEXT: ret 109 %cmp = fcmp olt float %a, %b 110 %res = select i1 %cmp, i32 %x, i32 %y 111 ret i32 %res 112} 113 114define i32 @f32_fcmp_ole(float %a, float %b, i32 %x, i32 %y) { 115; LA32-LABEL: f32_fcmp_ole: 116; LA32: # %bb.0: 117; LA32-NEXT: fcmp.cle.s $fcc0, $fa0, $fa1 118; LA32-NEXT: movcf2gr $a2, $fcc0 119; LA32-NEXT: masknez $a1, $a1, $a2 120; LA32-NEXT: maskeqz $a0, $a0, $a2 121; LA32-NEXT: or $a0, $a0, $a1 122; LA32-NEXT: ret 123; 124; LA64-LABEL: f32_fcmp_ole: 125; LA64: # %bb.0: 126; LA64-NEXT: fcmp.cle.s $fcc0, $fa0, $fa1 127; LA64-NEXT: movcf2gr $a2, $fcc0 128; LA64-NEXT: masknez $a1, $a1, $a2 129; LA64-NEXT: maskeqz $a0, $a0, $a2 130; LA64-NEXT: or $a0, $a0, $a1 131; LA64-NEXT: ret 132 %cmp = fcmp ole float %a, %b 133 %res = select i1 %cmp, i32 %x, i32 %y 134 ret i32 %res 135} 136 137define i32 @f32_fcmp_one(float %a, float %b, i32 %x, i32 %y) { 138; LA32-LABEL: f32_fcmp_one: 139; LA32: # %bb.0: 140; LA32-NEXT: fcmp.cne.s $fcc0, $fa0, $fa1 141; LA32-NEXT: movcf2gr $a2, $fcc0 142; LA32-NEXT: masknez $a1, $a1, $a2 143; LA32-NEXT: maskeqz $a0, $a0, $a2 144; LA32-NEXT: or $a0, $a0, $a1 145; LA32-NEXT: ret 146; 147; LA64-LABEL: f32_fcmp_one: 148; LA64: # %bb.0: 149; LA64-NEXT: fcmp.cne.s $fcc0, $fa0, $fa1 150; LA64-NEXT: movcf2gr $a2, $fcc0 151; LA64-NEXT: masknez $a1, $a1, $a2 152; LA64-NEXT: maskeqz $a0, $a0, $a2 153; LA64-NEXT: or $a0, $a0, $a1 154; LA64-NEXT: ret 155 %cmp = fcmp one float %a, %b 156 %res = select i1 %cmp, i32 %x, i32 %y 157 ret i32 %res 158} 159 160define i32 @f32_fcmp_ord(float %a, float %b, i32 %x, i32 %y) { 161; LA32-LABEL: f32_fcmp_ord: 162; LA32: # %bb.0: 163; LA32-NEXT: fcmp.cor.s $fcc0, $fa0, $fa1 164; LA32-NEXT: movcf2gr $a2, $fcc0 165; LA32-NEXT: masknez $a1, $a1, $a2 166; LA32-NEXT: maskeqz $a0, $a0, $a2 167; LA32-NEXT: or $a0, $a0, $a1 168; LA32-NEXT: ret 169; 170; LA64-LABEL: f32_fcmp_ord: 171; LA64: # %bb.0: 172; LA64-NEXT: fcmp.cor.s $fcc0, $fa0, $fa1 173; LA64-NEXT: movcf2gr $a2, $fcc0 174; LA64-NEXT: masknez $a1, $a1, $a2 175; LA64-NEXT: maskeqz $a0, $a0, $a2 176; LA64-NEXT: or $a0, $a0, $a1 177; LA64-NEXT: ret 178 %cmp = fcmp ord float %a, %b 179 %res = select i1 %cmp, i32 %x, i32 %y 180 ret i32 %res 181} 182 183define i32 @f32_fcmp_ueq(float %a, float %b, i32 %x, i32 %y) { 184; LA32-LABEL: f32_fcmp_ueq: 185; LA32: # %bb.0: 186; LA32-NEXT: fcmp.cueq.s $fcc0, $fa0, $fa1 187; LA32-NEXT: movcf2gr $a2, $fcc0 188; LA32-NEXT: masknez $a1, $a1, $a2 189; LA32-NEXT: maskeqz $a0, $a0, $a2 190; LA32-NEXT: or $a0, $a0, $a1 191; LA32-NEXT: ret 192; 193; LA64-LABEL: f32_fcmp_ueq: 194; LA64: # %bb.0: 195; LA64-NEXT: fcmp.cueq.s $fcc0, $fa0, $fa1 196; LA64-NEXT: movcf2gr $a2, $fcc0 197; LA64-NEXT: masknez $a1, $a1, $a2 198; LA64-NEXT: maskeqz $a0, $a0, $a2 199; LA64-NEXT: or $a0, $a0, $a1 200; LA64-NEXT: ret 201 %cmp = fcmp ueq float %a, %b 202 %res = select i1 %cmp, i32 %x, i32 %y 203 ret i32 %res 204} 205 206define i32 @f32_fcmp_ugt(float %a, float %b, i32 %x, i32 %y) { 207; LA32-LABEL: f32_fcmp_ugt: 208; LA32: # %bb.0: 209; LA32-NEXT: fcmp.cult.s $fcc0, $fa1, $fa0 210; LA32-NEXT: movcf2gr $a2, $fcc0 211; LA32-NEXT: masknez $a1, $a1, $a2 212; LA32-NEXT: maskeqz $a0, $a0, $a2 213; LA32-NEXT: or $a0, $a0, $a1 214; LA32-NEXT: ret 215; 216; LA64-LABEL: f32_fcmp_ugt: 217; LA64: # %bb.0: 218; LA64-NEXT: fcmp.cult.s $fcc0, $fa1, $fa0 219; LA64-NEXT: movcf2gr $a2, $fcc0 220; LA64-NEXT: masknez $a1, $a1, $a2 221; LA64-NEXT: maskeqz $a0, $a0, $a2 222; LA64-NEXT: or $a0, $a0, $a1 223; LA64-NEXT: ret 224 %cmp = fcmp ugt float %a, %b 225 %res = select i1 %cmp, i32 %x, i32 %y 226 ret i32 %res 227} 228 229define i32 @f32_fcmp_uge(float %a, float %b, i32 %x, i32 %y) { 230; LA32-LABEL: f32_fcmp_uge: 231; LA32: # %bb.0: 232; LA32-NEXT: fcmp.cule.s $fcc0, $fa1, $fa0 233; LA32-NEXT: movcf2gr $a2, $fcc0 234; LA32-NEXT: masknez $a1, $a1, $a2 235; LA32-NEXT: maskeqz $a0, $a0, $a2 236; LA32-NEXT: or $a0, $a0, $a1 237; LA32-NEXT: ret 238; 239; LA64-LABEL: f32_fcmp_uge: 240; LA64: # %bb.0: 241; LA64-NEXT: fcmp.cule.s $fcc0, $fa1, $fa0 242; LA64-NEXT: movcf2gr $a2, $fcc0 243; LA64-NEXT: masknez $a1, $a1, $a2 244; LA64-NEXT: maskeqz $a0, $a0, $a2 245; LA64-NEXT: or $a0, $a0, $a1 246; LA64-NEXT: ret 247 %cmp = fcmp uge float %a, %b 248 %res = select i1 %cmp, i32 %x, i32 %y 249 ret i32 %res 250} 251 252define i32 @f32_fcmp_ult(float %a, float %b, i32 %x, i32 %y) { 253; LA32-LABEL: f32_fcmp_ult: 254; LA32: # %bb.0: 255; LA32-NEXT: fcmp.cult.s $fcc0, $fa0, $fa1 256; LA32-NEXT: movcf2gr $a2, $fcc0 257; LA32-NEXT: masknez $a1, $a1, $a2 258; LA32-NEXT: maskeqz $a0, $a0, $a2 259; LA32-NEXT: or $a0, $a0, $a1 260; LA32-NEXT: ret 261; 262; LA64-LABEL: f32_fcmp_ult: 263; LA64: # %bb.0: 264; LA64-NEXT: fcmp.cult.s $fcc0, $fa0, $fa1 265; LA64-NEXT: movcf2gr $a2, $fcc0 266; LA64-NEXT: masknez $a1, $a1, $a2 267; LA64-NEXT: maskeqz $a0, $a0, $a2 268; LA64-NEXT: or $a0, $a0, $a1 269; LA64-NEXT: ret 270 %cmp = fcmp ult float %a, %b 271 %res = select i1 %cmp, i32 %x, i32 %y 272 ret i32 %res 273} 274 275define i32 @f32_fcmp_ule(float %a, float %b, i32 %x, i32 %y) { 276; LA32-LABEL: f32_fcmp_ule: 277; LA32: # %bb.0: 278; LA32-NEXT: fcmp.cule.s $fcc0, $fa0, $fa1 279; LA32-NEXT: movcf2gr $a2, $fcc0 280; LA32-NEXT: masknez $a1, $a1, $a2 281; LA32-NEXT: maskeqz $a0, $a0, $a2 282; LA32-NEXT: or $a0, $a0, $a1 283; LA32-NEXT: ret 284; 285; LA64-LABEL: f32_fcmp_ule: 286; LA64: # %bb.0: 287; LA64-NEXT: fcmp.cule.s $fcc0, $fa0, $fa1 288; LA64-NEXT: movcf2gr $a2, $fcc0 289; LA64-NEXT: masknez $a1, $a1, $a2 290; LA64-NEXT: maskeqz $a0, $a0, $a2 291; LA64-NEXT: or $a0, $a0, $a1 292; LA64-NEXT: ret 293 %cmp = fcmp ule float %a, %b 294 %res = select i1 %cmp, i32 %x, i32 %y 295 ret i32 %res 296} 297 298define i32 @f32_fcmp_une(float %a, float %b, i32 %x, i32 %y) { 299; LA32-LABEL: f32_fcmp_une: 300; LA32: # %bb.0: 301; LA32-NEXT: fcmp.cune.s $fcc0, $fa0, $fa1 302; LA32-NEXT: movcf2gr $a2, $fcc0 303; LA32-NEXT: masknez $a1, $a1, $a2 304; LA32-NEXT: maskeqz $a0, $a0, $a2 305; LA32-NEXT: or $a0, $a0, $a1 306; LA32-NEXT: ret 307; 308; LA64-LABEL: f32_fcmp_une: 309; LA64: # %bb.0: 310; LA64-NEXT: fcmp.cune.s $fcc0, $fa0, $fa1 311; LA64-NEXT: movcf2gr $a2, $fcc0 312; LA64-NEXT: masknez $a1, $a1, $a2 313; LA64-NEXT: maskeqz $a0, $a0, $a2 314; LA64-NEXT: or $a0, $a0, $a1 315; LA64-NEXT: ret 316 %cmp = fcmp une float %a, %b 317 %res = select i1 %cmp, i32 %x, i32 %y 318 ret i32 %res 319} 320 321define i32 @f32_fcmp_uno(float %a, float %b, i32 %x, i32 %y) { 322; LA32-LABEL: f32_fcmp_uno: 323; LA32: # %bb.0: 324; LA32-NEXT: fcmp.cun.s $fcc0, $fa0, $fa1 325; LA32-NEXT: movcf2gr $a2, $fcc0 326; LA32-NEXT: masknez $a1, $a1, $a2 327; LA32-NEXT: maskeqz $a0, $a0, $a2 328; LA32-NEXT: or $a0, $a0, $a1 329; LA32-NEXT: ret 330; 331; LA64-LABEL: f32_fcmp_uno: 332; LA64: # %bb.0: 333; LA64-NEXT: fcmp.cun.s $fcc0, $fa0, $fa1 334; LA64-NEXT: movcf2gr $a2, $fcc0 335; LA64-NEXT: masknez $a1, $a1, $a2 336; LA64-NEXT: maskeqz $a0, $a0, $a2 337; LA64-NEXT: or $a0, $a0, $a1 338; LA64-NEXT: ret 339 %cmp = fcmp uno float %a, %b 340 %res = select i1 %cmp, i32 %x, i32 %y 341 ret i32 %res 342} 343 344define i32 @f32_fcmp_true(float %a, float %b, i32 %x, i32 %y) { 345; LA32-LABEL: f32_fcmp_true: 346; LA32: # %bb.0: 347; LA32-NEXT: ret 348; 349; LA64-LABEL: f32_fcmp_true: 350; LA64: # %bb.0: 351; LA64-NEXT: ret 352 %cmp = fcmp true float %a, %b 353 %res = select i1 %cmp, i32 %x, i32 %y 354 ret i32 %res 355} 356 357define i32 @f64_fcmp_false(double %a, double %b, i32 %x, i32 %y) { 358; LA32-LABEL: f64_fcmp_false: 359; LA32: # %bb.0: 360; LA32-NEXT: move $a0, $a1 361; LA32-NEXT: ret 362; 363; LA64-LABEL: f64_fcmp_false: 364; LA64: # %bb.0: 365; LA64-NEXT: move $a0, $a1 366; LA64-NEXT: ret 367 %cmp = fcmp false double %a, %b 368 %res = select i1 %cmp, i32 %x, i32 %y 369 ret i32 %res 370} 371 372define i32 @f64_fcmp_oeq(double %a, double %b, i32 %x, i32 %y) { 373; LA32-LABEL: f64_fcmp_oeq: 374; LA32: # %bb.0: 375; LA32-NEXT: fcmp.ceq.d $fcc0, $fa0, $fa1 376; LA32-NEXT: movcf2gr $a2, $fcc0 377; LA32-NEXT: masknez $a1, $a1, $a2 378; LA32-NEXT: maskeqz $a0, $a0, $a2 379; LA32-NEXT: or $a0, $a0, $a1 380; LA32-NEXT: ret 381; 382; LA64-LABEL: f64_fcmp_oeq: 383; LA64: # %bb.0: 384; LA64-NEXT: fcmp.ceq.d $fcc0, $fa0, $fa1 385; LA64-NEXT: movcf2gr $a2, $fcc0 386; LA64-NEXT: masknez $a1, $a1, $a2 387; LA64-NEXT: maskeqz $a0, $a0, $a2 388; LA64-NEXT: or $a0, $a0, $a1 389; LA64-NEXT: ret 390 %cmp = fcmp oeq double %a, %b 391 %res = select i1 %cmp, i32 %x, i32 %y 392 ret i32 %res 393} 394 395define i32 @f64_fcmp_ogt(double %a, double %b, i32 %x, i32 %y) { 396; LA32-LABEL: f64_fcmp_ogt: 397; LA32: # %bb.0: 398; LA32-NEXT: fcmp.clt.d $fcc0, $fa1, $fa0 399; LA32-NEXT: movcf2gr $a2, $fcc0 400; LA32-NEXT: masknez $a1, $a1, $a2 401; LA32-NEXT: maskeqz $a0, $a0, $a2 402; LA32-NEXT: or $a0, $a0, $a1 403; LA32-NEXT: ret 404; 405; LA64-LABEL: f64_fcmp_ogt: 406; LA64: # %bb.0: 407; LA64-NEXT: fcmp.clt.d $fcc0, $fa1, $fa0 408; LA64-NEXT: movcf2gr $a2, $fcc0 409; LA64-NEXT: masknez $a1, $a1, $a2 410; LA64-NEXT: maskeqz $a0, $a0, $a2 411; LA64-NEXT: or $a0, $a0, $a1 412; LA64-NEXT: ret 413 %cmp = fcmp ogt double %a, %b 414 %res = select i1 %cmp, i32 %x, i32 %y 415 ret i32 %res 416} 417 418define i32 @f64_fcmp_oge(double %a, double %b, i32 %x, i32 %y) { 419; LA32-LABEL: f64_fcmp_oge: 420; LA32: # %bb.0: 421; LA32-NEXT: fcmp.cle.d $fcc0, $fa1, $fa0 422; LA32-NEXT: movcf2gr $a2, $fcc0 423; LA32-NEXT: masknez $a1, $a1, $a2 424; LA32-NEXT: maskeqz $a0, $a0, $a2 425; LA32-NEXT: or $a0, $a0, $a1 426; LA32-NEXT: ret 427; 428; LA64-LABEL: f64_fcmp_oge: 429; LA64: # %bb.0: 430; LA64-NEXT: fcmp.cle.d $fcc0, $fa1, $fa0 431; LA64-NEXT: movcf2gr $a2, $fcc0 432; LA64-NEXT: masknez $a1, $a1, $a2 433; LA64-NEXT: maskeqz $a0, $a0, $a2 434; LA64-NEXT: or $a0, $a0, $a1 435; LA64-NEXT: ret 436 %cmp = fcmp oge double %a, %b 437 %res = select i1 %cmp, i32 %x, i32 %y 438 ret i32 %res 439} 440 441define i32 @f64_fcmp_olt(double %a, double %b, i32 %x, i32 %y) { 442; LA32-LABEL: f64_fcmp_olt: 443; LA32: # %bb.0: 444; LA32-NEXT: fcmp.clt.d $fcc0, $fa0, $fa1 445; LA32-NEXT: movcf2gr $a2, $fcc0 446; LA32-NEXT: masknez $a1, $a1, $a2 447; LA32-NEXT: maskeqz $a0, $a0, $a2 448; LA32-NEXT: or $a0, $a0, $a1 449; LA32-NEXT: ret 450; 451; LA64-LABEL: f64_fcmp_olt: 452; LA64: # %bb.0: 453; LA64-NEXT: fcmp.clt.d $fcc0, $fa0, $fa1 454; LA64-NEXT: movcf2gr $a2, $fcc0 455; LA64-NEXT: masknez $a1, $a1, $a2 456; LA64-NEXT: maskeqz $a0, $a0, $a2 457; LA64-NEXT: or $a0, $a0, $a1 458; LA64-NEXT: ret 459 %cmp = fcmp olt double %a, %b 460 %res = select i1 %cmp, i32 %x, i32 %y 461 ret i32 %res 462} 463 464define i32 @f64_fcmp_ole(double %a, double %b, i32 %x, i32 %y) { 465; LA32-LABEL: f64_fcmp_ole: 466; LA32: # %bb.0: 467; LA32-NEXT: fcmp.cle.d $fcc0, $fa0, $fa1 468; LA32-NEXT: movcf2gr $a2, $fcc0 469; LA32-NEXT: masknez $a1, $a1, $a2 470; LA32-NEXT: maskeqz $a0, $a0, $a2 471; LA32-NEXT: or $a0, $a0, $a1 472; LA32-NEXT: ret 473; 474; LA64-LABEL: f64_fcmp_ole: 475; LA64: # %bb.0: 476; LA64-NEXT: fcmp.cle.d $fcc0, $fa0, $fa1 477; LA64-NEXT: movcf2gr $a2, $fcc0 478; LA64-NEXT: masknez $a1, $a1, $a2 479; LA64-NEXT: maskeqz $a0, $a0, $a2 480; LA64-NEXT: or $a0, $a0, $a1 481; LA64-NEXT: ret 482 %cmp = fcmp ole double %a, %b 483 %res = select i1 %cmp, i32 %x, i32 %y 484 ret i32 %res 485} 486 487define i32 @f64_fcmp_one(double %a, double %b, i32 %x, i32 %y) { 488; LA32-LABEL: f64_fcmp_one: 489; LA32: # %bb.0: 490; LA32-NEXT: fcmp.cne.d $fcc0, $fa0, $fa1 491; LA32-NEXT: movcf2gr $a2, $fcc0 492; LA32-NEXT: masknez $a1, $a1, $a2 493; LA32-NEXT: maskeqz $a0, $a0, $a2 494; LA32-NEXT: or $a0, $a0, $a1 495; LA32-NEXT: ret 496; 497; LA64-LABEL: f64_fcmp_one: 498; LA64: # %bb.0: 499; LA64-NEXT: fcmp.cne.d $fcc0, $fa0, $fa1 500; LA64-NEXT: movcf2gr $a2, $fcc0 501; LA64-NEXT: masknez $a1, $a1, $a2 502; LA64-NEXT: maskeqz $a0, $a0, $a2 503; LA64-NEXT: or $a0, $a0, $a1 504; LA64-NEXT: ret 505 %cmp = fcmp one double %a, %b 506 %res = select i1 %cmp, i32 %x, i32 %y 507 ret i32 %res 508} 509 510define i32 @f64_fcmp_ord(double %a, double %b, i32 %x, i32 %y) { 511; LA32-LABEL: f64_fcmp_ord: 512; LA32: # %bb.0: 513; LA32-NEXT: fcmp.cor.d $fcc0, $fa0, $fa1 514; LA32-NEXT: movcf2gr $a2, $fcc0 515; LA32-NEXT: masknez $a1, $a1, $a2 516; LA32-NEXT: maskeqz $a0, $a0, $a2 517; LA32-NEXT: or $a0, $a0, $a1 518; LA32-NEXT: ret 519; 520; LA64-LABEL: f64_fcmp_ord: 521; LA64: # %bb.0: 522; LA64-NEXT: fcmp.cor.d $fcc0, $fa0, $fa1 523; LA64-NEXT: movcf2gr $a2, $fcc0 524; LA64-NEXT: masknez $a1, $a1, $a2 525; LA64-NEXT: maskeqz $a0, $a0, $a2 526; LA64-NEXT: or $a0, $a0, $a1 527; LA64-NEXT: ret 528 %cmp = fcmp ord double %a, %b 529 %res = select i1 %cmp, i32 %x, i32 %y 530 ret i32 %res 531} 532 533define i32 @f64_fcmp_ueq(double %a, double %b, i32 %x, i32 %y) { 534; LA32-LABEL: f64_fcmp_ueq: 535; LA32: # %bb.0: 536; LA32-NEXT: fcmp.cueq.d $fcc0, $fa0, $fa1 537; LA32-NEXT: movcf2gr $a2, $fcc0 538; LA32-NEXT: masknez $a1, $a1, $a2 539; LA32-NEXT: maskeqz $a0, $a0, $a2 540; LA32-NEXT: or $a0, $a0, $a1 541; LA32-NEXT: ret 542; 543; LA64-LABEL: f64_fcmp_ueq: 544; LA64: # %bb.0: 545; LA64-NEXT: fcmp.cueq.d $fcc0, $fa0, $fa1 546; LA64-NEXT: movcf2gr $a2, $fcc0 547; LA64-NEXT: masknez $a1, $a1, $a2 548; LA64-NEXT: maskeqz $a0, $a0, $a2 549; LA64-NEXT: or $a0, $a0, $a1 550; LA64-NEXT: ret 551 %cmp = fcmp ueq double %a, %b 552 %res = select i1 %cmp, i32 %x, i32 %y 553 ret i32 %res 554} 555 556define i32 @f64_fcmp_ugt(double %a, double %b, i32 %x, i32 %y) { 557; LA32-LABEL: f64_fcmp_ugt: 558; LA32: # %bb.0: 559; LA32-NEXT: fcmp.cult.d $fcc0, $fa1, $fa0 560; LA32-NEXT: movcf2gr $a2, $fcc0 561; LA32-NEXT: masknez $a1, $a1, $a2 562; LA32-NEXT: maskeqz $a0, $a0, $a2 563; LA32-NEXT: or $a0, $a0, $a1 564; LA32-NEXT: ret 565; 566; LA64-LABEL: f64_fcmp_ugt: 567; LA64: # %bb.0: 568; LA64-NEXT: fcmp.cult.d $fcc0, $fa1, $fa0 569; LA64-NEXT: movcf2gr $a2, $fcc0 570; LA64-NEXT: masknez $a1, $a1, $a2 571; LA64-NEXT: maskeqz $a0, $a0, $a2 572; LA64-NEXT: or $a0, $a0, $a1 573; LA64-NEXT: ret 574 %cmp = fcmp ugt double %a, %b 575 %res = select i1 %cmp, i32 %x, i32 %y 576 ret i32 %res 577} 578 579define i32 @f64_fcmp_uge(double %a, double %b, i32 %x, i32 %y) { 580; LA32-LABEL: f64_fcmp_uge: 581; LA32: # %bb.0: 582; LA32-NEXT: fcmp.cule.d $fcc0, $fa1, $fa0 583; LA32-NEXT: movcf2gr $a2, $fcc0 584; LA32-NEXT: masknez $a1, $a1, $a2 585; LA32-NEXT: maskeqz $a0, $a0, $a2 586; LA32-NEXT: or $a0, $a0, $a1 587; LA32-NEXT: ret 588; 589; LA64-LABEL: f64_fcmp_uge: 590; LA64: # %bb.0: 591; LA64-NEXT: fcmp.cule.d $fcc0, $fa1, $fa0 592; LA64-NEXT: movcf2gr $a2, $fcc0 593; LA64-NEXT: masknez $a1, $a1, $a2 594; LA64-NEXT: maskeqz $a0, $a0, $a2 595; LA64-NEXT: or $a0, $a0, $a1 596; LA64-NEXT: ret 597 %cmp = fcmp uge double %a, %b 598 %res = select i1 %cmp, i32 %x, i32 %y 599 ret i32 %res 600} 601 602define i32 @f64_fcmp_ult(double %a, double %b, i32 %x, i32 %y) { 603; LA32-LABEL: f64_fcmp_ult: 604; LA32: # %bb.0: 605; LA32-NEXT: fcmp.cult.d $fcc0, $fa0, $fa1 606; LA32-NEXT: movcf2gr $a2, $fcc0 607; LA32-NEXT: masknez $a1, $a1, $a2 608; LA32-NEXT: maskeqz $a0, $a0, $a2 609; LA32-NEXT: or $a0, $a0, $a1 610; LA32-NEXT: ret 611; 612; LA64-LABEL: f64_fcmp_ult: 613; LA64: # %bb.0: 614; LA64-NEXT: fcmp.cult.d $fcc0, $fa0, $fa1 615; LA64-NEXT: movcf2gr $a2, $fcc0 616; LA64-NEXT: masknez $a1, $a1, $a2 617; LA64-NEXT: maskeqz $a0, $a0, $a2 618; LA64-NEXT: or $a0, $a0, $a1 619; LA64-NEXT: ret 620 %cmp = fcmp ult double %a, %b 621 %res = select i1 %cmp, i32 %x, i32 %y 622 ret i32 %res 623} 624 625define i32 @f64_fcmp_ule(double %a, double %b, i32 %x, i32 %y) { 626; LA32-LABEL: f64_fcmp_ule: 627; LA32: # %bb.0: 628; LA32-NEXT: fcmp.cule.d $fcc0, $fa0, $fa1 629; LA32-NEXT: movcf2gr $a2, $fcc0 630; LA32-NEXT: masknez $a1, $a1, $a2 631; LA32-NEXT: maskeqz $a0, $a0, $a2 632; LA32-NEXT: or $a0, $a0, $a1 633; LA32-NEXT: ret 634; 635; LA64-LABEL: f64_fcmp_ule: 636; LA64: # %bb.0: 637; LA64-NEXT: fcmp.cule.d $fcc0, $fa0, $fa1 638; LA64-NEXT: movcf2gr $a2, $fcc0 639; LA64-NEXT: masknez $a1, $a1, $a2 640; LA64-NEXT: maskeqz $a0, $a0, $a2 641; LA64-NEXT: or $a0, $a0, $a1 642; LA64-NEXT: ret 643 %cmp = fcmp ule double %a, %b 644 %res = select i1 %cmp, i32 %x, i32 %y 645 ret i32 %res 646} 647 648define i32 @f64_fcmp_une(double %a, double %b, i32 %x, i32 %y) { 649; LA32-LABEL: f64_fcmp_une: 650; LA32: # %bb.0: 651; LA32-NEXT: fcmp.cune.d $fcc0, $fa0, $fa1 652; LA32-NEXT: movcf2gr $a2, $fcc0 653; LA32-NEXT: masknez $a1, $a1, $a2 654; LA32-NEXT: maskeqz $a0, $a0, $a2 655; LA32-NEXT: or $a0, $a0, $a1 656; LA32-NEXT: ret 657; 658; LA64-LABEL: f64_fcmp_une: 659; LA64: # %bb.0: 660; LA64-NEXT: fcmp.cune.d $fcc0, $fa0, $fa1 661; LA64-NEXT: movcf2gr $a2, $fcc0 662; LA64-NEXT: masknez $a1, $a1, $a2 663; LA64-NEXT: maskeqz $a0, $a0, $a2 664; LA64-NEXT: or $a0, $a0, $a1 665; LA64-NEXT: ret 666 %cmp = fcmp une double %a, %b 667 %res = select i1 %cmp, i32 %x, i32 %y 668 ret i32 %res 669} 670 671define i32 @f64_fcmp_uno(double %a, double %b, i32 %x, i32 %y) { 672; LA32-LABEL: f64_fcmp_uno: 673; LA32: # %bb.0: 674; LA32-NEXT: fcmp.cun.d $fcc0, $fa0, $fa1 675; LA32-NEXT: movcf2gr $a2, $fcc0 676; LA32-NEXT: masknez $a1, $a1, $a2 677; LA32-NEXT: maskeqz $a0, $a0, $a2 678; LA32-NEXT: or $a0, $a0, $a1 679; LA32-NEXT: ret 680; 681; LA64-LABEL: f64_fcmp_uno: 682; LA64: # %bb.0: 683; LA64-NEXT: fcmp.cun.d $fcc0, $fa0, $fa1 684; LA64-NEXT: movcf2gr $a2, $fcc0 685; LA64-NEXT: masknez $a1, $a1, $a2 686; LA64-NEXT: maskeqz $a0, $a0, $a2 687; LA64-NEXT: or $a0, $a0, $a1 688; LA64-NEXT: ret 689 %cmp = fcmp uno double %a, %b 690 %res = select i1 %cmp, i32 %x, i32 %y 691 ret i32 %res 692} 693 694define i32 @f64_fcmp_true(double %a, double %b, i32 %x, i32 %y) { 695; LA32-LABEL: f64_fcmp_true: 696; LA32: # %bb.0: 697; LA32-NEXT: ret 698; 699; LA64-LABEL: f64_fcmp_true: 700; LA64: # %bb.0: 701; LA64-NEXT: ret 702 %cmp = fcmp true double %a, %b 703 %res = select i1 %cmp, i32 %x, i32 %y 704 ret i32 %res 705} 706