1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -mattr=+2e3 | FileCheck %s 3; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky | FileCheck %s --check-prefix=GENERIC 4 5define i32 @selectRR_eq_i32(i32 %x, i32 %y, i32 %n, i32 %m) { 6; CHECK-LABEL: selectRR_eq_i32: 7; CHECK: # %bb.0: # %entry 8; CHECK-NEXT: cmpne16 a1, a0 9; CHECK-NEXT: movf32 a2, a3 10; CHECK-NEXT: mov16 a0, a2 11; CHECK-NEXT: rts16 12; 13; GENERIC-LABEL: selectRR_eq_i32: 14; GENERIC: # %bb.0: # %entry 15; GENERIC-NEXT: .cfi_def_cfa_offset 0 16; GENERIC-NEXT: subi16 sp, sp, 4 17; GENERIC-NEXT: .cfi_def_cfa_offset 4 18; GENERIC-NEXT: cmpne16 a1, a0 19; GENERIC-NEXT: mvcv16 a0 20; GENERIC-NEXT: btsti16 a0, 0 21; GENERIC-NEXT: bt16 .LBB0_2 22; GENERIC-NEXT: # %bb.1: # %entry 23; GENERIC-NEXT: mov16 a3, a2 24; GENERIC-NEXT: .LBB0_2: # %entry 25; GENERIC-NEXT: mov16 a0, a3 26; GENERIC-NEXT: addi16 sp, sp, 4 27; GENERIC-NEXT: rts16 28entry: 29 %icmp = icmp eq i32 %y, %x 30 %ret = select i1 %icmp, i32 %m, i32 %n 31 ret i32 %ret 32} 33 34define i32 @selectRI_eq_i32(i32 %x, i32 %n, i32 %m) { 35; CHECK-LABEL: selectRI_eq_i32: 36; CHECK: # %bb.0: # %entry 37; CHECK-NEXT: cmpnei16 a0, 10 38; CHECK-NEXT: movf32 a1, a2 39; CHECK-NEXT: mov16 a0, a1 40; CHECK-NEXT: rts16 41; 42; GENERIC-LABEL: selectRI_eq_i32: 43; GENERIC: # %bb.0: # %entry 44; GENERIC-NEXT: .cfi_def_cfa_offset 0 45; GENERIC-NEXT: subi16 sp, sp, 4 46; GENERIC-NEXT: .cfi_def_cfa_offset 4 47; GENERIC-NEXT: cmpnei16 a0, 10 48; GENERIC-NEXT: mvcv16 a0 49; GENERIC-NEXT: btsti16 a0, 0 50; GENERIC-NEXT: bt16 .LBB1_2 51; GENERIC-NEXT: # %bb.1: # %entry 52; GENERIC-NEXT: mov16 a2, a1 53; GENERIC-NEXT: .LBB1_2: # %entry 54; GENERIC-NEXT: mov16 a0, a2 55; GENERIC-NEXT: addi16 sp, sp, 4 56; GENERIC-NEXT: rts16 57entry: 58 %icmp = icmp eq i32 %x, 10 59 %ret = select i1 %icmp, i32 %m, i32 %n 60 ret i32 %ret 61} 62 63define i32 @selectRX_eq_i32(i32 %x, i32 %n, i32 %m) { 64; CHECK-LABEL: selectRX_eq_i32: 65; CHECK: # %bb.0: # %entry 66; CHECK-NEXT: movih32 a3, 729 67; CHECK-NEXT: ori32 a3, a3, 2033 68; CHECK-NEXT: cmpne16 a0, a3 69; CHECK-NEXT: movf32 a1, a2 70; CHECK-NEXT: mov16 a0, a1 71; CHECK-NEXT: rts16 72; 73; GENERIC-LABEL: selectRX_eq_i32: 74; GENERIC: # %bb.0: # %entry 75; GENERIC-NEXT: subi16 sp, sp, 4 76; GENERIC-NEXT: .cfi_def_cfa_offset 4 77; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 78; GENERIC-NEXT: .cfi_offset l0, -4 79; GENERIC-NEXT: subi16 sp, sp, 4 80; GENERIC-NEXT: .cfi_def_cfa_offset 8 81; GENERIC-NEXT: movi16 a3, 2 82; GENERIC-NEXT: lsli16 a3, a3, 24 83; GENERIC-NEXT: movi16 l0, 217 84; GENERIC-NEXT: lsli16 l0, l0, 16 85; GENERIC-NEXT: or16 l0, a3 86; GENERIC-NEXT: movi16 a3, 7 87; GENERIC-NEXT: lsli16 a3, a3, 8 88; GENERIC-NEXT: or16 a3, l0 89; GENERIC-NEXT: movi16 l0, 241 90; GENERIC-NEXT: or16 l0, a3 91; GENERIC-NEXT: cmpne16 a0, l0 92; GENERIC-NEXT: mvcv16 a0 93; GENERIC-NEXT: btsti16 a0, 0 94; GENERIC-NEXT: bt16 .LBB2_2 95; GENERIC-NEXT: # %bb.1: # %entry 96; GENERIC-NEXT: mov16 a2, a1 97; GENERIC-NEXT: .LBB2_2: # %entry 98; GENERIC-NEXT: mov16 a0, a2 99; GENERIC-NEXT: addi16 sp, sp, 4 100; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 101; GENERIC-NEXT: addi16 sp, sp, 4 102; GENERIC-NEXT: rts16 103entry: 104 %icmp = icmp eq i32 %x, 47777777 105 %ret = select i1 %icmp, i32 %m, i32 %n 106 ret i32 %ret 107} 108 109define i32 @selectC_eq_i32(i1 %c, i32 %n, i32 %m) { 110; CHECK-LABEL: selectC_eq_i32: 111; CHECK: # %bb.0: # %entry 112; CHECK-NEXT: btsti16 a0, 0 113; CHECK-NEXT: movt32 a1, a2 114; CHECK-NEXT: mov16 a0, a1 115; CHECK-NEXT: rts16 116; 117; GENERIC-LABEL: selectC_eq_i32: 118; GENERIC: # %bb.0: # %entry 119; GENERIC-NEXT: .cfi_def_cfa_offset 0 120; GENERIC-NEXT: subi16 sp, sp, 4 121; GENERIC-NEXT: .cfi_def_cfa_offset 4 122; GENERIC-NEXT: btsti16 a0, 0 123; GENERIC-NEXT: bt16 .LBB3_2 124; GENERIC-NEXT: # %bb.1: # %entry 125; GENERIC-NEXT: mov16 a2, a1 126; GENERIC-NEXT: .LBB3_2: # %entry 127; GENERIC-NEXT: mov16 a0, a2 128; GENERIC-NEXT: addi16 sp, sp, 4 129; GENERIC-NEXT: rts16 130entry: 131 %ret = select i1 %c, i32 %m, i32 %n 132 ret i32 %ret 133} 134 135define i32 @selectRI_0_if_true(i1 %c, i32 %q) { 136; CHECK-LABEL: selectRI_0_if_true: 137; CHECK: # %bb.0: 138; CHECK-NEXT: btsti16 a0, 0 139; CHECK-NEXT: clrt32 a1 140; CHECK-NEXT: mov16 a0, a1 141; CHECK-NEXT: rts16 142; 143; GENERIC-LABEL: selectRI_0_if_true: 144; GENERIC: # %bb.0: 145; GENERIC-NEXT: .cfi_def_cfa_offset 0 146; GENERIC-NEXT: subi16 sp, sp, 4 147; GENERIC-NEXT: .cfi_def_cfa_offset 4 148; GENERIC-NEXT: mov16 a2, a0 149; GENERIC-NEXT: movi16 a0, 0 150; GENERIC-NEXT: btsti16 a2, 0 151; GENERIC-NEXT: bt16 .LBB4_2 152; GENERIC-NEXT: # %bb.1: 153; GENERIC-NEXT: mov16 a0, a1 154; GENERIC-NEXT: .LBB4_2: 155; GENERIC-NEXT: addi16 sp, sp, 4 156; GENERIC-NEXT: rts16 157 %ret = select i1 %c, i32 0, i32 %q 158 ret i32 %ret 159} 160 161define i32 @selectRI_0_if_false(i1 %c, i32 %q) { 162; CHECK-LABEL: selectRI_0_if_false: 163; CHECK: # %bb.0: 164; CHECK-NEXT: btsti16 a0, 0 165; CHECK-NEXT: clrf32 a1 166; CHECK-NEXT: mov16 a0, a1 167; CHECK-NEXT: rts16 168; 169; GENERIC-LABEL: selectRI_0_if_false: 170; GENERIC: # %bb.0: 171; GENERIC-NEXT: .cfi_def_cfa_offset 0 172; GENERIC-NEXT: subi16 sp, sp, 4 173; GENERIC-NEXT: .cfi_def_cfa_offset 4 174; GENERIC-NEXT: btsti16 a0, 0 175; GENERIC-NEXT: bt16 .LBB5_2 176; GENERIC-NEXT: # %bb.1: 177; GENERIC-NEXT: movi16 a1, 0 178; GENERIC-NEXT: .LBB5_2: 179; GENERIC-NEXT: mov16 a0, a1 180; GENERIC-NEXT: addi16 sp, sp, 4 181; GENERIC-NEXT: rts16 182 %ret = select i1 %c, i32 %q, i32 0 183 ret i32 %ret 184} 185 186define i64 @selectRR_eq_i64(i64 %x, i64 %y, i64 %n, i64 %m) { 187; CHECK-LABEL: selectRR_eq_i64: 188; CHECK: # %bb.0: # %entry 189; CHECK-NEXT: xor16 a1, a3 190; CHECK-NEXT: xor16 a0, a2 191; CHECK-NEXT: or16 a0, a1 192; CHECK-NEXT: cmpnei16 a0, 0 193; CHECK-NEXT: movi16 a0, 0 194; CHECK-NEXT: addu16 a0, sp 195; CHECK-NEXT: mov16 a1, a0 196; CHECK-NEXT: addi16 a0, sp, 8 197; CHECK-NEXT: movf32 a1, a0 198; CHECK-NEXT: ld16.w a0, (a1, 0) 199; CHECK-NEXT: ld16.w a1, (a1, 4) 200; CHECK-NEXT: rts16 201; 202; GENERIC-LABEL: selectRR_eq_i64: 203; GENERIC: # %bb.0: # %entry 204; GENERIC-NEXT: .cfi_def_cfa_offset 0 205; GENERIC-NEXT: subi16 sp, sp, 4 206; GENERIC-NEXT: .cfi_def_cfa_offset 4 207; GENERIC-NEXT: xor16 a1, a3 208; GENERIC-NEXT: xor16 a0, a2 209; GENERIC-NEXT: or16 a0, a1 210; GENERIC-NEXT: cmpnei16 a0, 0 211; GENERIC-NEXT: mvcv16 a0 212; GENERIC-NEXT: btsti16 a0, 0 213; GENERIC-NEXT: bt16 .LBB6_2 214; GENERIC-NEXT: # %bb.1: # %entry 215; GENERIC-NEXT: movi16 a0, 4 216; GENERIC-NEXT: br32 .LBB6_3 217; GENERIC-NEXT: .LBB6_2: 218; GENERIC-NEXT: movi16 a0, 12 219; GENERIC-NEXT: .LBB6_3: # %entry 220; GENERIC-NEXT: addu16 a0, sp 221; GENERIC-NEXT: mov16 a1, a0 222; GENERIC-NEXT: ld16.w a0, (a0, 0) 223; GENERIC-NEXT: ld16.w a1, (a1, 4) 224; GENERIC-NEXT: addi16 sp, sp, 4 225; GENERIC-NEXT: rts16 226entry: 227 %icmp = icmp eq i64 %y, %x 228 %ret = select i1 %icmp, i64 %m, i64 %n 229 ret i64 %ret 230} 231 232define i64 @selectRI_eq_i64(i64 %x, i64 %n, i64 %m) { 233; CHECK-LABEL: selectRI_eq_i64: 234; CHECK: # %bb.0: # %entry 235; CHECK-NEXT: ld32.w t0, (sp, 4) 236; CHECK-NEXT: ld32.w t1, (sp, 0) 237; CHECK-NEXT: xori32 a0, a0, 10 238; CHECK-NEXT: or16 a0, a1 239; CHECK-NEXT: cmpnei16 a0, 0 240; CHECK-NEXT: movf32 a2, t1 241; CHECK-NEXT: movf32 a3, t0 242; CHECK-NEXT: mov16 a0, a2 243; CHECK-NEXT: mov16 a1, a3 244; CHECK-NEXT: rts16 245; 246; GENERIC-LABEL: selectRI_eq_i64: 247; GENERIC: # %bb.0: # %entry 248; GENERIC-NEXT: subi16 sp, sp, 4 249; GENERIC-NEXT: .cfi_def_cfa_offset 4 250; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 251; GENERIC-NEXT: .cfi_offset l0, -4 252; GENERIC-NEXT: subi16 sp, sp, 4 253; GENERIC-NEXT: .cfi_def_cfa_offset 8 254; GENERIC-NEXT: movi16 l0, 10 255; GENERIC-NEXT: xor16 l0, a0 256; GENERIC-NEXT: or16 l0, a1 257; GENERIC-NEXT: cmpnei16 l0, 0 258; GENERIC-NEXT: mvcv16 a0 259; GENERIC-NEXT: btsti16 a0, 0 260; GENERIC-NEXT: bf16 .LBB7_2 261; GENERIC-NEXT: # %bb.1: 262; GENERIC-NEXT: ld16.w a2, (sp, 8) 263; GENERIC-NEXT: .LBB7_2: # %entry 264; GENERIC-NEXT: btsti16 a0, 0 265; GENERIC-NEXT: bf16 .LBB7_4 266; GENERIC-NEXT: # %bb.3: 267; GENERIC-NEXT: ld16.w a3, (sp, 12) 268; GENERIC-NEXT: .LBB7_4: # %entry 269; GENERIC-NEXT: mov16 a0, a2 270; GENERIC-NEXT: mov16 a1, a3 271; GENERIC-NEXT: addi16 sp, sp, 4 272; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 273; GENERIC-NEXT: addi16 sp, sp, 4 274; GENERIC-NEXT: rts16 275entry: 276 %icmp = icmp eq i64 %x, 10 277 %ret = select i1 %icmp, i64 %m, i64 %n 278 ret i64 %ret 279} 280 281define i64 @selectRX_eq_i64(i64 %x, i64 %n, i64 %m) { 282; CHECK-LABEL: selectRX_eq_i64: 283; CHECK: # %bb.0: # %entry 284; CHECK-NEXT: subi16 sp, sp, 4 285; CHECK-NEXT: .cfi_def_cfa_offset 4 286; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 287; CHECK-NEXT: .cfi_offset l0, -4 288; CHECK-NEXT: .cfi_def_cfa_offset 4 289; CHECK-NEXT: ld32.w t0, (sp, 8) 290; CHECK-NEXT: ld32.w t1, (sp, 4) 291; CHECK-NEXT: movih32 l0, 729 292; CHECK-NEXT: ori32 l0, l0, 2033 293; CHECK-NEXT: xor16 a0, l0 294; CHECK-NEXT: or16 a0, a1 295; CHECK-NEXT: cmpnei16 a0, 0 296; CHECK-NEXT: movf32 a2, t1 297; CHECK-NEXT: movf32 a3, t0 298; CHECK-NEXT: mov16 a0, a2 299; CHECK-NEXT: mov16 a1, a3 300; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 301; CHECK-NEXT: addi16 sp, sp, 4 302; CHECK-NEXT: rts16 303; 304; GENERIC-LABEL: selectRX_eq_i64: 305; GENERIC: # %bb.0: # %entry 306; GENERIC-NEXT: subi16 sp, sp, 8 307; GENERIC-NEXT: .cfi_def_cfa_offset 8 308; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 309; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 310; GENERIC-NEXT: .cfi_offset l1, -4 311; GENERIC-NEXT: .cfi_offset l0, -8 312; GENERIC-NEXT: subi16 sp, sp, 4 313; GENERIC-NEXT: .cfi_def_cfa_offset 12 314; GENERIC-NEXT: movi16 l0, 2 315; GENERIC-NEXT: lsli16 l0, l0, 24 316; GENERIC-NEXT: movi16 l1, 217 317; GENERIC-NEXT: lsli16 l1, l1, 16 318; GENERIC-NEXT: or16 l1, l0 319; GENERIC-NEXT: movi16 l0, 7 320; GENERIC-NEXT: lsli16 l0, l0, 8 321; GENERIC-NEXT: or16 l0, l1 322; GENERIC-NEXT: movi16 l1, 241 323; GENERIC-NEXT: or16 l1, l0 324; GENERIC-NEXT: xor16 l1, a0 325; GENERIC-NEXT: or16 l1, a1 326; GENERIC-NEXT: cmpnei16 l1, 0 327; GENERIC-NEXT: mvcv16 a0 328; GENERIC-NEXT: btsti16 a0, 0 329; GENERIC-NEXT: bf16 .LBB8_2 330; GENERIC-NEXT: # %bb.1: 331; GENERIC-NEXT: ld16.w a2, (sp, 12) 332; GENERIC-NEXT: .LBB8_2: # %entry 333; GENERIC-NEXT: btsti16 a0, 0 334; GENERIC-NEXT: bf16 .LBB8_4 335; GENERIC-NEXT: # %bb.3: 336; GENERIC-NEXT: ld16.w a3, (sp, 16) 337; GENERIC-NEXT: .LBB8_4: # %entry 338; GENERIC-NEXT: mov16 a0, a2 339; GENERIC-NEXT: mov16 a1, a3 340; GENERIC-NEXT: addi16 sp, sp, 4 341; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 342; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 343; GENERIC-NEXT: addi16 sp, sp, 8 344; GENERIC-NEXT: rts16 345entry: 346 %icmp = icmp eq i64 %x, 47777777 347 %ret = select i1 %icmp, i64 %m, i64 %n 348 ret i64 %ret 349} 350 351define i64 @selectC_eq_i64(i1 %c, i64 %n, i64 %m) { 352; CHECK-LABEL: selectC_eq_i64: 353; CHECK: # %bb.0: # %entry 354; CHECK-NEXT: ld32.w t0, (sp, 0) 355; CHECK-NEXT: btsti16 a0, 0 356; CHECK-NEXT: movt32 a1, a3 357; CHECK-NEXT: movt32 a2, t0 358; CHECK-NEXT: mov16 a0, a1 359; CHECK-NEXT: mov16 a1, a2 360; CHECK-NEXT: rts16 361; 362; GENERIC-LABEL: selectC_eq_i64: 363; GENERIC: # %bb.0: # %entry 364; GENERIC-NEXT: .cfi_def_cfa_offset 0 365; GENERIC-NEXT: subi16 sp, sp, 4 366; GENERIC-NEXT: .cfi_def_cfa_offset 4 367; GENERIC-NEXT: btsti16 a0, 0 368; GENERIC-NEXT: bt16 .LBB9_2 369; GENERIC-NEXT: # %bb.1: # %entry 370; GENERIC-NEXT: mov16 a3, a1 371; GENERIC-NEXT: .LBB9_2: # %entry 372; GENERIC-NEXT: btsti16 a0, 0 373; GENERIC-NEXT: bf16 .LBB9_4 374; GENERIC-NEXT: # %bb.3: 375; GENERIC-NEXT: ld16.w a2, (sp, 4) 376; GENERIC-NEXT: .LBB9_4: # %entry 377; GENERIC-NEXT: mov16 a0, a3 378; GENERIC-NEXT: mov16 a1, a2 379; GENERIC-NEXT: addi16 sp, sp, 4 380; GENERIC-NEXT: rts16 381entry: 382 %ret = select i1 %c, i64 %m, i64 %n 383 ret i64 %ret 384} 385 386 387define i16 @selectRR_eq_i16(i16 %x, i16 %y, i16 %n, i16 %m) { 388; CHECK-LABEL: selectRR_eq_i16: 389; CHECK: # %bb.0: # %entry 390; CHECK-NEXT: zexth16 a0, a0 391; CHECK-NEXT: zexth16 a1, a1 392; CHECK-NEXT: cmpne16 a1, a0 393; CHECK-NEXT: movf32 a2, a3 394; CHECK-NEXT: mov16 a0, a2 395; CHECK-NEXT: rts16 396; 397; GENERIC-LABEL: selectRR_eq_i16: 398; GENERIC: # %bb.0: # %entry 399; GENERIC-NEXT: subi16 sp, sp, 12 400; GENERIC-NEXT: .cfi_def_cfa_offset 12 401; GENERIC-NEXT: st16.w l2, (sp, 8) # 4-byte Folded Spill 402; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 403; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 404; GENERIC-NEXT: .cfi_offset l2, -4 405; GENERIC-NEXT: .cfi_offset l1, -8 406; GENERIC-NEXT: .cfi_offset l0, -12 407; GENERIC-NEXT: subi16 sp, sp, 4 408; GENERIC-NEXT: .cfi_def_cfa_offset 16 409; GENERIC-NEXT: movi16 l0, 0 410; GENERIC-NEXT: lsli16 l1, l0, 24 411; GENERIC-NEXT: lsli16 l0, l0, 16 412; GENERIC-NEXT: or16 l0, l1 413; GENERIC-NEXT: movi16 l1, 255 414; GENERIC-NEXT: lsli16 l2, l1, 8 415; GENERIC-NEXT: or16 l2, l0 416; GENERIC-NEXT: or16 l2, l1 417; GENERIC-NEXT: and16 a0, l2 418; GENERIC-NEXT: and16 l2, a1 419; GENERIC-NEXT: cmpne16 l2, a0 420; GENERIC-NEXT: mvcv16 a0 421; GENERIC-NEXT: btsti16 a0, 0 422; GENERIC-NEXT: bt16 .LBB10_2 423; GENERIC-NEXT: # %bb.1: # %entry 424; GENERIC-NEXT: mov16 a3, a2 425; GENERIC-NEXT: .LBB10_2: # %entry 426; GENERIC-NEXT: mov16 a0, a3 427; GENERIC-NEXT: addi16 sp, sp, 4 428; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 429; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 430; GENERIC-NEXT: ld16.w l2, (sp, 8) # 4-byte Folded Reload 431; GENERIC-NEXT: addi16 sp, sp, 12 432; GENERIC-NEXT: rts16 433entry: 434 %icmp = icmp eq i16 %y, %x 435 %ret = select i1 %icmp, i16 %m, i16 %n 436 ret i16 %ret 437} 438 439define i16 @selectRI_eq_i16(i16 %x, i16 %n, i16 %m) { 440; CHECK-LABEL: selectRI_eq_i16: 441; CHECK: # %bb.0: # %entry 442; CHECK-NEXT: zexth16 a0, a0 443; CHECK-NEXT: cmpnei16 a0, 10 444; CHECK-NEXT: movf32 a1, a2 445; CHECK-NEXT: mov16 a0, a1 446; CHECK-NEXT: rts16 447; 448; GENERIC-LABEL: selectRI_eq_i16: 449; GENERIC: # %bb.0: # %entry 450; GENERIC-NEXT: subi16 sp, sp, 8 451; GENERIC-NEXT: .cfi_def_cfa_offset 8 452; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 453; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 454; GENERIC-NEXT: .cfi_offset l1, -4 455; GENERIC-NEXT: .cfi_offset l0, -8 456; GENERIC-NEXT: subi16 sp, sp, 4 457; GENERIC-NEXT: .cfi_def_cfa_offset 12 458; GENERIC-NEXT: movi16 a3, 0 459; GENERIC-NEXT: lsli16 l0, a3, 24 460; GENERIC-NEXT: lsli16 a3, a3, 16 461; GENERIC-NEXT: or16 a3, l0 462; GENERIC-NEXT: movi16 l0, 255 463; GENERIC-NEXT: lsli16 l1, l0, 8 464; GENERIC-NEXT: or16 l1, a3 465; GENERIC-NEXT: or16 l1, l0 466; GENERIC-NEXT: and16 l1, a0 467; GENERIC-NEXT: cmpnei16 l1, 10 468; GENERIC-NEXT: mvcv16 a0 469; GENERIC-NEXT: btsti16 a0, 0 470; GENERIC-NEXT: bt16 .LBB11_2 471; GENERIC-NEXT: # %bb.1: # %entry 472; GENERIC-NEXT: mov16 a2, a1 473; GENERIC-NEXT: .LBB11_2: # %entry 474; GENERIC-NEXT: mov16 a0, a2 475; GENERIC-NEXT: addi16 sp, sp, 4 476; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 477; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 478; GENERIC-NEXT: addi16 sp, sp, 8 479; GENERIC-NEXT: rts16 480entry: 481 %icmp = icmp eq i16 %x, 10 482 %ret = select i1 %icmp, i16 %m, i16 %n 483 ret i16 %ret 484} 485 486define i16 @selectRX_eq_i16(i16 %x, i16 %n, i16 %m) { 487; CHECK-LABEL: selectRX_eq_i16: 488; CHECK: # %bb.0: # %entry 489; CHECK-NEXT: zexth16 a0, a0 490; CHECK-NEXT: cmpnei32 a0, 2033 491; CHECK-NEXT: movf32 a1, a2 492; CHECK-NEXT: mov16 a0, a1 493; CHECK-NEXT: rts16 494; 495; GENERIC-LABEL: selectRX_eq_i16: 496; GENERIC: # %bb.0: # %entry 497; GENERIC-NEXT: subi16 sp, sp, 8 498; GENERIC-NEXT: .cfi_def_cfa_offset 8 499; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 500; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 501; GENERIC-NEXT: .cfi_offset l1, -4 502; GENERIC-NEXT: .cfi_offset l0, -8 503; GENERIC-NEXT: subi16 sp, sp, 4 504; GENERIC-NEXT: .cfi_def_cfa_offset 12 505; GENERIC-NEXT: movi16 a3, 0 506; GENERIC-NEXT: lsli16 l0, a3, 24 507; GENERIC-NEXT: lsli16 a3, a3, 16 508; GENERIC-NEXT: or16 a3, l0 509; GENERIC-NEXT: movi16 l0, 255 510; GENERIC-NEXT: lsli16 l1, l0, 8 511; GENERIC-NEXT: or16 l1, a3 512; GENERIC-NEXT: or16 l1, l0 513; GENERIC-NEXT: and16 l1, a0 514; GENERIC-NEXT: movi16 a0, 7 515; GENERIC-NEXT: lsli16 a0, a0, 8 516; GENERIC-NEXT: or16 a0, a3 517; GENERIC-NEXT: movi16 a3, 241 518; GENERIC-NEXT: or16 a3, a0 519; GENERIC-NEXT: cmpne16 l1, a3 520; GENERIC-NEXT: mvcv16 a0 521; GENERIC-NEXT: btsti16 a0, 0 522; GENERIC-NEXT: bt16 .LBB12_2 523; GENERIC-NEXT: # %bb.1: # %entry 524; GENERIC-NEXT: mov16 a2, a1 525; GENERIC-NEXT: .LBB12_2: # %entry 526; GENERIC-NEXT: mov16 a0, a2 527; GENERIC-NEXT: addi16 sp, sp, 4 528; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 529; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 530; GENERIC-NEXT: addi16 sp, sp, 8 531; GENERIC-NEXT: rts16 532entry: 533 %icmp = icmp eq i16 %x, 47777777 534 %ret = select i1 %icmp, i16 %m, i16 %n 535 ret i16 %ret 536} 537 538define i16 @selectC_eq_i16(i1 %c, i16 %n, i16 %m) { 539; CHECK-LABEL: selectC_eq_i16: 540; CHECK: # %bb.0: # %entry 541; CHECK-NEXT: btsti16 a0, 0 542; CHECK-NEXT: movt32 a1, a2 543; CHECK-NEXT: mov16 a0, a1 544; CHECK-NEXT: rts16 545; 546; GENERIC-LABEL: selectC_eq_i16: 547; GENERIC: # %bb.0: # %entry 548; GENERIC-NEXT: .cfi_def_cfa_offset 0 549; GENERIC-NEXT: subi16 sp, sp, 4 550; GENERIC-NEXT: .cfi_def_cfa_offset 4 551; GENERIC-NEXT: btsti16 a0, 0 552; GENERIC-NEXT: bt16 .LBB13_2 553; GENERIC-NEXT: # %bb.1: # %entry 554; GENERIC-NEXT: mov16 a2, a1 555; GENERIC-NEXT: .LBB13_2: # %entry 556; GENERIC-NEXT: mov16 a0, a2 557; GENERIC-NEXT: addi16 sp, sp, 4 558; GENERIC-NEXT: rts16 559entry: 560 %ret = select i1 %c, i16 %m, i16 %n 561 ret i16 %ret 562} 563 564 565define i8 @selectRR_eq_i8(i8 %x, i8 %y, i8 %n, i8 %m) { 566; CHECK-LABEL: selectRR_eq_i8: 567; CHECK: # %bb.0: # %entry 568; CHECK-NEXT: zextb16 a0, a0 569; CHECK-NEXT: zextb16 a1, a1 570; CHECK-NEXT: cmpne16 a1, a0 571; CHECK-NEXT: movf32 a2, a3 572; CHECK-NEXT: mov16 a0, a2 573; CHECK-NEXT: rts16 574; 575; GENERIC-LABEL: selectRR_eq_i8: 576; GENERIC: # %bb.0: # %entry 577; GENERIC-NEXT: subi16 sp, sp, 4 578; GENERIC-NEXT: .cfi_def_cfa_offset 4 579; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 580; GENERIC-NEXT: .cfi_offset l0, -4 581; GENERIC-NEXT: subi16 sp, sp, 4 582; GENERIC-NEXT: .cfi_def_cfa_offset 8 583; GENERIC-NEXT: movi16 l0, 255 584; GENERIC-NEXT: and16 a0, l0 585; GENERIC-NEXT: and16 a1, l0 586; GENERIC-NEXT: cmpne16 a1, a0 587; GENERIC-NEXT: mvcv16 a0 588; GENERIC-NEXT: btsti16 a0, 0 589; GENERIC-NEXT: bt16 .LBB14_2 590; GENERIC-NEXT: # %bb.1: # %entry 591; GENERIC-NEXT: mov16 a3, a2 592; GENERIC-NEXT: .LBB14_2: # %entry 593; GENERIC-NEXT: mov16 a0, a3 594; GENERIC-NEXT: addi16 sp, sp, 4 595; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 596; GENERIC-NEXT: addi16 sp, sp, 4 597; GENERIC-NEXT: rts16 598entry: 599 %icmp = icmp eq i8 %y, %x 600 %ret = select i1 %icmp, i8 %m, i8 %n 601 ret i8 %ret 602} 603 604define i8 @selectRI_eq_i8(i8 %x, i8 %n, i8 %m) { 605; CHECK-LABEL: selectRI_eq_i8: 606; CHECK: # %bb.0: # %entry 607; CHECK-NEXT: zextb16 a0, a0 608; CHECK-NEXT: cmpnei16 a0, 10 609; CHECK-NEXT: movf32 a1, a2 610; CHECK-NEXT: mov16 a0, a1 611; CHECK-NEXT: rts16 612; 613; GENERIC-LABEL: selectRI_eq_i8: 614; GENERIC: # %bb.0: # %entry 615; GENERIC-NEXT: .cfi_def_cfa_offset 0 616; GENERIC-NEXT: subi16 sp, sp, 4 617; GENERIC-NEXT: .cfi_def_cfa_offset 4 618; GENERIC-NEXT: movi16 a3, 255 619; GENERIC-NEXT: and16 a3, a0 620; GENERIC-NEXT: cmpnei16 a3, 10 621; GENERIC-NEXT: mvcv16 a0 622; GENERIC-NEXT: btsti16 a0, 0 623; GENERIC-NEXT: bt16 .LBB15_2 624; GENERIC-NEXT: # %bb.1: # %entry 625; GENERIC-NEXT: mov16 a2, a1 626; GENERIC-NEXT: .LBB15_2: # %entry 627; GENERIC-NEXT: mov16 a0, a2 628; GENERIC-NEXT: addi16 sp, sp, 4 629; GENERIC-NEXT: rts16 630entry: 631 %icmp = icmp eq i8 %x, 10 632 %ret = select i1 %icmp, i8 %m, i8 %n 633 ret i8 %ret 634} 635 636define i8 @selectRX_eq_i8(i8 %x, i8 %n, i8 %m) { 637; CHECK-LABEL: selectRX_eq_i8: 638; CHECK: # %bb.0: # %entry 639; CHECK-NEXT: zextb16 a0, a0 640; CHECK-NEXT: cmpnei32 a0, 241 641; CHECK-NEXT: movf32 a1, a2 642; CHECK-NEXT: mov16 a0, a1 643; CHECK-NEXT: rts16 644; 645; GENERIC-LABEL: selectRX_eq_i8: 646; GENERIC: # %bb.0: # %entry 647; GENERIC-NEXT: .cfi_def_cfa_offset 0 648; GENERIC-NEXT: subi16 sp, sp, 4 649; GENERIC-NEXT: .cfi_def_cfa_offset 4 650; GENERIC-NEXT: movi16 a3, 255 651; GENERIC-NEXT: and16 a3, a0 652; GENERIC-NEXT: movi16 a0, 241 653; GENERIC-NEXT: cmpne16 a3, a0 654; GENERIC-NEXT: mvcv16 a0 655; GENERIC-NEXT: btsti16 a0, 0 656; GENERIC-NEXT: bt16 .LBB16_2 657; GENERIC-NEXT: # %bb.1: # %entry 658; GENERIC-NEXT: mov16 a2, a1 659; GENERIC-NEXT: .LBB16_2: # %entry 660; GENERIC-NEXT: mov16 a0, a2 661; GENERIC-NEXT: addi16 sp, sp, 4 662; GENERIC-NEXT: rts16 663entry: 664 %icmp = icmp eq i8 %x, 47777777 665 %ret = select i1 %icmp, i8 %m, i8 %n 666 ret i8 %ret 667} 668 669define i8 @selectC_eq_i8(i1 %c, i8 %n, i8 %m) { 670; CHECK-LABEL: selectC_eq_i8: 671; CHECK: # %bb.0: # %entry 672; CHECK-NEXT: btsti16 a0, 0 673; CHECK-NEXT: movt32 a1, a2 674; CHECK-NEXT: mov16 a0, a1 675; CHECK-NEXT: rts16 676; 677; GENERIC-LABEL: selectC_eq_i8: 678; GENERIC: # %bb.0: # %entry 679; GENERIC-NEXT: .cfi_def_cfa_offset 0 680; GENERIC-NEXT: subi16 sp, sp, 4 681; GENERIC-NEXT: .cfi_def_cfa_offset 4 682; GENERIC-NEXT: btsti16 a0, 0 683; GENERIC-NEXT: bt16 .LBB17_2 684; GENERIC-NEXT: # %bb.1: # %entry 685; GENERIC-NEXT: mov16 a2, a1 686; GENERIC-NEXT: .LBB17_2: # %entry 687; GENERIC-NEXT: mov16 a0, a2 688; GENERIC-NEXT: addi16 sp, sp, 4 689; GENERIC-NEXT: rts16 690entry: 691 %ret = select i1 %c, i8 %m, i8 %n 692 ret i8 %ret 693} 694 695 696define i1 @selectRR_eq_i1(i1 %x, i1 %y, i1 %n, i1 %m) { 697; CHECK-LABEL: selectRR_eq_i1: 698; CHECK: # %bb.0: # %entry 699; CHECK-NEXT: xor16 a0, a1 700; CHECK-NEXT: btsti16 a0, 0 701; CHECK-NEXT: movt32 a3, a2 702; CHECK-NEXT: mov16 a0, a3 703; CHECK-NEXT: rts16 704; 705; GENERIC-LABEL: selectRR_eq_i1: 706; GENERIC: # %bb.0: # %entry 707; GENERIC-NEXT: .cfi_def_cfa_offset 0 708; GENERIC-NEXT: subi16 sp, sp, 4 709; GENERIC-NEXT: .cfi_def_cfa_offset 4 710; GENERIC-NEXT: xor16 a0, a1 711; GENERIC-NEXT: btsti16 a0, 0 712; GENERIC-NEXT: bt16 .LBB18_2 713; GENERIC-NEXT: # %bb.1: # %entry 714; GENERIC-NEXT: mov16 a2, a3 715; GENERIC-NEXT: .LBB18_2: # %entry 716; GENERIC-NEXT: mov16 a0, a2 717; GENERIC-NEXT: addi16 sp, sp, 4 718; GENERIC-NEXT: rts16 719entry: 720 %icmp = icmp eq i1 %y, %x 721 %ret = select i1 %icmp, i1 %m, i1 %n 722 ret i1 %ret 723} 724 725define i1 @selectRI_eq_i1(i1 %x, i1 %n, i1 %m) { 726; CHECK-LABEL: selectRI_eq_i1: 727; CHECK: # %bb.0: # %entry 728; CHECK-NEXT: btsti16 a0, 0 729; CHECK-NEXT: movt32 a2, a1 730; CHECK-NEXT: mov16 a0, a2 731; CHECK-NEXT: rts16 732; 733; GENERIC-LABEL: selectRI_eq_i1: 734; GENERIC: # %bb.0: # %entry 735; GENERIC-NEXT: .cfi_def_cfa_offset 0 736; GENERIC-NEXT: subi16 sp, sp, 4 737; GENERIC-NEXT: .cfi_def_cfa_offset 4 738; GENERIC-NEXT: btsti16 a0, 0 739; GENERIC-NEXT: bt16 .LBB19_2 740; GENERIC-NEXT: # %bb.1: # %entry 741; GENERIC-NEXT: mov16 a1, a2 742; GENERIC-NEXT: .LBB19_2: # %entry 743; GENERIC-NEXT: mov16 a0, a1 744; GENERIC-NEXT: addi16 sp, sp, 4 745; GENERIC-NEXT: rts16 746entry: 747 %icmp = icmp eq i1 %x, 10 748 %ret = select i1 %icmp, i1 %m, i1 %n 749 ret i1 %ret 750} 751 752define i1 @selectRX_eq_i1(i1 %x, i1 %n, i1 %m) { 753; CHECK-LABEL: selectRX_eq_i1: 754; CHECK: # %bb.0: # %entry 755; CHECK-NEXT: btsti16 a0, 0 756; CHECK-NEXT: movt32 a1, a2 757; CHECK-NEXT: mov16 a0, a1 758; CHECK-NEXT: rts16 759; 760; GENERIC-LABEL: selectRX_eq_i1: 761; GENERIC: # %bb.0: # %entry 762; GENERIC-NEXT: .cfi_def_cfa_offset 0 763; GENERIC-NEXT: subi16 sp, sp, 4 764; GENERIC-NEXT: .cfi_def_cfa_offset 4 765; GENERIC-NEXT: btsti16 a0, 0 766; GENERIC-NEXT: bt16 .LBB20_2 767; GENERIC-NEXT: # %bb.1: # %entry 768; GENERIC-NEXT: mov16 a2, a1 769; GENERIC-NEXT: .LBB20_2: # %entry 770; GENERIC-NEXT: mov16 a0, a2 771; GENERIC-NEXT: addi16 sp, sp, 4 772; GENERIC-NEXT: rts16 773entry: 774 %icmp = icmp eq i1 %x, 47777777 775 %ret = select i1 %icmp, i1 %m, i1 %n 776 ret i1 %ret 777} 778 779define i1 @selectC_eq_i1(i1 %c, i1 %n, i1 %m) { 780; CHECK-LABEL: selectC_eq_i1: 781; CHECK: # %bb.0: # %entry 782; CHECK-NEXT: btsti16 a0, 0 783; CHECK-NEXT: movt32 a1, a2 784; CHECK-NEXT: mov16 a0, a1 785; CHECK-NEXT: rts16 786; 787; GENERIC-LABEL: selectC_eq_i1: 788; GENERIC: # %bb.0: # %entry 789; GENERIC-NEXT: .cfi_def_cfa_offset 0 790; GENERIC-NEXT: subi16 sp, sp, 4 791; GENERIC-NEXT: .cfi_def_cfa_offset 4 792; GENERIC-NEXT: btsti16 a0, 0 793; GENERIC-NEXT: bt16 .LBB21_2 794; GENERIC-NEXT: # %bb.1: # %entry 795; GENERIC-NEXT: mov16 a2, a1 796; GENERIC-NEXT: .LBB21_2: # %entry 797; GENERIC-NEXT: mov16 a0, a2 798; GENERIC-NEXT: addi16 sp, sp, 4 799; GENERIC-NEXT: rts16 800entry: 801 %ret = select i1 %c, i1 %m, i1 %n 802 ret i1 %ret 803} 804 805 806define i32 @selectRR_ne_i32(i32 %x, i32 %y, i32 %n, i32 %m) { 807; CHECK-LABEL: selectRR_ne_i32: 808; CHECK: # %bb.0: # %entry 809; CHECK-NEXT: cmpne16 a1, a0 810; CHECK-NEXT: movt32 a2, a3 811; CHECK-NEXT: mov16 a0, a2 812; CHECK-NEXT: rts16 813; 814; GENERIC-LABEL: selectRR_ne_i32: 815; GENERIC: # %bb.0: # %entry 816; GENERIC-NEXT: .cfi_def_cfa_offset 0 817; GENERIC-NEXT: subi16 sp, sp, 4 818; GENERIC-NEXT: .cfi_def_cfa_offset 4 819; GENERIC-NEXT: cmpne16 a1, a0 820; GENERIC-NEXT: mvcv16 a0 821; GENERIC-NEXT: movi16 a1, 1 822; GENERIC-NEXT: subu16 a1, a0 823; GENERIC-NEXT: btsti16 a1, 0 824; GENERIC-NEXT: bt16 .LBB22_2 825; GENERIC-NEXT: # %bb.1: # %entry 826; GENERIC-NEXT: mov16 a3, a2 827; GENERIC-NEXT: .LBB22_2: # %entry 828; GENERIC-NEXT: mov16 a0, a3 829; GENERIC-NEXT: addi16 sp, sp, 4 830; GENERIC-NEXT: rts16 831entry: 832 %icmp = icmp ne i32 %y, %x 833 %ret = select i1 %icmp, i32 %m, i32 %n 834 ret i32 %ret 835} 836 837define i32 @selectRI_ne_i32(i32 %x, i32 %n, i32 %m) { 838; CHECK-LABEL: selectRI_ne_i32: 839; CHECK: # %bb.0: # %entry 840; CHECK-NEXT: cmpnei16 a0, 10 841; CHECK-NEXT: movt32 a1, a2 842; CHECK-NEXT: mov16 a0, a1 843; CHECK-NEXT: rts16 844; 845; GENERIC-LABEL: selectRI_ne_i32: 846; GENERIC: # %bb.0: # %entry 847; GENERIC-NEXT: .cfi_def_cfa_offset 0 848; GENERIC-NEXT: subi16 sp, sp, 4 849; GENERIC-NEXT: .cfi_def_cfa_offset 4 850; GENERIC-NEXT: cmpnei16 a0, 10 851; GENERIC-NEXT: mvcv16 a0 852; GENERIC-NEXT: movi16 a3, 1 853; GENERIC-NEXT: subu16 a3, a0 854; GENERIC-NEXT: btsti16 a3, 0 855; GENERIC-NEXT: bt16 .LBB23_2 856; GENERIC-NEXT: # %bb.1: # %entry 857; GENERIC-NEXT: mov16 a2, a1 858; GENERIC-NEXT: .LBB23_2: # %entry 859; GENERIC-NEXT: mov16 a0, a2 860; GENERIC-NEXT: addi16 sp, sp, 4 861; GENERIC-NEXT: rts16 862entry: 863 %icmp = icmp ne i32 %x, 10 864 %ret = select i1 %icmp, i32 %m, i32 %n 865 ret i32 %ret 866} 867 868define i32 @selectRX_ne_i32(i32 %x, i32 %n, i32 %m) { 869; CHECK-LABEL: selectRX_ne_i32: 870; CHECK: # %bb.0: # %entry 871; CHECK-NEXT: movih32 a3, 729 872; CHECK-NEXT: ori32 a3, a3, 2033 873; CHECK-NEXT: cmpne16 a0, a3 874; CHECK-NEXT: movt32 a1, a2 875; CHECK-NEXT: mov16 a0, a1 876; CHECK-NEXT: rts16 877; 878; GENERIC-LABEL: selectRX_ne_i32: 879; GENERIC: # %bb.0: # %entry 880; GENERIC-NEXT: subi16 sp, sp, 4 881; GENERIC-NEXT: .cfi_def_cfa_offset 4 882; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 883; GENERIC-NEXT: .cfi_offset l0, -4 884; GENERIC-NEXT: subi16 sp, sp, 4 885; GENERIC-NEXT: .cfi_def_cfa_offset 8 886; GENERIC-NEXT: movi16 a3, 2 887; GENERIC-NEXT: lsli16 a3, a3, 24 888; GENERIC-NEXT: movi16 l0, 217 889; GENERIC-NEXT: lsli16 l0, l0, 16 890; GENERIC-NEXT: or16 l0, a3 891; GENERIC-NEXT: movi16 a3, 7 892; GENERIC-NEXT: lsli16 a3, a3, 8 893; GENERIC-NEXT: or16 a3, l0 894; GENERIC-NEXT: movi16 l0, 241 895; GENERIC-NEXT: or16 l0, a3 896; GENERIC-NEXT: cmpne16 a0, l0 897; GENERIC-NEXT: mvcv16 a0 898; GENERIC-NEXT: movi16 a3, 1 899; GENERIC-NEXT: subu16 a3, a0 900; GENERIC-NEXT: btsti16 a3, 0 901; GENERIC-NEXT: bt16 .LBB24_2 902; GENERIC-NEXT: # %bb.1: # %entry 903; GENERIC-NEXT: mov16 a2, a1 904; GENERIC-NEXT: .LBB24_2: # %entry 905; GENERIC-NEXT: mov16 a0, a2 906; GENERIC-NEXT: addi16 sp, sp, 4 907; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 908; GENERIC-NEXT: addi16 sp, sp, 4 909; GENERIC-NEXT: rts16 910entry: 911 %icmp = icmp ne i32 %x, 47777777 912 %ret = select i1 %icmp, i32 %m, i32 %n 913 ret i32 %ret 914} 915 916define i32 @selectC_ne_i32(i1 %c, i32 %n, i32 %m) { 917; CHECK-LABEL: selectC_ne_i32: 918; CHECK: # %bb.0: # %entry 919; CHECK-NEXT: btsti16 a0, 0 920; CHECK-NEXT: movt32 a1, a2 921; CHECK-NEXT: mov16 a0, a1 922; CHECK-NEXT: rts16 923; 924; GENERIC-LABEL: selectC_ne_i32: 925; GENERIC: # %bb.0: # %entry 926; GENERIC-NEXT: .cfi_def_cfa_offset 0 927; GENERIC-NEXT: subi16 sp, sp, 4 928; GENERIC-NEXT: .cfi_def_cfa_offset 4 929; GENERIC-NEXT: btsti16 a0, 0 930; GENERIC-NEXT: bt16 .LBB25_2 931; GENERIC-NEXT: # %bb.1: # %entry 932; GENERIC-NEXT: mov16 a2, a1 933; GENERIC-NEXT: .LBB25_2: # %entry 934; GENERIC-NEXT: mov16 a0, a2 935; GENERIC-NEXT: addi16 sp, sp, 4 936; GENERIC-NEXT: rts16 937entry: 938 %ret = select i1 %c, i32 %m, i32 %n 939 ret i32 %ret 940} 941 942define i64 @selectRR_ne_i64(i64 %x, i64 %y, i64 %n, i64 %m) { 943; CHECK-LABEL: selectRR_ne_i64: 944; CHECK: # %bb.0: # %entry 945; CHECK-NEXT: xor16 a1, a3 946; CHECK-NEXT: xor16 a0, a2 947; CHECK-NEXT: or16 a0, a1 948; CHECK-NEXT: cmpnei16 a0, 0 949; CHECK-NEXT: movi16 a0, 0 950; CHECK-NEXT: addu16 a0, sp 951; CHECK-NEXT: mov16 a1, a0 952; CHECK-NEXT: addi16 a0, sp, 8 953; CHECK-NEXT: movt32 a1, a0 954; CHECK-NEXT: ld16.w a0, (a1, 0) 955; CHECK-NEXT: ld16.w a1, (a1, 4) 956; CHECK-NEXT: rts16 957; 958; GENERIC-LABEL: selectRR_ne_i64: 959; GENERIC: # %bb.0: # %entry 960; GENERIC-NEXT: .cfi_def_cfa_offset 0 961; GENERIC-NEXT: subi16 sp, sp, 4 962; GENERIC-NEXT: .cfi_def_cfa_offset 4 963; GENERIC-NEXT: xor16 a1, a3 964; GENERIC-NEXT: xor16 a0, a2 965; GENERIC-NEXT: or16 a0, a1 966; GENERIC-NEXT: cmpnei16 a0, 0 967; GENERIC-NEXT: mvcv16 a0 968; GENERIC-NEXT: movi16 a1, 1 969; GENERIC-NEXT: subu16 a1, a0 970; GENERIC-NEXT: btsti16 a1, 0 971; GENERIC-NEXT: bt16 .LBB26_2 972; GENERIC-NEXT: # %bb.1: # %entry 973; GENERIC-NEXT: movi16 a0, 4 974; GENERIC-NEXT: br32 .LBB26_3 975; GENERIC-NEXT: .LBB26_2: 976; GENERIC-NEXT: movi16 a0, 12 977; GENERIC-NEXT: .LBB26_3: # %entry 978; GENERIC-NEXT: addu16 a0, sp 979; GENERIC-NEXT: mov16 a1, a0 980; GENERIC-NEXT: ld16.w a0, (a0, 0) 981; GENERIC-NEXT: ld16.w a1, (a1, 4) 982; GENERIC-NEXT: addi16 sp, sp, 4 983; GENERIC-NEXT: rts16 984entry: 985 %icmp = icmp ne i64 %y, %x 986 %ret = select i1 %icmp, i64 %m, i64 %n 987 ret i64 %ret 988} 989 990define i64 @selectRI_ne_i64(i64 %x, i64 %n, i64 %m) { 991; CHECK-LABEL: selectRI_ne_i64: 992; CHECK: # %bb.0: # %entry 993; CHECK-NEXT: ld32.w t0, (sp, 4) 994; CHECK-NEXT: ld32.w t1, (sp, 0) 995; CHECK-NEXT: xori32 a0, a0, 10 996; CHECK-NEXT: or16 a0, a1 997; CHECK-NEXT: cmpnei16 a0, 0 998; CHECK-NEXT: movt32 a2, t1 999; CHECK-NEXT: movt32 a3, t0 1000; CHECK-NEXT: mov16 a0, a2 1001; CHECK-NEXT: mov16 a1, a3 1002; CHECK-NEXT: rts16 1003; 1004; GENERIC-LABEL: selectRI_ne_i64: 1005; GENERIC: # %bb.0: # %entry 1006; GENERIC-NEXT: subi16 sp, sp, 4 1007; GENERIC-NEXT: .cfi_def_cfa_offset 4 1008; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1009; GENERIC-NEXT: .cfi_offset l0, -4 1010; GENERIC-NEXT: subi16 sp, sp, 4 1011; GENERIC-NEXT: .cfi_def_cfa_offset 8 1012; GENERIC-NEXT: movi16 l0, 10 1013; GENERIC-NEXT: xor16 l0, a0 1014; GENERIC-NEXT: or16 l0, a1 1015; GENERIC-NEXT: cmpnei16 l0, 0 1016; GENERIC-NEXT: mvcv16 a1 1017; GENERIC-NEXT: movi16 a0, 1 1018; GENERIC-NEXT: subu16 a0, a1 1019; GENERIC-NEXT: btsti16 a0, 0 1020; GENERIC-NEXT: bf16 .LBB27_2 1021; GENERIC-NEXT: # %bb.1: 1022; GENERIC-NEXT: ld16.w a2, (sp, 8) 1023; GENERIC-NEXT: .LBB27_2: # %entry 1024; GENERIC-NEXT: btsti16 a0, 0 1025; GENERIC-NEXT: bf16 .LBB27_4 1026; GENERIC-NEXT: # %bb.3: 1027; GENERIC-NEXT: ld16.w a3, (sp, 12) 1028; GENERIC-NEXT: .LBB27_4: # %entry 1029; GENERIC-NEXT: mov16 a0, a2 1030; GENERIC-NEXT: mov16 a1, a3 1031; GENERIC-NEXT: addi16 sp, sp, 4 1032; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1033; GENERIC-NEXT: addi16 sp, sp, 4 1034; GENERIC-NEXT: rts16 1035entry: 1036 %icmp = icmp ne i64 %x, 10 1037 %ret = select i1 %icmp, i64 %m, i64 %n 1038 ret i64 %ret 1039} 1040 1041define i64 @selectRX_ne_i64(i64 %x, i64 %n, i64 %m) { 1042; CHECK-LABEL: selectRX_ne_i64: 1043; CHECK: # %bb.0: # %entry 1044; CHECK-NEXT: subi16 sp, sp, 4 1045; CHECK-NEXT: .cfi_def_cfa_offset 4 1046; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1047; CHECK-NEXT: .cfi_offset l0, -4 1048; CHECK-NEXT: .cfi_def_cfa_offset 4 1049; CHECK-NEXT: ld32.w t0, (sp, 8) 1050; CHECK-NEXT: ld32.w t1, (sp, 4) 1051; CHECK-NEXT: movih32 l0, 729 1052; CHECK-NEXT: ori32 l0, l0, 2033 1053; CHECK-NEXT: xor16 a0, l0 1054; CHECK-NEXT: or16 a0, a1 1055; CHECK-NEXT: cmpnei16 a0, 0 1056; CHECK-NEXT: movt32 a2, t1 1057; CHECK-NEXT: movt32 a3, t0 1058; CHECK-NEXT: mov16 a0, a2 1059; CHECK-NEXT: mov16 a1, a3 1060; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1061; CHECK-NEXT: addi16 sp, sp, 4 1062; CHECK-NEXT: rts16 1063; 1064; GENERIC-LABEL: selectRX_ne_i64: 1065; GENERIC: # %bb.0: # %entry 1066; GENERIC-NEXT: subi16 sp, sp, 8 1067; GENERIC-NEXT: .cfi_def_cfa_offset 8 1068; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 1069; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1070; GENERIC-NEXT: .cfi_offset l1, -4 1071; GENERIC-NEXT: .cfi_offset l0, -8 1072; GENERIC-NEXT: subi16 sp, sp, 4 1073; GENERIC-NEXT: .cfi_def_cfa_offset 12 1074; GENERIC-NEXT: movi16 l0, 2 1075; GENERIC-NEXT: lsli16 l0, l0, 24 1076; GENERIC-NEXT: movi16 l1, 217 1077; GENERIC-NEXT: lsli16 l1, l1, 16 1078; GENERIC-NEXT: or16 l1, l0 1079; GENERIC-NEXT: movi16 l0, 7 1080; GENERIC-NEXT: lsli16 l0, l0, 8 1081; GENERIC-NEXT: or16 l0, l1 1082; GENERIC-NEXT: movi16 l1, 241 1083; GENERIC-NEXT: or16 l1, l0 1084; GENERIC-NEXT: xor16 l1, a0 1085; GENERIC-NEXT: or16 l1, a1 1086; GENERIC-NEXT: cmpnei16 l1, 0 1087; GENERIC-NEXT: mvcv16 a1 1088; GENERIC-NEXT: movi16 a0, 1 1089; GENERIC-NEXT: subu16 a0, a1 1090; GENERIC-NEXT: btsti16 a0, 0 1091; GENERIC-NEXT: bf16 .LBB28_2 1092; GENERIC-NEXT: # %bb.1: 1093; GENERIC-NEXT: ld16.w a2, (sp, 12) 1094; GENERIC-NEXT: .LBB28_2: # %entry 1095; GENERIC-NEXT: btsti16 a0, 0 1096; GENERIC-NEXT: bf16 .LBB28_4 1097; GENERIC-NEXT: # %bb.3: 1098; GENERIC-NEXT: ld16.w a3, (sp, 16) 1099; GENERIC-NEXT: .LBB28_4: # %entry 1100; GENERIC-NEXT: mov16 a0, a2 1101; GENERIC-NEXT: mov16 a1, a3 1102; GENERIC-NEXT: addi16 sp, sp, 4 1103; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1104; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 1105; GENERIC-NEXT: addi16 sp, sp, 8 1106; GENERIC-NEXT: rts16 1107entry: 1108 %icmp = icmp ne i64 %x, 47777777 1109 %ret = select i1 %icmp, i64 %m, i64 %n 1110 ret i64 %ret 1111} 1112 1113define i64 @selectC_ne_i64(i1 %c, i64 %n, i64 %m) { 1114; CHECK-LABEL: selectC_ne_i64: 1115; CHECK: # %bb.0: # %entry 1116; CHECK-NEXT: ld32.w t0, (sp, 0) 1117; CHECK-NEXT: btsti16 a0, 0 1118; CHECK-NEXT: movt32 a1, a3 1119; CHECK-NEXT: movt32 a2, t0 1120; CHECK-NEXT: mov16 a0, a1 1121; CHECK-NEXT: mov16 a1, a2 1122; CHECK-NEXT: rts16 1123; 1124; GENERIC-LABEL: selectC_ne_i64: 1125; GENERIC: # %bb.0: # %entry 1126; GENERIC-NEXT: .cfi_def_cfa_offset 0 1127; GENERIC-NEXT: subi16 sp, sp, 4 1128; GENERIC-NEXT: .cfi_def_cfa_offset 4 1129; GENERIC-NEXT: btsti16 a0, 0 1130; GENERIC-NEXT: bt16 .LBB29_2 1131; GENERIC-NEXT: # %bb.1: # %entry 1132; GENERIC-NEXT: mov16 a3, a1 1133; GENERIC-NEXT: .LBB29_2: # %entry 1134; GENERIC-NEXT: btsti16 a0, 0 1135; GENERIC-NEXT: bf16 .LBB29_4 1136; GENERIC-NEXT: # %bb.3: 1137; GENERIC-NEXT: ld16.w a2, (sp, 4) 1138; GENERIC-NEXT: .LBB29_4: # %entry 1139; GENERIC-NEXT: mov16 a0, a3 1140; GENERIC-NEXT: mov16 a1, a2 1141; GENERIC-NEXT: addi16 sp, sp, 4 1142; GENERIC-NEXT: rts16 1143entry: 1144 %ret = select i1 %c, i64 %m, i64 %n 1145 ret i64 %ret 1146} 1147 1148 1149define i16 @selectRR_ne_i16(i16 %x, i16 %y, i16 %n, i16 %m) { 1150; CHECK-LABEL: selectRR_ne_i16: 1151; CHECK: # %bb.0: # %entry 1152; CHECK-NEXT: zexth16 a0, a0 1153; CHECK-NEXT: zexth16 a1, a1 1154; CHECK-NEXT: cmpne16 a1, a0 1155; CHECK-NEXT: movt32 a2, a3 1156; CHECK-NEXT: mov16 a0, a2 1157; CHECK-NEXT: rts16 1158; 1159; GENERIC-LABEL: selectRR_ne_i16: 1160; GENERIC: # %bb.0: # %entry 1161; GENERIC-NEXT: subi16 sp, sp, 12 1162; GENERIC-NEXT: .cfi_def_cfa_offset 12 1163; GENERIC-NEXT: st16.w l2, (sp, 8) # 4-byte Folded Spill 1164; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 1165; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1166; GENERIC-NEXT: .cfi_offset l2, -4 1167; GENERIC-NEXT: .cfi_offset l1, -8 1168; GENERIC-NEXT: .cfi_offset l0, -12 1169; GENERIC-NEXT: subi16 sp, sp, 4 1170; GENERIC-NEXT: .cfi_def_cfa_offset 16 1171; GENERIC-NEXT: movi16 l0, 0 1172; GENERIC-NEXT: lsli16 l1, l0, 24 1173; GENERIC-NEXT: lsli16 l0, l0, 16 1174; GENERIC-NEXT: or16 l0, l1 1175; GENERIC-NEXT: movi16 l1, 255 1176; GENERIC-NEXT: lsli16 l2, l1, 8 1177; GENERIC-NEXT: or16 l2, l0 1178; GENERIC-NEXT: or16 l2, l1 1179; GENERIC-NEXT: and16 a0, l2 1180; GENERIC-NEXT: and16 l2, a1 1181; GENERIC-NEXT: cmpne16 l2, a0 1182; GENERIC-NEXT: mvcv16 a0 1183; GENERIC-NEXT: movi16 a1, 1 1184; GENERIC-NEXT: subu16 a1, a0 1185; GENERIC-NEXT: btsti16 a1, 0 1186; GENERIC-NEXT: bt16 .LBB30_2 1187; GENERIC-NEXT: # %bb.1: # %entry 1188; GENERIC-NEXT: mov16 a3, a2 1189; GENERIC-NEXT: .LBB30_2: # %entry 1190; GENERIC-NEXT: mov16 a0, a3 1191; GENERIC-NEXT: addi16 sp, sp, 4 1192; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1193; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 1194; GENERIC-NEXT: ld16.w l2, (sp, 8) # 4-byte Folded Reload 1195; GENERIC-NEXT: addi16 sp, sp, 12 1196; GENERIC-NEXT: rts16 1197entry: 1198 %icmp = icmp ne i16 %y, %x 1199 %ret = select i1 %icmp, i16 %m, i16 %n 1200 ret i16 %ret 1201} 1202 1203define i16 @selectRI_ne_i16(i16 %x, i16 %n, i16 %m) { 1204; CHECK-LABEL: selectRI_ne_i16: 1205; CHECK: # %bb.0: # %entry 1206; CHECK-NEXT: zexth16 a0, a0 1207; CHECK-NEXT: cmpnei16 a0, 10 1208; CHECK-NEXT: movt32 a1, a2 1209; CHECK-NEXT: mov16 a0, a1 1210; CHECK-NEXT: rts16 1211; 1212; GENERIC-LABEL: selectRI_ne_i16: 1213; GENERIC: # %bb.0: # %entry 1214; GENERIC-NEXT: subi16 sp, sp, 8 1215; GENERIC-NEXT: .cfi_def_cfa_offset 8 1216; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 1217; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1218; GENERIC-NEXT: .cfi_offset l1, -4 1219; GENERIC-NEXT: .cfi_offset l0, -8 1220; GENERIC-NEXT: subi16 sp, sp, 4 1221; GENERIC-NEXT: .cfi_def_cfa_offset 12 1222; GENERIC-NEXT: movi16 a3, 0 1223; GENERIC-NEXT: lsli16 l0, a3, 24 1224; GENERIC-NEXT: lsli16 a3, a3, 16 1225; GENERIC-NEXT: or16 a3, l0 1226; GENERIC-NEXT: movi16 l0, 255 1227; GENERIC-NEXT: lsli16 l1, l0, 8 1228; GENERIC-NEXT: or16 l1, a3 1229; GENERIC-NEXT: or16 l1, l0 1230; GENERIC-NEXT: and16 l1, a0 1231; GENERIC-NEXT: cmpnei16 l1, 10 1232; GENERIC-NEXT: mvcv16 a0 1233; GENERIC-NEXT: movi16 a3, 1 1234; GENERIC-NEXT: subu16 a3, a0 1235; GENERIC-NEXT: btsti16 a3, 0 1236; GENERIC-NEXT: bt16 .LBB31_2 1237; GENERIC-NEXT: # %bb.1: # %entry 1238; GENERIC-NEXT: mov16 a2, a1 1239; GENERIC-NEXT: .LBB31_2: # %entry 1240; GENERIC-NEXT: mov16 a0, a2 1241; GENERIC-NEXT: addi16 sp, sp, 4 1242; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1243; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 1244; GENERIC-NEXT: addi16 sp, sp, 8 1245; GENERIC-NEXT: rts16 1246entry: 1247 %icmp = icmp ne i16 %x, 10 1248 %ret = select i1 %icmp, i16 %m, i16 %n 1249 ret i16 %ret 1250} 1251 1252define i16 @selectRX_ne_i16(i16 %x, i16 %n, i16 %m) { 1253; CHECK-LABEL: selectRX_ne_i16: 1254; CHECK: # %bb.0: # %entry 1255; CHECK-NEXT: zexth16 a0, a0 1256; CHECK-NEXT: cmpnei32 a0, 2033 1257; CHECK-NEXT: movt32 a1, a2 1258; CHECK-NEXT: mov16 a0, a1 1259; CHECK-NEXT: rts16 1260; 1261; GENERIC-LABEL: selectRX_ne_i16: 1262; GENERIC: # %bb.0: # %entry 1263; GENERIC-NEXT: subi16 sp, sp, 8 1264; GENERIC-NEXT: .cfi_def_cfa_offset 8 1265; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 1266; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1267; GENERIC-NEXT: .cfi_offset l1, -4 1268; GENERIC-NEXT: .cfi_offset l0, -8 1269; GENERIC-NEXT: subi16 sp, sp, 4 1270; GENERIC-NEXT: .cfi_def_cfa_offset 12 1271; GENERIC-NEXT: movi16 a3, 0 1272; GENERIC-NEXT: lsli16 l0, a3, 24 1273; GENERIC-NEXT: lsli16 a3, a3, 16 1274; GENERIC-NEXT: or16 a3, l0 1275; GENERIC-NEXT: movi16 l0, 255 1276; GENERIC-NEXT: lsli16 l1, l0, 8 1277; GENERIC-NEXT: or16 l1, a3 1278; GENERIC-NEXT: or16 l1, l0 1279; GENERIC-NEXT: and16 l1, a0 1280; GENERIC-NEXT: movi16 a0, 7 1281; GENERIC-NEXT: lsli16 a0, a0, 8 1282; GENERIC-NEXT: or16 a0, a3 1283; GENERIC-NEXT: movi16 a3, 241 1284; GENERIC-NEXT: or16 a3, a0 1285; GENERIC-NEXT: cmpne16 l1, a3 1286; GENERIC-NEXT: mvcv16 a0 1287; GENERIC-NEXT: movi16 a3, 1 1288; GENERIC-NEXT: subu16 a3, a0 1289; GENERIC-NEXT: btsti16 a3, 0 1290; GENERIC-NEXT: bt16 .LBB32_2 1291; GENERIC-NEXT: # %bb.1: # %entry 1292; GENERIC-NEXT: mov16 a2, a1 1293; GENERIC-NEXT: .LBB32_2: # %entry 1294; GENERIC-NEXT: mov16 a0, a2 1295; GENERIC-NEXT: addi16 sp, sp, 4 1296; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1297; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 1298; GENERIC-NEXT: addi16 sp, sp, 8 1299; GENERIC-NEXT: rts16 1300entry: 1301 %icmp = icmp ne i16 %x, 47777777 1302 %ret = select i1 %icmp, i16 %m, i16 %n 1303 ret i16 %ret 1304} 1305 1306define i16 @selectC_ne_i16(i1 %c, i16 %n, i16 %m) { 1307; CHECK-LABEL: selectC_ne_i16: 1308; CHECK: # %bb.0: # %entry 1309; CHECK-NEXT: btsti16 a0, 0 1310; CHECK-NEXT: movt32 a1, a2 1311; CHECK-NEXT: mov16 a0, a1 1312; CHECK-NEXT: rts16 1313; 1314; GENERIC-LABEL: selectC_ne_i16: 1315; GENERIC: # %bb.0: # %entry 1316; GENERIC-NEXT: .cfi_def_cfa_offset 0 1317; GENERIC-NEXT: subi16 sp, sp, 4 1318; GENERIC-NEXT: .cfi_def_cfa_offset 4 1319; GENERIC-NEXT: btsti16 a0, 0 1320; GENERIC-NEXT: bt16 .LBB33_2 1321; GENERIC-NEXT: # %bb.1: # %entry 1322; GENERIC-NEXT: mov16 a2, a1 1323; GENERIC-NEXT: .LBB33_2: # %entry 1324; GENERIC-NEXT: mov16 a0, a2 1325; GENERIC-NEXT: addi16 sp, sp, 4 1326; GENERIC-NEXT: rts16 1327entry: 1328 %ret = select i1 %c, i16 %m, i16 %n 1329 ret i16 %ret 1330} 1331 1332 1333define i8 @selectRR_ne_i8(i8 %x, i8 %y, i8 %n, i8 %m) { 1334; CHECK-LABEL: selectRR_ne_i8: 1335; CHECK: # %bb.0: # %entry 1336; CHECK-NEXT: zextb16 a0, a0 1337; CHECK-NEXT: zextb16 a1, a1 1338; CHECK-NEXT: cmpne16 a1, a0 1339; CHECK-NEXT: movt32 a2, a3 1340; CHECK-NEXT: mov16 a0, a2 1341; CHECK-NEXT: rts16 1342; 1343; GENERIC-LABEL: selectRR_ne_i8: 1344; GENERIC: # %bb.0: # %entry 1345; GENERIC-NEXT: subi16 sp, sp, 4 1346; GENERIC-NEXT: .cfi_def_cfa_offset 4 1347; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1348; GENERIC-NEXT: .cfi_offset l0, -4 1349; GENERIC-NEXT: subi16 sp, sp, 4 1350; GENERIC-NEXT: .cfi_def_cfa_offset 8 1351; GENERIC-NEXT: movi16 l0, 255 1352; GENERIC-NEXT: and16 a0, l0 1353; GENERIC-NEXT: and16 a1, l0 1354; GENERIC-NEXT: cmpne16 a1, a0 1355; GENERIC-NEXT: mvcv16 a0 1356; GENERIC-NEXT: movi16 a1, 1 1357; GENERIC-NEXT: subu16 a1, a0 1358; GENERIC-NEXT: btsti16 a1, 0 1359; GENERIC-NEXT: bt16 .LBB34_2 1360; GENERIC-NEXT: # %bb.1: # %entry 1361; GENERIC-NEXT: mov16 a3, a2 1362; GENERIC-NEXT: .LBB34_2: # %entry 1363; GENERIC-NEXT: mov16 a0, a3 1364; GENERIC-NEXT: addi16 sp, sp, 4 1365; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1366; GENERIC-NEXT: addi16 sp, sp, 4 1367; GENERIC-NEXT: rts16 1368entry: 1369 %icmp = icmp ne i8 %y, %x 1370 %ret = select i1 %icmp, i8 %m, i8 %n 1371 ret i8 %ret 1372} 1373 1374define i8 @selectRI_ne_i8(i8 %x, i8 %n, i8 %m) { 1375; CHECK-LABEL: selectRI_ne_i8: 1376; CHECK: # %bb.0: # %entry 1377; CHECK-NEXT: zextb16 a0, a0 1378; CHECK-NEXT: cmpnei16 a0, 10 1379; CHECK-NEXT: movt32 a1, a2 1380; CHECK-NEXT: mov16 a0, a1 1381; CHECK-NEXT: rts16 1382; 1383; GENERIC-LABEL: selectRI_ne_i8: 1384; GENERIC: # %bb.0: # %entry 1385; GENERIC-NEXT: .cfi_def_cfa_offset 0 1386; GENERIC-NEXT: subi16 sp, sp, 4 1387; GENERIC-NEXT: .cfi_def_cfa_offset 4 1388; GENERIC-NEXT: movi16 a3, 255 1389; GENERIC-NEXT: and16 a3, a0 1390; GENERIC-NEXT: cmpnei16 a3, 10 1391; GENERIC-NEXT: mvcv16 a0 1392; GENERIC-NEXT: movi16 a3, 1 1393; GENERIC-NEXT: subu16 a3, a0 1394; GENERIC-NEXT: btsti16 a3, 0 1395; GENERIC-NEXT: bt16 .LBB35_2 1396; GENERIC-NEXT: # %bb.1: # %entry 1397; GENERIC-NEXT: mov16 a2, a1 1398; GENERIC-NEXT: .LBB35_2: # %entry 1399; GENERIC-NEXT: mov16 a0, a2 1400; GENERIC-NEXT: addi16 sp, sp, 4 1401; GENERIC-NEXT: rts16 1402entry: 1403 %icmp = icmp ne i8 %x, 10 1404 %ret = select i1 %icmp, i8 %m, i8 %n 1405 ret i8 %ret 1406} 1407 1408define i8 @selectRX_ne_i8(i8 %x, i8 %n, i8 %m) { 1409; CHECK-LABEL: selectRX_ne_i8: 1410; CHECK: # %bb.0: # %entry 1411; CHECK-NEXT: zextb16 a0, a0 1412; CHECK-NEXT: cmpnei32 a0, 241 1413; CHECK-NEXT: movt32 a1, a2 1414; CHECK-NEXT: mov16 a0, a1 1415; CHECK-NEXT: rts16 1416; 1417; GENERIC-LABEL: selectRX_ne_i8: 1418; GENERIC: # %bb.0: # %entry 1419; GENERIC-NEXT: .cfi_def_cfa_offset 0 1420; GENERIC-NEXT: subi16 sp, sp, 4 1421; GENERIC-NEXT: .cfi_def_cfa_offset 4 1422; GENERIC-NEXT: movi16 a3, 255 1423; GENERIC-NEXT: and16 a3, a0 1424; GENERIC-NEXT: movi16 a0, 241 1425; GENERIC-NEXT: cmpne16 a3, a0 1426; GENERIC-NEXT: mvcv16 a0 1427; GENERIC-NEXT: movi16 a3, 1 1428; GENERIC-NEXT: subu16 a3, a0 1429; GENERIC-NEXT: btsti16 a3, 0 1430; GENERIC-NEXT: bt16 .LBB36_2 1431; GENERIC-NEXT: # %bb.1: # %entry 1432; GENERIC-NEXT: mov16 a2, a1 1433; GENERIC-NEXT: .LBB36_2: # %entry 1434; GENERIC-NEXT: mov16 a0, a2 1435; GENERIC-NEXT: addi16 sp, sp, 4 1436; GENERIC-NEXT: rts16 1437entry: 1438 %icmp = icmp ne i8 %x, 47777777 1439 %ret = select i1 %icmp, i8 %m, i8 %n 1440 ret i8 %ret 1441} 1442 1443define i8 @selectC_ne_i8(i1 %c, i8 %n, i8 %m) { 1444; CHECK-LABEL: selectC_ne_i8: 1445; CHECK: # %bb.0: # %entry 1446; CHECK-NEXT: btsti16 a0, 0 1447; CHECK-NEXT: movt32 a1, a2 1448; CHECK-NEXT: mov16 a0, a1 1449; CHECK-NEXT: rts16 1450; 1451; GENERIC-LABEL: selectC_ne_i8: 1452; GENERIC: # %bb.0: # %entry 1453; GENERIC-NEXT: .cfi_def_cfa_offset 0 1454; GENERIC-NEXT: subi16 sp, sp, 4 1455; GENERIC-NEXT: .cfi_def_cfa_offset 4 1456; GENERIC-NEXT: btsti16 a0, 0 1457; GENERIC-NEXT: bt16 .LBB37_2 1458; GENERIC-NEXT: # %bb.1: # %entry 1459; GENERIC-NEXT: mov16 a2, a1 1460; GENERIC-NEXT: .LBB37_2: # %entry 1461; GENERIC-NEXT: mov16 a0, a2 1462; GENERIC-NEXT: addi16 sp, sp, 4 1463; GENERIC-NEXT: rts16 1464entry: 1465 %ret = select i1 %c, i8 %m, i8 %n 1466 ret i8 %ret 1467} 1468 1469 1470define i1 @selectRR_ne_i1(i1 %x, i1 %y, i1 %n, i1 %m) { 1471; CHECK-LABEL: selectRR_ne_i1: 1472; CHECK: # %bb.0: # %entry 1473; CHECK-NEXT: xor16 a0, a1 1474; CHECK-NEXT: btsti16 a0, 0 1475; CHECK-NEXT: movt32 a2, a3 1476; CHECK-NEXT: mov16 a0, a2 1477; CHECK-NEXT: rts16 1478; 1479; GENERIC-LABEL: selectRR_ne_i1: 1480; GENERIC: # %bb.0: # %entry 1481; GENERIC-NEXT: .cfi_def_cfa_offset 0 1482; GENERIC-NEXT: subi16 sp, sp, 4 1483; GENERIC-NEXT: .cfi_def_cfa_offset 4 1484; GENERIC-NEXT: xor16 a0, a1 1485; GENERIC-NEXT: btsti16 a0, 0 1486; GENERIC-NEXT: bt16 .LBB38_2 1487; GENERIC-NEXT: # %bb.1: # %entry 1488; GENERIC-NEXT: mov16 a3, a2 1489; GENERIC-NEXT: .LBB38_2: # %entry 1490; GENERIC-NEXT: mov16 a0, a3 1491; GENERIC-NEXT: addi16 sp, sp, 4 1492; GENERIC-NEXT: rts16 1493entry: 1494 %icmp = icmp ne i1 %y, %x 1495 %ret = select i1 %icmp, i1 %m, i1 %n 1496 ret i1 %ret 1497} 1498 1499define i1 @selectRI_ne_i1(i1 %x, i1 %n, i1 %m) { 1500; CHECK-LABEL: selectRI_ne_i1: 1501; CHECK: # %bb.0: # %entry 1502; CHECK-NEXT: btsti16 a0, 0 1503; CHECK-NEXT: movt32 a1, a2 1504; CHECK-NEXT: mov16 a0, a1 1505; CHECK-NEXT: rts16 1506; 1507; GENERIC-LABEL: selectRI_ne_i1: 1508; GENERIC: # %bb.0: # %entry 1509; GENERIC-NEXT: .cfi_def_cfa_offset 0 1510; GENERIC-NEXT: subi16 sp, sp, 4 1511; GENERIC-NEXT: .cfi_def_cfa_offset 4 1512; GENERIC-NEXT: btsti16 a0, 0 1513; GENERIC-NEXT: bt16 .LBB39_2 1514; GENERIC-NEXT: # %bb.1: # %entry 1515; GENERIC-NEXT: mov16 a2, a1 1516; GENERIC-NEXT: .LBB39_2: # %entry 1517; GENERIC-NEXT: mov16 a0, a2 1518; GENERIC-NEXT: addi16 sp, sp, 4 1519; GENERIC-NEXT: rts16 1520entry: 1521 %icmp = icmp ne i1 %x, 10 1522 %ret = select i1 %icmp, i1 %m, i1 %n 1523 ret i1 %ret 1524} 1525 1526define i1 @selectRX_ne_i1(i1 %x, i1 %n, i1 %m) { 1527; CHECK-LABEL: selectRX_ne_i1: 1528; CHECK: # %bb.0: # %entry 1529; CHECK-NEXT: btsti16 a0, 0 1530; CHECK-NEXT: movt32 a2, a1 1531; CHECK-NEXT: mov16 a0, a2 1532; CHECK-NEXT: rts16 1533; 1534; GENERIC-LABEL: selectRX_ne_i1: 1535; GENERIC: # %bb.0: # %entry 1536; GENERIC-NEXT: .cfi_def_cfa_offset 0 1537; GENERIC-NEXT: subi16 sp, sp, 4 1538; GENERIC-NEXT: .cfi_def_cfa_offset 4 1539; GENERIC-NEXT: btsti16 a0, 0 1540; GENERIC-NEXT: bt16 .LBB40_2 1541; GENERIC-NEXT: # %bb.1: # %entry 1542; GENERIC-NEXT: mov16 a1, a2 1543; GENERIC-NEXT: .LBB40_2: # %entry 1544; GENERIC-NEXT: mov16 a0, a1 1545; GENERIC-NEXT: addi16 sp, sp, 4 1546; GENERIC-NEXT: rts16 1547entry: 1548 %icmp = icmp ne i1 %x, 47777777 1549 %ret = select i1 %icmp, i1 %m, i1 %n 1550 ret i1 %ret 1551} 1552 1553define i1 @selectC_ne_i1(i1 %c, i1 %n, i1 %m) { 1554; CHECK-LABEL: selectC_ne_i1: 1555; CHECK: # %bb.0: # %entry 1556; CHECK-NEXT: btsti16 a0, 0 1557; CHECK-NEXT: movt32 a1, a2 1558; CHECK-NEXT: mov16 a0, a1 1559; CHECK-NEXT: rts16 1560; 1561; GENERIC-LABEL: selectC_ne_i1: 1562; GENERIC: # %bb.0: # %entry 1563; GENERIC-NEXT: .cfi_def_cfa_offset 0 1564; GENERIC-NEXT: subi16 sp, sp, 4 1565; GENERIC-NEXT: .cfi_def_cfa_offset 4 1566; GENERIC-NEXT: btsti16 a0, 0 1567; GENERIC-NEXT: bt16 .LBB41_2 1568; GENERIC-NEXT: # %bb.1: # %entry 1569; GENERIC-NEXT: mov16 a2, a1 1570; GENERIC-NEXT: .LBB41_2: # %entry 1571; GENERIC-NEXT: mov16 a0, a2 1572; GENERIC-NEXT: addi16 sp, sp, 4 1573; GENERIC-NEXT: rts16 1574entry: 1575 %ret = select i1 %c, i1 %m, i1 %n 1576 ret i1 %ret 1577} 1578 1579 1580define i32 @selectRR_ugt_i32(i32 %x, i32 %y, i32 %n, i32 %m) { 1581; CHECK-LABEL: selectRR_ugt_i32: 1582; CHECK: # %bb.0: # %entry 1583; CHECK-NEXT: cmphs16 a0, a1 1584; CHECK-NEXT: movf32 a2, a3 1585; CHECK-NEXT: mov16 a0, a2 1586; CHECK-NEXT: rts16 1587; 1588; GENERIC-LABEL: selectRR_ugt_i32: 1589; GENERIC: # %bb.0: # %entry 1590; GENERIC-NEXT: .cfi_def_cfa_offset 0 1591; GENERIC-NEXT: subi16 sp, sp, 4 1592; GENERIC-NEXT: .cfi_def_cfa_offset 4 1593; GENERIC-NEXT: cmphs16 a0, a1 1594; GENERIC-NEXT: mvcv16 a0 1595; GENERIC-NEXT: btsti16 a0, 0 1596; GENERIC-NEXT: bt16 .LBB42_2 1597; GENERIC-NEXT: # %bb.1: # %entry 1598; GENERIC-NEXT: mov16 a3, a2 1599; GENERIC-NEXT: .LBB42_2: # %entry 1600; GENERIC-NEXT: mov16 a0, a3 1601; GENERIC-NEXT: addi16 sp, sp, 4 1602; GENERIC-NEXT: rts16 1603entry: 1604 %icmp = icmp ugt i32 %y, %x 1605 %ret = select i1 %icmp, i32 %m, i32 %n 1606 ret i32 %ret 1607} 1608 1609define i32 @selectRI_ugt_i32(i32 %x, i32 %n, i32 %m) { 1610; CHECK-LABEL: selectRI_ugt_i32: 1611; CHECK: # %bb.0: # %entry 1612; CHECK-NEXT: movi16 a3, 10 1613; CHECK-NEXT: cmphs16 a3, a0 1614; CHECK-NEXT: movf32 a1, a2 1615; CHECK-NEXT: mov16 a0, a1 1616; CHECK-NEXT: rts16 1617; 1618; GENERIC-LABEL: selectRI_ugt_i32: 1619; GENERIC: # %bb.0: # %entry 1620; GENERIC-NEXT: .cfi_def_cfa_offset 0 1621; GENERIC-NEXT: subi16 sp, sp, 4 1622; GENERIC-NEXT: .cfi_def_cfa_offset 4 1623; GENERIC-NEXT: movi16 a3, 10 1624; GENERIC-NEXT: cmphs16 a3, a0 1625; GENERIC-NEXT: mvcv16 a0 1626; GENERIC-NEXT: btsti16 a0, 0 1627; GENERIC-NEXT: bt16 .LBB43_2 1628; GENERIC-NEXT: # %bb.1: # %entry 1629; GENERIC-NEXT: mov16 a2, a1 1630; GENERIC-NEXT: .LBB43_2: # %entry 1631; GENERIC-NEXT: mov16 a0, a2 1632; GENERIC-NEXT: addi16 sp, sp, 4 1633; GENERIC-NEXT: rts16 1634entry: 1635 %icmp = icmp ugt i32 %x, 10 1636 %ret = select i1 %icmp, i32 %m, i32 %n 1637 ret i32 %ret 1638} 1639 1640define i32 @selectRX_ugt_i32(i32 %x, i32 %n, i32 %m) { 1641; CHECK-LABEL: selectRX_ugt_i32: 1642; CHECK: # %bb.0: # %entry 1643; CHECK-NEXT: movih32 a3, 729 1644; CHECK-NEXT: ori32 a3, a3, 2033 1645; CHECK-NEXT: cmphs16 a3, a0 1646; CHECK-NEXT: movf32 a1, a2 1647; CHECK-NEXT: mov16 a0, a1 1648; CHECK-NEXT: rts16 1649; 1650; GENERIC-LABEL: selectRX_ugt_i32: 1651; GENERIC: # %bb.0: # %entry 1652; GENERIC-NEXT: subi16 sp, sp, 4 1653; GENERIC-NEXT: .cfi_def_cfa_offset 4 1654; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1655; GENERIC-NEXT: .cfi_offset l0, -4 1656; GENERIC-NEXT: subi16 sp, sp, 4 1657; GENERIC-NEXT: .cfi_def_cfa_offset 8 1658; GENERIC-NEXT: movi16 a3, 2 1659; GENERIC-NEXT: lsli16 a3, a3, 24 1660; GENERIC-NEXT: movi16 l0, 217 1661; GENERIC-NEXT: lsli16 l0, l0, 16 1662; GENERIC-NEXT: or16 l0, a3 1663; GENERIC-NEXT: movi16 a3, 7 1664; GENERIC-NEXT: lsli16 a3, a3, 8 1665; GENERIC-NEXT: or16 a3, l0 1666; GENERIC-NEXT: movi16 l0, 241 1667; GENERIC-NEXT: or16 l0, a3 1668; GENERIC-NEXT: cmphs16 l0, a0 1669; GENERIC-NEXT: mvcv16 a0 1670; GENERIC-NEXT: btsti16 a0, 0 1671; GENERIC-NEXT: bt16 .LBB44_2 1672; GENERIC-NEXT: # %bb.1: # %entry 1673; GENERIC-NEXT: mov16 a2, a1 1674; GENERIC-NEXT: .LBB44_2: # %entry 1675; GENERIC-NEXT: mov16 a0, a2 1676; GENERIC-NEXT: addi16 sp, sp, 4 1677; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1678; GENERIC-NEXT: addi16 sp, sp, 4 1679; GENERIC-NEXT: rts16 1680entry: 1681 %icmp = icmp ugt i32 %x, 47777777 1682 %ret = select i1 %icmp, i32 %m, i32 %n 1683 ret i32 %ret 1684} 1685 1686define i32 @selectC_ugt_i32(i1 %c, i32 %n, i32 %m) { 1687; CHECK-LABEL: selectC_ugt_i32: 1688; CHECK: # %bb.0: # %entry 1689; CHECK-NEXT: btsti16 a0, 0 1690; CHECK-NEXT: movt32 a1, a2 1691; CHECK-NEXT: mov16 a0, a1 1692; CHECK-NEXT: rts16 1693; 1694; GENERIC-LABEL: selectC_ugt_i32: 1695; GENERIC: # %bb.0: # %entry 1696; GENERIC-NEXT: .cfi_def_cfa_offset 0 1697; GENERIC-NEXT: subi16 sp, sp, 4 1698; GENERIC-NEXT: .cfi_def_cfa_offset 4 1699; GENERIC-NEXT: btsti16 a0, 0 1700; GENERIC-NEXT: bt16 .LBB45_2 1701; GENERIC-NEXT: # %bb.1: # %entry 1702; GENERIC-NEXT: mov16 a2, a1 1703; GENERIC-NEXT: .LBB45_2: # %entry 1704; GENERIC-NEXT: mov16 a0, a2 1705; GENERIC-NEXT: addi16 sp, sp, 4 1706; GENERIC-NEXT: rts16 1707entry: 1708 %ret = select i1 %c, i32 %m, i32 %n 1709 ret i32 %ret 1710} 1711 1712define i64 @selectRR_ugt_i64(i64 %x, i64 %y, i64 %n, i64 %m) { 1713; CHECK-LABEL: selectRR_ugt_i64: 1714; CHECK: # %bb.0: # %entry 1715; CHECK-NEXT: .cfi_def_cfa_offset 0 1716; CHECK-NEXT: subi16 sp, sp, 8 1717; CHECK-NEXT: .cfi_def_cfa_offset 8 1718; CHECK-NEXT: cmpne16 a3, a1 1719; CHECK-NEXT: mvc32 t0 1720; CHECK-NEXT: st32.w t0, (sp, 4) 1721; CHECK-NEXT: cmphs16 a1, a3 1722; CHECK-NEXT: mvcv16 a1 1723; CHECK-NEXT: cmphs16 a0, a2 1724; CHECK-NEXT: mvcv16 a0 1725; CHECK-NEXT: ld16.w a2, (sp, 4) 1726; CHECK-NEXT: btsti16 a2, 0 1727; CHECK-NEXT: movf32 a1, a0 1728; CHECK-NEXT: addi16 a2, sp, 8 1729; CHECK-NEXT: addi16 a0, sp, 16 1730; CHECK-NEXT: btsti16 a1, 0 1731; CHECK-NEXT: movt32 a2, a0 1732; CHECK-NEXT: ld16.w a0, (a2, 0) 1733; CHECK-NEXT: ld16.w a1, (a2, 4) 1734; CHECK-NEXT: addi16 sp, sp, 8 1735; CHECK-NEXT: rts16 1736; 1737; GENERIC-LABEL: selectRR_ugt_i64: 1738; GENERIC: # %bb.0: # %entry 1739; GENERIC-NEXT: subi16 sp, sp, 4 1740; GENERIC-NEXT: .cfi_def_cfa_offset 4 1741; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1742; GENERIC-NEXT: .cfi_offset l0, -4 1743; GENERIC-NEXT: subi16 sp, sp, 4 1744; GENERIC-NEXT: .cfi_def_cfa_offset 8 1745; GENERIC-NEXT: cmphs16 a1, a3 1746; GENERIC-NEXT: mvcv16 l0 1747; GENERIC-NEXT: cmphs16 a0, a2 1748; GENERIC-NEXT: mvcv16 a0 1749; GENERIC-NEXT: cmpne16 a3, a1 1750; GENERIC-NEXT: mvcv16 a1 1751; GENERIC-NEXT: btsti16 a1, 0 1752; GENERIC-NEXT: bt16 .LBB46_2 1753; GENERIC-NEXT: # %bb.1: # %entry 1754; GENERIC-NEXT: mov16 a0, l0 1755; GENERIC-NEXT: .LBB46_2: # %entry 1756; GENERIC-NEXT: btsti16 a0, 0 1757; GENERIC-NEXT: bt16 .LBB46_4 1758; GENERIC-NEXT: # %bb.3: # %entry 1759; GENERIC-NEXT: movi16 a0, 8 1760; GENERIC-NEXT: br32 .LBB46_5 1761; GENERIC-NEXT: .LBB46_4: 1762; GENERIC-NEXT: movi16 a0, 16 1763; GENERIC-NEXT: .LBB46_5: # %entry 1764; GENERIC-NEXT: addu16 a0, sp 1765; GENERIC-NEXT: mov16 a1, a0 1766; GENERIC-NEXT: ld16.w a0, (a0, 0) 1767; GENERIC-NEXT: ld16.w a1, (a1, 4) 1768; GENERIC-NEXT: addi16 sp, sp, 4 1769; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1770; GENERIC-NEXT: addi16 sp, sp, 4 1771; GENERIC-NEXT: rts16 1772entry: 1773 %icmp = icmp ugt i64 %y, %x 1774 %ret = select i1 %icmp, i64 %m, i64 %n 1775 ret i64 %ret 1776} 1777 1778define i64 @selectRI_ugt_i64(i64 %x, i64 %n, i64 %m) { 1779; CHECK-LABEL: selectRI_ugt_i64: 1780; CHECK: # %bb.0: # %entry 1781; CHECK-NEXT: subi16 sp, sp, 4 1782; CHECK-NEXT: .cfi_def_cfa_offset 4 1783; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1784; CHECK-NEXT: .cfi_offset l0, -4 1785; CHECK-NEXT: .cfi_def_cfa_offset 4 1786; CHECK-NEXT: ld32.w t0, (sp, 8) 1787; CHECK-NEXT: ld32.w t1, (sp, 4) 1788; CHECK-NEXT: movi16 l0, 10 1789; CHECK-NEXT: cmphs16 l0, a0 1790; CHECK-NEXT: mvcv16 a0 1791; CHECK-NEXT: cmpnei16 a1, 0 1792; CHECK-NEXT: mvc32 a1 1793; CHECK-NEXT: movf32 a1, a0 1794; CHECK-NEXT: btsti16 a1, 0 1795; CHECK-NEXT: movt32 a2, t1 1796; CHECK-NEXT: movt32 a3, t0 1797; CHECK-NEXT: mov16 a0, a2 1798; CHECK-NEXT: mov16 a1, a3 1799; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1800; CHECK-NEXT: addi16 sp, sp, 4 1801; CHECK-NEXT: rts16 1802; 1803; GENERIC-LABEL: selectRI_ugt_i64: 1804; GENERIC: # %bb.0: # %entry 1805; GENERIC-NEXT: subi16 sp, sp, 4 1806; GENERIC-NEXT: .cfi_def_cfa_offset 4 1807; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1808; GENERIC-NEXT: .cfi_offset l0, -4 1809; GENERIC-NEXT: subi16 sp, sp, 4 1810; GENERIC-NEXT: .cfi_def_cfa_offset 8 1811; GENERIC-NEXT: cmpnei16 a1, 0 1812; GENERIC-NEXT: mvcv16 a1 1813; GENERIC-NEXT: movi16 l0, 10 1814; GENERIC-NEXT: cmphs16 l0, a0 1815; GENERIC-NEXT: mvcv16 a0 1816; GENERIC-NEXT: btsti16 a1, 0 1817; GENERIC-NEXT: bf16 .LBB47_5 1818; GENERIC-NEXT: # %bb.1: # %entry 1819; GENERIC-NEXT: btsti16 a0, 0 1820; GENERIC-NEXT: bt16 .LBB47_6 1821; GENERIC-NEXT: .LBB47_2: # %entry 1822; GENERIC-NEXT: btsti16 a0, 0 1823; GENERIC-NEXT: bf16 .LBB47_4 1824; GENERIC-NEXT: .LBB47_3: 1825; GENERIC-NEXT: ld16.w a3, (sp, 12) 1826; GENERIC-NEXT: .LBB47_4: # %entry 1827; GENERIC-NEXT: mov16 a0, a2 1828; GENERIC-NEXT: mov16 a1, a3 1829; GENERIC-NEXT: addi16 sp, sp, 4 1830; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1831; GENERIC-NEXT: addi16 sp, sp, 4 1832; GENERIC-NEXT: rts16 1833; GENERIC-NEXT: .LBB47_5: # %entry 1834; GENERIC-NEXT: movi16 a0, 1 1835; GENERIC-NEXT: subu16 a0, a1 1836; GENERIC-NEXT: btsti16 a0, 0 1837; GENERIC-NEXT: bf16 .LBB47_2 1838; GENERIC-NEXT: .LBB47_6: 1839; GENERIC-NEXT: ld16.w a2, (sp, 8) 1840; GENERIC-NEXT: btsti16 a0, 0 1841; GENERIC-NEXT: bt16 .LBB47_3 1842; GENERIC-NEXT: br32 .LBB47_4 1843entry: 1844 %icmp = icmp ugt i64 %x, 10 1845 %ret = select i1 %icmp, i64 %m, i64 %n 1846 ret i64 %ret 1847} 1848 1849define i64 @selectRX_ugt_i64(i64 %x, i64 %n, i64 %m) { 1850; CHECK-LABEL: selectRX_ugt_i64: 1851; CHECK: # %bb.0: # %entry 1852; CHECK-NEXT: subi16 sp, sp, 4 1853; CHECK-NEXT: .cfi_def_cfa_offset 4 1854; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1855; CHECK-NEXT: .cfi_offset l0, -4 1856; CHECK-NEXT: .cfi_def_cfa_offset 4 1857; CHECK-NEXT: ld32.w t0, (sp, 8) 1858; CHECK-NEXT: ld32.w t1, (sp, 4) 1859; CHECK-NEXT: movih32 l0, 729 1860; CHECK-NEXT: ori32 l0, l0, 2033 1861; CHECK-NEXT: cmphs16 l0, a0 1862; CHECK-NEXT: mvcv16 a0 1863; CHECK-NEXT: cmpnei16 a1, 0 1864; CHECK-NEXT: mvc32 a1 1865; CHECK-NEXT: movf32 a1, a0 1866; CHECK-NEXT: btsti16 a1, 0 1867; CHECK-NEXT: movt32 a2, t1 1868; CHECK-NEXT: movt32 a3, t0 1869; CHECK-NEXT: mov16 a0, a2 1870; CHECK-NEXT: mov16 a1, a3 1871; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1872; CHECK-NEXT: addi16 sp, sp, 4 1873; CHECK-NEXT: rts16 1874; 1875; GENERIC-LABEL: selectRX_ugt_i64: 1876; GENERIC: # %bb.0: # %entry 1877; GENERIC-NEXT: subi16 sp, sp, 8 1878; GENERIC-NEXT: .cfi_def_cfa_offset 8 1879; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 1880; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1881; GENERIC-NEXT: .cfi_offset l1, -4 1882; GENERIC-NEXT: .cfi_offset l0, -8 1883; GENERIC-NEXT: subi16 sp, sp, 4 1884; GENERIC-NEXT: .cfi_def_cfa_offset 12 1885; GENERIC-NEXT: cmpnei16 a1, 0 1886; GENERIC-NEXT: mvcv16 a1 1887; GENERIC-NEXT: movi16 l0, 2 1888; GENERIC-NEXT: lsli16 l0, l0, 24 1889; GENERIC-NEXT: movi16 l1, 217 1890; GENERIC-NEXT: lsli16 l1, l1, 16 1891; GENERIC-NEXT: or16 l1, l0 1892; GENERIC-NEXT: movi16 l0, 7 1893; GENERIC-NEXT: lsli16 l0, l0, 8 1894; GENERIC-NEXT: or16 l0, l1 1895; GENERIC-NEXT: movi16 l1, 241 1896; GENERIC-NEXT: or16 l1, l0 1897; GENERIC-NEXT: cmphs16 l1, a0 1898; GENERIC-NEXT: mvcv16 a0 1899; GENERIC-NEXT: btsti16 a1, 0 1900; GENERIC-NEXT: bf16 .LBB48_5 1901; GENERIC-NEXT: # %bb.1: # %entry 1902; GENERIC-NEXT: btsti16 a0, 0 1903; GENERIC-NEXT: bt16 .LBB48_6 1904; GENERIC-NEXT: .LBB48_2: # %entry 1905; GENERIC-NEXT: btsti16 a0, 0 1906; GENERIC-NEXT: bf16 .LBB48_4 1907; GENERIC-NEXT: .LBB48_3: 1908; GENERIC-NEXT: ld16.w a3, (sp, 16) 1909; GENERIC-NEXT: .LBB48_4: # %entry 1910; GENERIC-NEXT: mov16 a0, a2 1911; GENERIC-NEXT: mov16 a1, a3 1912; GENERIC-NEXT: addi16 sp, sp, 4 1913; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 1914; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 1915; GENERIC-NEXT: addi16 sp, sp, 8 1916; GENERIC-NEXT: rts16 1917; GENERIC-NEXT: .LBB48_5: # %entry 1918; GENERIC-NEXT: movi16 a0, 1 1919; GENERIC-NEXT: subu16 a0, a1 1920; GENERIC-NEXT: btsti16 a0, 0 1921; GENERIC-NEXT: bf16 .LBB48_2 1922; GENERIC-NEXT: .LBB48_6: 1923; GENERIC-NEXT: ld16.w a2, (sp, 12) 1924; GENERIC-NEXT: btsti16 a0, 0 1925; GENERIC-NEXT: bt16 .LBB48_3 1926; GENERIC-NEXT: br32 .LBB48_4 1927entry: 1928 %icmp = icmp ugt i64 %x, 47777777 1929 %ret = select i1 %icmp, i64 %m, i64 %n 1930 ret i64 %ret 1931} 1932 1933define i64 @selectC_ugt_i64(i1 %c, i64 %n, i64 %m) { 1934; CHECK-LABEL: selectC_ugt_i64: 1935; CHECK: # %bb.0: # %entry 1936; CHECK-NEXT: ld32.w t0, (sp, 0) 1937; CHECK-NEXT: btsti16 a0, 0 1938; CHECK-NEXT: movt32 a1, a3 1939; CHECK-NEXT: movt32 a2, t0 1940; CHECK-NEXT: mov16 a0, a1 1941; CHECK-NEXT: mov16 a1, a2 1942; CHECK-NEXT: rts16 1943; 1944; GENERIC-LABEL: selectC_ugt_i64: 1945; GENERIC: # %bb.0: # %entry 1946; GENERIC-NEXT: .cfi_def_cfa_offset 0 1947; GENERIC-NEXT: subi16 sp, sp, 4 1948; GENERIC-NEXT: .cfi_def_cfa_offset 4 1949; GENERIC-NEXT: btsti16 a0, 0 1950; GENERIC-NEXT: bt16 .LBB49_2 1951; GENERIC-NEXT: # %bb.1: # %entry 1952; GENERIC-NEXT: mov16 a3, a1 1953; GENERIC-NEXT: .LBB49_2: # %entry 1954; GENERIC-NEXT: btsti16 a0, 0 1955; GENERIC-NEXT: bf16 .LBB49_4 1956; GENERIC-NEXT: # %bb.3: 1957; GENERIC-NEXT: ld16.w a2, (sp, 4) 1958; GENERIC-NEXT: .LBB49_4: # %entry 1959; GENERIC-NEXT: mov16 a0, a3 1960; GENERIC-NEXT: mov16 a1, a2 1961; GENERIC-NEXT: addi16 sp, sp, 4 1962; GENERIC-NEXT: rts16 1963entry: 1964 %ret = select i1 %c, i64 %m, i64 %n 1965 ret i64 %ret 1966} 1967 1968 1969define i16 @selectRR_ugt_i16(i16 %x, i16 %y, i16 %n, i16 %m) { 1970; CHECK-LABEL: selectRR_ugt_i16: 1971; CHECK: # %bb.0: # %entry 1972; CHECK-NEXT: zexth16 a1, a1 1973; CHECK-NEXT: zexth16 a0, a0 1974; CHECK-NEXT: cmphs16 a0, a1 1975; CHECK-NEXT: movf32 a2, a3 1976; CHECK-NEXT: mov16 a0, a2 1977; CHECK-NEXT: rts16 1978; 1979; GENERIC-LABEL: selectRR_ugt_i16: 1980; GENERIC: # %bb.0: # %entry 1981; GENERIC-NEXT: subi16 sp, sp, 12 1982; GENERIC-NEXT: .cfi_def_cfa_offset 12 1983; GENERIC-NEXT: st16.w l2, (sp, 8) # 4-byte Folded Spill 1984; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 1985; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 1986; GENERIC-NEXT: .cfi_offset l2, -4 1987; GENERIC-NEXT: .cfi_offset l1, -8 1988; GENERIC-NEXT: .cfi_offset l0, -12 1989; GENERIC-NEXT: subi16 sp, sp, 4 1990; GENERIC-NEXT: .cfi_def_cfa_offset 16 1991; GENERIC-NEXT: movi16 l0, 0 1992; GENERIC-NEXT: lsli16 l1, l0, 24 1993; GENERIC-NEXT: lsli16 l0, l0, 16 1994; GENERIC-NEXT: or16 l0, l1 1995; GENERIC-NEXT: movi16 l1, 255 1996; GENERIC-NEXT: lsli16 l2, l1, 8 1997; GENERIC-NEXT: or16 l2, l0 1998; GENERIC-NEXT: or16 l2, l1 1999; GENERIC-NEXT: and16 a1, l2 2000; GENERIC-NEXT: and16 l2, a0 2001; GENERIC-NEXT: cmphs16 l2, a1 2002; GENERIC-NEXT: mvcv16 a0 2003; GENERIC-NEXT: btsti16 a0, 0 2004; GENERIC-NEXT: bt16 .LBB50_2 2005; GENERIC-NEXT: # %bb.1: # %entry 2006; GENERIC-NEXT: mov16 a3, a2 2007; GENERIC-NEXT: .LBB50_2: # %entry 2008; GENERIC-NEXT: mov16 a0, a3 2009; GENERIC-NEXT: addi16 sp, sp, 4 2010; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2011; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 2012; GENERIC-NEXT: ld16.w l2, (sp, 8) # 4-byte Folded Reload 2013; GENERIC-NEXT: addi16 sp, sp, 12 2014; GENERIC-NEXT: rts16 2015entry: 2016 %icmp = icmp ugt i16 %y, %x 2017 %ret = select i1 %icmp, i16 %m, i16 %n 2018 ret i16 %ret 2019} 2020 2021define i16 @selectRI_ugt_i16(i16 %x, i16 %n, i16 %m) { 2022; CHECK-LABEL: selectRI_ugt_i16: 2023; CHECK: # %bb.0: # %entry 2024; CHECK-NEXT: zexth16 a0, a0 2025; CHECK-NEXT: movi16 a3, 10 2026; CHECK-NEXT: cmphs16 a3, a0 2027; CHECK-NEXT: movf32 a1, a2 2028; CHECK-NEXT: mov16 a0, a1 2029; CHECK-NEXT: rts16 2030; 2031; GENERIC-LABEL: selectRI_ugt_i16: 2032; GENERIC: # %bb.0: # %entry 2033; GENERIC-NEXT: subi16 sp, sp, 8 2034; GENERIC-NEXT: .cfi_def_cfa_offset 8 2035; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 2036; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 2037; GENERIC-NEXT: .cfi_offset l1, -4 2038; GENERIC-NEXT: .cfi_offset l0, -8 2039; GENERIC-NEXT: subi16 sp, sp, 4 2040; GENERIC-NEXT: .cfi_def_cfa_offset 12 2041; GENERIC-NEXT: movi16 a3, 0 2042; GENERIC-NEXT: lsli16 l0, a3, 24 2043; GENERIC-NEXT: lsli16 a3, a3, 16 2044; GENERIC-NEXT: or16 a3, l0 2045; GENERIC-NEXT: movi16 l0, 255 2046; GENERIC-NEXT: lsli16 l1, l0, 8 2047; GENERIC-NEXT: or16 l1, a3 2048; GENERIC-NEXT: or16 l1, l0 2049; GENERIC-NEXT: and16 l1, a0 2050; GENERIC-NEXT: movi16 a0, 10 2051; GENERIC-NEXT: cmphs16 a0, l1 2052; GENERIC-NEXT: mvcv16 a0 2053; GENERIC-NEXT: btsti16 a0, 0 2054; GENERIC-NEXT: bt16 .LBB51_2 2055; GENERIC-NEXT: # %bb.1: # %entry 2056; GENERIC-NEXT: mov16 a2, a1 2057; GENERIC-NEXT: .LBB51_2: # %entry 2058; GENERIC-NEXT: mov16 a0, a2 2059; GENERIC-NEXT: addi16 sp, sp, 4 2060; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2061; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 2062; GENERIC-NEXT: addi16 sp, sp, 8 2063; GENERIC-NEXT: rts16 2064entry: 2065 %icmp = icmp ugt i16 %x, 10 2066 %ret = select i1 %icmp, i16 %m, i16 %n 2067 ret i16 %ret 2068} 2069 2070define i16 @selectRX_ugt_i16(i16 %x, i16 %n, i16 %m) { 2071; CHECK-LABEL: selectRX_ugt_i16: 2072; CHECK: # %bb.0: # %entry 2073; CHECK-NEXT: zexth16 a0, a0 2074; CHECK-NEXT: movi32 a3, 2033 2075; CHECK-NEXT: cmphs16 a3, a0 2076; CHECK-NEXT: movf32 a1, a2 2077; CHECK-NEXT: mov16 a0, a1 2078; CHECK-NEXT: rts16 2079; 2080; GENERIC-LABEL: selectRX_ugt_i16: 2081; GENERIC: # %bb.0: # %entry 2082; GENERIC-NEXT: subi16 sp, sp, 8 2083; GENERIC-NEXT: .cfi_def_cfa_offset 8 2084; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 2085; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 2086; GENERIC-NEXT: .cfi_offset l1, -4 2087; GENERIC-NEXT: .cfi_offset l0, -8 2088; GENERIC-NEXT: subi16 sp, sp, 4 2089; GENERIC-NEXT: .cfi_def_cfa_offset 12 2090; GENERIC-NEXT: movi16 a3, 0 2091; GENERIC-NEXT: lsli16 l0, a3, 24 2092; GENERIC-NEXT: lsli16 a3, a3, 16 2093; GENERIC-NEXT: or16 a3, l0 2094; GENERIC-NEXT: movi16 l0, 255 2095; GENERIC-NEXT: lsli16 l1, l0, 8 2096; GENERIC-NEXT: or16 l1, a3 2097; GENERIC-NEXT: or16 l1, l0 2098; GENERIC-NEXT: and16 l1, a0 2099; GENERIC-NEXT: movi16 a0, 7 2100; GENERIC-NEXT: lsli16 a0, a0, 8 2101; GENERIC-NEXT: or16 a0, a3 2102; GENERIC-NEXT: movi16 a3, 241 2103; GENERIC-NEXT: or16 a3, a0 2104; GENERIC-NEXT: cmphs16 a3, l1 2105; GENERIC-NEXT: mvcv16 a0 2106; GENERIC-NEXT: btsti16 a0, 0 2107; GENERIC-NEXT: bt16 .LBB52_2 2108; GENERIC-NEXT: # %bb.1: # %entry 2109; GENERIC-NEXT: mov16 a2, a1 2110; GENERIC-NEXT: .LBB52_2: # %entry 2111; GENERIC-NEXT: mov16 a0, a2 2112; GENERIC-NEXT: addi16 sp, sp, 4 2113; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2114; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 2115; GENERIC-NEXT: addi16 sp, sp, 8 2116; GENERIC-NEXT: rts16 2117entry: 2118 %icmp = icmp ugt i16 %x, 47777777 2119 %ret = select i1 %icmp, i16 %m, i16 %n 2120 ret i16 %ret 2121} 2122 2123define i16 @selectC_ugt_i16(i1 %c, i16 %n, i16 %m) { 2124; CHECK-LABEL: selectC_ugt_i16: 2125; CHECK: # %bb.0: # %entry 2126; CHECK-NEXT: btsti16 a0, 0 2127; CHECK-NEXT: movt32 a1, a2 2128; CHECK-NEXT: mov16 a0, a1 2129; CHECK-NEXT: rts16 2130; 2131; GENERIC-LABEL: selectC_ugt_i16: 2132; GENERIC: # %bb.0: # %entry 2133; GENERIC-NEXT: .cfi_def_cfa_offset 0 2134; GENERIC-NEXT: subi16 sp, sp, 4 2135; GENERIC-NEXT: .cfi_def_cfa_offset 4 2136; GENERIC-NEXT: btsti16 a0, 0 2137; GENERIC-NEXT: bt16 .LBB53_2 2138; GENERIC-NEXT: # %bb.1: # %entry 2139; GENERIC-NEXT: mov16 a2, a1 2140; GENERIC-NEXT: .LBB53_2: # %entry 2141; GENERIC-NEXT: mov16 a0, a2 2142; GENERIC-NEXT: addi16 sp, sp, 4 2143; GENERIC-NEXT: rts16 2144entry: 2145 %ret = select i1 %c, i16 %m, i16 %n 2146 ret i16 %ret 2147} 2148 2149 2150define i8 @selectRR_ugt_i8(i8 %x, i8 %y, i8 %n, i8 %m) { 2151; CHECK-LABEL: selectRR_ugt_i8: 2152; CHECK: # %bb.0: # %entry 2153; CHECK-NEXT: zextb16 a1, a1 2154; CHECK-NEXT: zextb16 a0, a0 2155; CHECK-NEXT: cmphs16 a0, a1 2156; CHECK-NEXT: movf32 a2, a3 2157; CHECK-NEXT: mov16 a0, a2 2158; CHECK-NEXT: rts16 2159; 2160; GENERIC-LABEL: selectRR_ugt_i8: 2161; GENERIC: # %bb.0: # %entry 2162; GENERIC-NEXT: subi16 sp, sp, 4 2163; GENERIC-NEXT: .cfi_def_cfa_offset 4 2164; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 2165; GENERIC-NEXT: .cfi_offset l0, -4 2166; GENERIC-NEXT: subi16 sp, sp, 4 2167; GENERIC-NEXT: .cfi_def_cfa_offset 8 2168; GENERIC-NEXT: movi16 l0, 255 2169; GENERIC-NEXT: and16 a1, l0 2170; GENERIC-NEXT: and16 a0, l0 2171; GENERIC-NEXT: cmphs16 a0, a1 2172; GENERIC-NEXT: mvcv16 a0 2173; GENERIC-NEXT: btsti16 a0, 0 2174; GENERIC-NEXT: bt16 .LBB54_2 2175; GENERIC-NEXT: # %bb.1: # %entry 2176; GENERIC-NEXT: mov16 a3, a2 2177; GENERIC-NEXT: .LBB54_2: # %entry 2178; GENERIC-NEXT: mov16 a0, a3 2179; GENERIC-NEXT: addi16 sp, sp, 4 2180; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2181; GENERIC-NEXT: addi16 sp, sp, 4 2182; GENERIC-NEXT: rts16 2183entry: 2184 %icmp = icmp ugt i8 %y, %x 2185 %ret = select i1 %icmp, i8 %m, i8 %n 2186 ret i8 %ret 2187} 2188 2189define i8 @selectRI_ugt_i8(i8 %x, i8 %n, i8 %m) { 2190; CHECK-LABEL: selectRI_ugt_i8: 2191; CHECK: # %bb.0: # %entry 2192; CHECK-NEXT: zextb16 a0, a0 2193; CHECK-NEXT: movi16 a3, 10 2194; CHECK-NEXT: cmphs16 a3, a0 2195; CHECK-NEXT: movf32 a1, a2 2196; CHECK-NEXT: mov16 a0, a1 2197; CHECK-NEXT: rts16 2198; 2199; GENERIC-LABEL: selectRI_ugt_i8: 2200; GENERIC: # %bb.0: # %entry 2201; GENERIC-NEXT: .cfi_def_cfa_offset 0 2202; GENERIC-NEXT: subi16 sp, sp, 4 2203; GENERIC-NEXT: .cfi_def_cfa_offset 4 2204; GENERIC-NEXT: movi16 a3, 255 2205; GENERIC-NEXT: and16 a3, a0 2206; GENERIC-NEXT: movi16 a0, 10 2207; GENERIC-NEXT: cmphs16 a0, a3 2208; GENERIC-NEXT: mvcv16 a0 2209; GENERIC-NEXT: btsti16 a0, 0 2210; GENERIC-NEXT: bt16 .LBB55_2 2211; GENERIC-NEXT: # %bb.1: # %entry 2212; GENERIC-NEXT: mov16 a2, a1 2213; GENERIC-NEXT: .LBB55_2: # %entry 2214; GENERIC-NEXT: mov16 a0, a2 2215; GENERIC-NEXT: addi16 sp, sp, 4 2216; GENERIC-NEXT: rts16 2217entry: 2218 %icmp = icmp ugt i8 %x, 10 2219 %ret = select i1 %icmp, i8 %m, i8 %n 2220 ret i8 %ret 2221} 2222 2223define i8 @selectRX_ugt_i8(i8 %x, i8 %n, i8 %m) { 2224; CHECK-LABEL: selectRX_ugt_i8: 2225; CHECK: # %bb.0: # %entry 2226; CHECK-NEXT: zextb16 a0, a0 2227; CHECK-NEXT: movi16 a3, 241 2228; CHECK-NEXT: cmphs16 a3, a0 2229; CHECK-NEXT: movf32 a1, a2 2230; CHECK-NEXT: mov16 a0, a1 2231; CHECK-NEXT: rts16 2232; 2233; GENERIC-LABEL: selectRX_ugt_i8: 2234; GENERIC: # %bb.0: # %entry 2235; GENERIC-NEXT: .cfi_def_cfa_offset 0 2236; GENERIC-NEXT: subi16 sp, sp, 4 2237; GENERIC-NEXT: .cfi_def_cfa_offset 4 2238; GENERIC-NEXT: movi16 a3, 255 2239; GENERIC-NEXT: and16 a3, a0 2240; GENERIC-NEXT: movi16 a0, 241 2241; GENERIC-NEXT: cmphs16 a0, a3 2242; GENERIC-NEXT: mvcv16 a0 2243; GENERIC-NEXT: btsti16 a0, 0 2244; GENERIC-NEXT: bt16 .LBB56_2 2245; GENERIC-NEXT: # %bb.1: # %entry 2246; GENERIC-NEXT: mov16 a2, a1 2247; GENERIC-NEXT: .LBB56_2: # %entry 2248; GENERIC-NEXT: mov16 a0, a2 2249; GENERIC-NEXT: addi16 sp, sp, 4 2250; GENERIC-NEXT: rts16 2251entry: 2252 %icmp = icmp ugt i8 %x, 47777777 2253 %ret = select i1 %icmp, i8 %m, i8 %n 2254 ret i8 %ret 2255} 2256 2257define i8 @selectC_ugt_i8(i1 %c, i8 %n, i8 %m) { 2258; CHECK-LABEL: selectC_ugt_i8: 2259; CHECK: # %bb.0: # %entry 2260; CHECK-NEXT: btsti16 a0, 0 2261; CHECK-NEXT: movt32 a1, a2 2262; CHECK-NEXT: mov16 a0, a1 2263; CHECK-NEXT: rts16 2264; 2265; GENERIC-LABEL: selectC_ugt_i8: 2266; GENERIC: # %bb.0: # %entry 2267; GENERIC-NEXT: .cfi_def_cfa_offset 0 2268; GENERIC-NEXT: subi16 sp, sp, 4 2269; GENERIC-NEXT: .cfi_def_cfa_offset 4 2270; GENERIC-NEXT: btsti16 a0, 0 2271; GENERIC-NEXT: bt16 .LBB57_2 2272; GENERIC-NEXT: # %bb.1: # %entry 2273; GENERIC-NEXT: mov16 a2, a1 2274; GENERIC-NEXT: .LBB57_2: # %entry 2275; GENERIC-NEXT: mov16 a0, a2 2276; GENERIC-NEXT: addi16 sp, sp, 4 2277; GENERIC-NEXT: rts16 2278entry: 2279 %ret = select i1 %c, i8 %m, i8 %n 2280 ret i8 %ret 2281} 2282 2283 2284define i1 @selectRR_ugt_i1(i1 %x, i1 %y, i1 %n, i1 %m) { 2285; CHECK-LABEL: selectRR_ugt_i1: 2286; CHECK: # %bb.0: # %entry 2287; CHECK-NEXT: btsti16 a0, 0 2288; CHECK-NEXT: movt32 a3, a2 2289; CHECK-NEXT: btsti16 a1, 0 2290; CHECK-NEXT: movt32 a2, a3 2291; CHECK-NEXT: mov16 a0, a2 2292; CHECK-NEXT: rts16 2293; 2294; GENERIC-LABEL: selectRR_ugt_i1: 2295; GENERIC: # %bb.0: # %entry 2296; GENERIC-NEXT: .cfi_def_cfa_offset 0 2297; GENERIC-NEXT: subi16 sp, sp, 4 2298; GENERIC-NEXT: .cfi_def_cfa_offset 4 2299; GENERIC-NEXT: btsti16 a0, 0 2300; GENERIC-NEXT: mov16 a0, a2 2301; GENERIC-NEXT: bf16 .LBB58_3 2302; GENERIC-NEXT: # %bb.1: # %entry 2303; GENERIC-NEXT: btsti16 a1, 0 2304; GENERIC-NEXT: bf16 .LBB58_4 2305; GENERIC-NEXT: .LBB58_2: # %entry 2306; GENERIC-NEXT: addi16 sp, sp, 4 2307; GENERIC-NEXT: rts16 2308; GENERIC-NEXT: .LBB58_3: # %entry 2309; GENERIC-NEXT: mov16 a0, a3 2310; GENERIC-NEXT: btsti16 a1, 0 2311; GENERIC-NEXT: bt16 .LBB58_2 2312; GENERIC-NEXT: .LBB58_4: # %entry 2313; GENERIC-NEXT: mov16 a0, a2 2314; GENERIC-NEXT: addi16 sp, sp, 4 2315; GENERIC-NEXT: rts16 2316entry: 2317 %icmp = icmp ugt i1 %y, %x 2318 %ret = select i1 %icmp, i1 %m, i1 %n 2319 ret i1 %ret 2320} 2321 2322define i1 @selectRI_ugt_i1(i1 %x, i1 %n, i1 %m) { 2323; CHECK-LABEL: selectRI_ugt_i1: 2324; CHECK: # %bb.0: # %entry 2325; CHECK-NEXT: btsti16 a0, 0 2326; CHECK-NEXT: movt32 a1, a2 2327; CHECK-NEXT: mov16 a0, a1 2328; CHECK-NEXT: rts16 2329; 2330; GENERIC-LABEL: selectRI_ugt_i1: 2331; GENERIC: # %bb.0: # %entry 2332; GENERIC-NEXT: .cfi_def_cfa_offset 0 2333; GENERIC-NEXT: subi16 sp, sp, 4 2334; GENERIC-NEXT: .cfi_def_cfa_offset 4 2335; GENERIC-NEXT: btsti16 a0, 0 2336; GENERIC-NEXT: bt16 .LBB59_2 2337; GENERIC-NEXT: # %bb.1: # %entry 2338; GENERIC-NEXT: mov16 a2, a1 2339; GENERIC-NEXT: .LBB59_2: # %entry 2340; GENERIC-NEXT: mov16 a0, a2 2341; GENERIC-NEXT: addi16 sp, sp, 4 2342; GENERIC-NEXT: rts16 2343entry: 2344 %icmp = icmp ugt i1 %x, 10 2345 %ret = select i1 %icmp, i1 %m, i1 %n 2346 ret i1 %ret 2347} 2348 2349define i1 @selectRX_ugt_i1(i1 %x, i1 %n, i1 %m) { 2350; CHECK-LABEL: selectRX_ugt_i1: 2351; CHECK: # %bb.0: # %entry 2352; CHECK-NEXT: mov16 a0, a1 2353; CHECK-NEXT: rts16 2354; 2355; GENERIC-LABEL: selectRX_ugt_i1: 2356; GENERIC: # %bb.0: # %entry 2357; GENERIC-NEXT: .cfi_def_cfa_offset 0 2358; GENERIC-NEXT: subi16 sp, sp, 4 2359; GENERIC-NEXT: .cfi_def_cfa_offset 4 2360; GENERIC-NEXT: mov16 a0, a1 2361; GENERIC-NEXT: addi16 sp, sp, 4 2362; GENERIC-NEXT: rts16 2363entry: 2364 %icmp = icmp ugt i1 %x, 47777777 2365 %ret = select i1 %icmp, i1 %m, i1 %n 2366 ret i1 %ret 2367} 2368 2369define i1 @selectC_ugt_i1(i1 %c, i1 %n, i1 %m) { 2370; CHECK-LABEL: selectC_ugt_i1: 2371; CHECK: # %bb.0: # %entry 2372; CHECK-NEXT: btsti16 a0, 0 2373; CHECK-NEXT: movt32 a1, a2 2374; CHECK-NEXT: mov16 a0, a1 2375; CHECK-NEXT: rts16 2376; 2377; GENERIC-LABEL: selectC_ugt_i1: 2378; GENERIC: # %bb.0: # %entry 2379; GENERIC-NEXT: .cfi_def_cfa_offset 0 2380; GENERIC-NEXT: subi16 sp, sp, 4 2381; GENERIC-NEXT: .cfi_def_cfa_offset 4 2382; GENERIC-NEXT: btsti16 a0, 0 2383; GENERIC-NEXT: bt16 .LBB61_2 2384; GENERIC-NEXT: # %bb.1: # %entry 2385; GENERIC-NEXT: mov16 a2, a1 2386; GENERIC-NEXT: .LBB61_2: # %entry 2387; GENERIC-NEXT: mov16 a0, a2 2388; GENERIC-NEXT: addi16 sp, sp, 4 2389; GENERIC-NEXT: rts16 2390entry: 2391 %ret = select i1 %c, i1 %m, i1 %n 2392 ret i1 %ret 2393} 2394 2395 2396define i32 @selectRR_uge_i32(i32 %x, i32 %y, i32 %n, i32 %m) { 2397; CHECK-LABEL: selectRR_uge_i32: 2398; CHECK: # %bb.0: # %entry 2399; CHECK-NEXT: cmphs16 a1, a0 2400; CHECK-NEXT: movt32 a2, a3 2401; CHECK-NEXT: mov16 a0, a2 2402; CHECK-NEXT: rts16 2403; 2404; GENERIC-LABEL: selectRR_uge_i32: 2405; GENERIC: # %bb.0: # %entry 2406; GENERIC-NEXT: .cfi_def_cfa_offset 0 2407; GENERIC-NEXT: subi16 sp, sp, 4 2408; GENERIC-NEXT: .cfi_def_cfa_offset 4 2409; GENERIC-NEXT: cmphs16 a1, a0 2410; GENERIC-NEXT: mvcv16 a0 2411; GENERIC-NEXT: movi16 a1, 1 2412; GENERIC-NEXT: subu16 a1, a0 2413; GENERIC-NEXT: btsti16 a1, 0 2414; GENERIC-NEXT: bt16 .LBB62_2 2415; GENERIC-NEXT: # %bb.1: # %entry 2416; GENERIC-NEXT: mov16 a3, a2 2417; GENERIC-NEXT: .LBB62_2: # %entry 2418; GENERIC-NEXT: mov16 a0, a3 2419; GENERIC-NEXT: addi16 sp, sp, 4 2420; GENERIC-NEXT: rts16 2421entry: 2422 %icmp = icmp uge i32 %y, %x 2423 %ret = select i1 %icmp, i32 %m, i32 %n 2424 ret i32 %ret 2425} 2426 2427define i32 @selectRI_uge_i32(i32 %x, i32 %n, i32 %m) { 2428; CHECK-LABEL: selectRI_uge_i32: 2429; CHECK: # %bb.0: # %entry 2430; CHECK-NEXT: movi16 a3, 9 2431; CHECK-NEXT: cmphs16 a3, a0 2432; CHECK-NEXT: movf32 a1, a2 2433; CHECK-NEXT: mov16 a0, a1 2434; CHECK-NEXT: rts16 2435; 2436; GENERIC-LABEL: selectRI_uge_i32: 2437; GENERIC: # %bb.0: # %entry 2438; GENERIC-NEXT: .cfi_def_cfa_offset 0 2439; GENERIC-NEXT: subi16 sp, sp, 4 2440; GENERIC-NEXT: .cfi_def_cfa_offset 4 2441; GENERIC-NEXT: movi16 a3, 9 2442; GENERIC-NEXT: cmphs16 a3, a0 2443; GENERIC-NEXT: mvcv16 a0 2444; GENERIC-NEXT: btsti16 a0, 0 2445; GENERIC-NEXT: bt16 .LBB63_2 2446; GENERIC-NEXT: # %bb.1: # %entry 2447; GENERIC-NEXT: mov16 a2, a1 2448; GENERIC-NEXT: .LBB63_2: # %entry 2449; GENERIC-NEXT: mov16 a0, a2 2450; GENERIC-NEXT: addi16 sp, sp, 4 2451; GENERIC-NEXT: rts16 2452entry: 2453 %icmp = icmp uge i32 %x, 10 2454 %ret = select i1 %icmp, i32 %m, i32 %n 2455 ret i32 %ret 2456} 2457 2458define i32 @selectRX_uge_i32(i32 %x, i32 %n, i32 %m) { 2459; CHECK-LABEL: selectRX_uge_i32: 2460; CHECK: # %bb.0: # %entry 2461; CHECK-NEXT: movih32 a3, 729 2462; CHECK-NEXT: ori32 a3, a3, 2032 2463; CHECK-NEXT: cmphs16 a3, a0 2464; CHECK-NEXT: movf32 a1, a2 2465; CHECK-NEXT: mov16 a0, a1 2466; CHECK-NEXT: rts16 2467; 2468; GENERIC-LABEL: selectRX_uge_i32: 2469; GENERIC: # %bb.0: # %entry 2470; GENERIC-NEXT: subi16 sp, sp, 4 2471; GENERIC-NEXT: .cfi_def_cfa_offset 4 2472; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 2473; GENERIC-NEXT: .cfi_offset l0, -4 2474; GENERIC-NEXT: subi16 sp, sp, 4 2475; GENERIC-NEXT: .cfi_def_cfa_offset 8 2476; GENERIC-NEXT: movi16 a3, 2 2477; GENERIC-NEXT: lsli16 a3, a3, 24 2478; GENERIC-NEXT: movi16 l0, 217 2479; GENERIC-NEXT: lsli16 l0, l0, 16 2480; GENERIC-NEXT: or16 l0, a3 2481; GENERIC-NEXT: movi16 a3, 7 2482; GENERIC-NEXT: lsli16 a3, a3, 8 2483; GENERIC-NEXT: or16 a3, l0 2484; GENERIC-NEXT: movi16 l0, 240 2485; GENERIC-NEXT: or16 l0, a3 2486; GENERIC-NEXT: cmphs16 l0, a0 2487; GENERIC-NEXT: mvcv16 a0 2488; GENERIC-NEXT: btsti16 a0, 0 2489; GENERIC-NEXT: bt16 .LBB64_2 2490; GENERIC-NEXT: # %bb.1: # %entry 2491; GENERIC-NEXT: mov16 a2, a1 2492; GENERIC-NEXT: .LBB64_2: # %entry 2493; GENERIC-NEXT: mov16 a0, a2 2494; GENERIC-NEXT: addi16 sp, sp, 4 2495; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2496; GENERIC-NEXT: addi16 sp, sp, 4 2497; GENERIC-NEXT: rts16 2498entry: 2499 %icmp = icmp uge i32 %x, 47777777 2500 %ret = select i1 %icmp, i32 %m, i32 %n 2501 ret i32 %ret 2502} 2503 2504define i32 @selectC_uge_i32(i1 %c, i32 %n, i32 %m) { 2505; CHECK-LABEL: selectC_uge_i32: 2506; CHECK: # %bb.0: # %entry 2507; CHECK-NEXT: btsti16 a0, 0 2508; CHECK-NEXT: movt32 a1, a2 2509; CHECK-NEXT: mov16 a0, a1 2510; CHECK-NEXT: rts16 2511; 2512; GENERIC-LABEL: selectC_uge_i32: 2513; GENERIC: # %bb.0: # %entry 2514; GENERIC-NEXT: .cfi_def_cfa_offset 0 2515; GENERIC-NEXT: subi16 sp, sp, 4 2516; GENERIC-NEXT: .cfi_def_cfa_offset 4 2517; GENERIC-NEXT: btsti16 a0, 0 2518; GENERIC-NEXT: bt16 .LBB65_2 2519; GENERIC-NEXT: # %bb.1: # %entry 2520; GENERIC-NEXT: mov16 a2, a1 2521; GENERIC-NEXT: .LBB65_2: # %entry 2522; GENERIC-NEXT: mov16 a0, a2 2523; GENERIC-NEXT: addi16 sp, sp, 4 2524; GENERIC-NEXT: rts16 2525entry: 2526 %ret = select i1 %c, i32 %m, i32 %n 2527 ret i32 %ret 2528} 2529 2530define i64 @selectRR_uge_i64(i64 %x, i64 %y, i64 %n, i64 %m) { 2531; CHECK-LABEL: selectRR_uge_i64: 2532; CHECK: # %bb.0: # %entry 2533; CHECK-NEXT: .cfi_def_cfa_offset 0 2534; CHECK-NEXT: subi16 sp, sp, 16 2535; CHECK-NEXT: .cfi_def_cfa_offset 16 2536; CHECK-NEXT: cmphs16 a3, a1 2537; CHECK-NEXT: mvc32 t0 2538; CHECK-NEXT: st32.w t0, (sp, 12) 2539; CHECK-NEXT: cmphs16 a2, a0 2540; CHECK-NEXT: mvc32 a0 2541; CHECK-NEXT: st16.w a0, (sp, 4) 2542; CHECK-NEXT: cmpne16 a3, a1 2543; CHECK-NEXT: mvc32 a0 2544; CHECK-NEXT: st16.w a0, (sp, 8) 2545; CHECK-NEXT: ld16.w a0, (sp, 4) 2546; CHECK-NEXT: btsti16 a0, 0 2547; CHECK-NEXT: mvc32 a0 2548; CHECK-NEXT: ld16.w a1, (sp, 12) 2549; CHECK-NEXT: btsti16 a1, 0 2550; CHECK-NEXT: mvc32 a1 2551; CHECK-NEXT: ld16.w a2, (sp, 8) 2552; CHECK-NEXT: btsti16 a2, 0 2553; CHECK-NEXT: movf32 a1, a0 2554; CHECK-NEXT: addi16 a2, sp, 16 2555; CHECK-NEXT: addi16 a0, sp, 24 2556; CHECK-NEXT: btsti16 a1, 0 2557; CHECK-NEXT: movt32 a2, a0 2558; CHECK-NEXT: ld16.w a0, (a2, 0) 2559; CHECK-NEXT: ld16.w a1, (a2, 4) 2560; CHECK-NEXT: addi16 sp, sp, 16 2561; CHECK-NEXT: rts16 2562; 2563; GENERIC-LABEL: selectRR_uge_i64: 2564; GENERIC: # %bb.0: # %entry 2565; GENERIC-NEXT: subi16 sp, sp, 8 2566; GENERIC-NEXT: .cfi_def_cfa_offset 8 2567; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 2568; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 2569; GENERIC-NEXT: .cfi_offset l1, -4 2570; GENERIC-NEXT: .cfi_offset l0, -8 2571; GENERIC-NEXT: subi16 sp, sp, 4 2572; GENERIC-NEXT: .cfi_def_cfa_offset 12 2573; GENERIC-NEXT: cmphs16 a3, a1 2574; GENERIC-NEXT: mvcv16 l1 2575; GENERIC-NEXT: movi16 l0, 1 2576; GENERIC-NEXT: cmphs16 a2, a0 2577; GENERIC-NEXT: mvcv16 a0 2578; GENERIC-NEXT: cmpne16 a3, a1 2579; GENERIC-NEXT: mvcv16 a1 2580; GENERIC-NEXT: btsti16 a1, 0 2581; GENERIC-NEXT: bt16 .LBB66_3 2582; GENERIC-NEXT: # %bb.1: # %entry 2583; GENERIC-NEXT: subu16 l0, l1 2584; GENERIC-NEXT: btsti16 l0, 0 2585; GENERIC-NEXT: bf16 .LBB66_4 2586; GENERIC-NEXT: .LBB66_2: 2587; GENERIC-NEXT: movi16 a0, 20 2588; GENERIC-NEXT: br32 .LBB66_5 2589; GENERIC-NEXT: .LBB66_3: 2590; GENERIC-NEXT: subu16 l0, a0 2591; GENERIC-NEXT: btsti16 l0, 0 2592; GENERIC-NEXT: bt16 .LBB66_2 2593; GENERIC-NEXT: .LBB66_4: # %entry 2594; GENERIC-NEXT: movi16 a0, 12 2595; GENERIC-NEXT: .LBB66_5: # %entry 2596; GENERIC-NEXT: addu16 a0, sp 2597; GENERIC-NEXT: mov16 a1, a0 2598; GENERIC-NEXT: ld16.w a0, (a0, 0) 2599; GENERIC-NEXT: ld16.w a1, (a1, 4) 2600; GENERIC-NEXT: addi16 sp, sp, 4 2601; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2602; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 2603; GENERIC-NEXT: addi16 sp, sp, 8 2604; GENERIC-NEXT: rts16 2605entry: 2606 %icmp = icmp uge i64 %y, %x 2607 %ret = select i1 %icmp, i64 %m, i64 %n 2608 ret i64 %ret 2609} 2610 2611define i64 @selectRI_uge_i64(i64 %x, i64 %n, i64 %m) { 2612; CHECK-LABEL: selectRI_uge_i64: 2613; CHECK: # %bb.0: # %entry 2614; CHECK-NEXT: subi16 sp, sp, 4 2615; CHECK-NEXT: .cfi_def_cfa_offset 4 2616; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 2617; CHECK-NEXT: .cfi_offset l0, -4 2618; CHECK-NEXT: .cfi_def_cfa_offset 4 2619; CHECK-NEXT: ld32.w t0, (sp, 8) 2620; CHECK-NEXT: ld32.w t1, (sp, 4) 2621; CHECK-NEXT: movi16 l0, 9 2622; CHECK-NEXT: cmphs16 l0, a0 2623; CHECK-NEXT: mvcv16 a0 2624; CHECK-NEXT: cmpnei16 a1, 0 2625; CHECK-NEXT: mvc32 a1 2626; CHECK-NEXT: movf32 a1, a0 2627; CHECK-NEXT: btsti16 a1, 0 2628; CHECK-NEXT: movt32 a2, t1 2629; CHECK-NEXT: movt32 a3, t0 2630; CHECK-NEXT: mov16 a0, a2 2631; CHECK-NEXT: mov16 a1, a3 2632; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2633; CHECK-NEXT: addi16 sp, sp, 4 2634; CHECK-NEXT: rts16 2635; 2636; GENERIC-LABEL: selectRI_uge_i64: 2637; GENERIC: # %bb.0: # %entry 2638; GENERIC-NEXT: subi16 sp, sp, 4 2639; GENERIC-NEXT: .cfi_def_cfa_offset 4 2640; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 2641; GENERIC-NEXT: .cfi_offset l0, -4 2642; GENERIC-NEXT: subi16 sp, sp, 4 2643; GENERIC-NEXT: .cfi_def_cfa_offset 8 2644; GENERIC-NEXT: cmpnei16 a1, 0 2645; GENERIC-NEXT: mvcv16 a1 2646; GENERIC-NEXT: movi16 l0, 9 2647; GENERIC-NEXT: cmphs16 l0, a0 2648; GENERIC-NEXT: mvcv16 a0 2649; GENERIC-NEXT: btsti16 a1, 0 2650; GENERIC-NEXT: bf16 .LBB67_5 2651; GENERIC-NEXT: # %bb.1: # %entry 2652; GENERIC-NEXT: btsti16 a0, 0 2653; GENERIC-NEXT: bt16 .LBB67_6 2654; GENERIC-NEXT: .LBB67_2: # %entry 2655; GENERIC-NEXT: btsti16 a0, 0 2656; GENERIC-NEXT: bf16 .LBB67_4 2657; GENERIC-NEXT: .LBB67_3: 2658; GENERIC-NEXT: ld16.w a3, (sp, 12) 2659; GENERIC-NEXT: .LBB67_4: # %entry 2660; GENERIC-NEXT: mov16 a0, a2 2661; GENERIC-NEXT: mov16 a1, a3 2662; GENERIC-NEXT: addi16 sp, sp, 4 2663; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2664; GENERIC-NEXT: addi16 sp, sp, 4 2665; GENERIC-NEXT: rts16 2666; GENERIC-NEXT: .LBB67_5: # %entry 2667; GENERIC-NEXT: movi16 a0, 1 2668; GENERIC-NEXT: subu16 a0, a1 2669; GENERIC-NEXT: btsti16 a0, 0 2670; GENERIC-NEXT: bf16 .LBB67_2 2671; GENERIC-NEXT: .LBB67_6: 2672; GENERIC-NEXT: ld16.w a2, (sp, 8) 2673; GENERIC-NEXT: btsti16 a0, 0 2674; GENERIC-NEXT: bt16 .LBB67_3 2675; GENERIC-NEXT: br32 .LBB67_4 2676entry: 2677 %icmp = icmp uge i64 %x, 10 2678 %ret = select i1 %icmp, i64 %m, i64 %n 2679 ret i64 %ret 2680} 2681 2682define i64 @selectRX_uge_i64(i64 %x, i64 %n, i64 %m) { 2683; CHECK-LABEL: selectRX_uge_i64: 2684; CHECK: # %bb.0: # %entry 2685; CHECK-NEXT: subi16 sp, sp, 4 2686; CHECK-NEXT: .cfi_def_cfa_offset 4 2687; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 2688; CHECK-NEXT: .cfi_offset l0, -4 2689; CHECK-NEXT: .cfi_def_cfa_offset 4 2690; CHECK-NEXT: ld32.w t0, (sp, 8) 2691; CHECK-NEXT: ld32.w t1, (sp, 4) 2692; CHECK-NEXT: movih32 l0, 729 2693; CHECK-NEXT: ori32 l0, l0, 2032 2694; CHECK-NEXT: cmphs16 l0, a0 2695; CHECK-NEXT: mvcv16 a0 2696; CHECK-NEXT: cmpnei16 a1, 0 2697; CHECK-NEXT: mvc32 a1 2698; CHECK-NEXT: movf32 a1, a0 2699; CHECK-NEXT: btsti16 a1, 0 2700; CHECK-NEXT: movt32 a2, t1 2701; CHECK-NEXT: movt32 a3, t0 2702; CHECK-NEXT: mov16 a0, a2 2703; CHECK-NEXT: mov16 a1, a3 2704; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2705; CHECK-NEXT: addi16 sp, sp, 4 2706; CHECK-NEXT: rts16 2707; 2708; GENERIC-LABEL: selectRX_uge_i64: 2709; GENERIC: # %bb.0: # %entry 2710; GENERIC-NEXT: subi16 sp, sp, 8 2711; GENERIC-NEXT: .cfi_def_cfa_offset 8 2712; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 2713; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 2714; GENERIC-NEXT: .cfi_offset l1, -4 2715; GENERIC-NEXT: .cfi_offset l0, -8 2716; GENERIC-NEXT: subi16 sp, sp, 4 2717; GENERIC-NEXT: .cfi_def_cfa_offset 12 2718; GENERIC-NEXT: cmpnei16 a1, 0 2719; GENERIC-NEXT: mvcv16 a1 2720; GENERIC-NEXT: movi16 l0, 2 2721; GENERIC-NEXT: lsli16 l0, l0, 24 2722; GENERIC-NEXT: movi16 l1, 217 2723; GENERIC-NEXT: lsli16 l1, l1, 16 2724; GENERIC-NEXT: or16 l1, l0 2725; GENERIC-NEXT: movi16 l0, 7 2726; GENERIC-NEXT: lsli16 l0, l0, 8 2727; GENERIC-NEXT: or16 l0, l1 2728; GENERIC-NEXT: movi16 l1, 240 2729; GENERIC-NEXT: or16 l1, l0 2730; GENERIC-NEXT: cmphs16 l1, a0 2731; GENERIC-NEXT: mvcv16 a0 2732; GENERIC-NEXT: btsti16 a1, 0 2733; GENERIC-NEXT: bf16 .LBB68_5 2734; GENERIC-NEXT: # %bb.1: # %entry 2735; GENERIC-NEXT: btsti16 a0, 0 2736; GENERIC-NEXT: bt16 .LBB68_6 2737; GENERIC-NEXT: .LBB68_2: # %entry 2738; GENERIC-NEXT: btsti16 a0, 0 2739; GENERIC-NEXT: bf16 .LBB68_4 2740; GENERIC-NEXT: .LBB68_3: 2741; GENERIC-NEXT: ld16.w a3, (sp, 16) 2742; GENERIC-NEXT: .LBB68_4: # %entry 2743; GENERIC-NEXT: mov16 a0, a2 2744; GENERIC-NEXT: mov16 a1, a3 2745; GENERIC-NEXT: addi16 sp, sp, 4 2746; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2747; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 2748; GENERIC-NEXT: addi16 sp, sp, 8 2749; GENERIC-NEXT: rts16 2750; GENERIC-NEXT: .LBB68_5: # %entry 2751; GENERIC-NEXT: movi16 a0, 1 2752; GENERIC-NEXT: subu16 a0, a1 2753; GENERIC-NEXT: btsti16 a0, 0 2754; GENERIC-NEXT: bf16 .LBB68_2 2755; GENERIC-NEXT: .LBB68_6: 2756; GENERIC-NEXT: ld16.w a2, (sp, 12) 2757; GENERIC-NEXT: btsti16 a0, 0 2758; GENERIC-NEXT: bt16 .LBB68_3 2759; GENERIC-NEXT: br32 .LBB68_4 2760entry: 2761 %icmp = icmp uge i64 %x, 47777777 2762 %ret = select i1 %icmp, i64 %m, i64 %n 2763 ret i64 %ret 2764} 2765 2766define i64 @selectC_uge_i64(i1 %c, i64 %n, i64 %m) { 2767; CHECK-LABEL: selectC_uge_i64: 2768; CHECK: # %bb.0: # %entry 2769; CHECK-NEXT: ld32.w t0, (sp, 0) 2770; CHECK-NEXT: btsti16 a0, 0 2771; CHECK-NEXT: movt32 a1, a3 2772; CHECK-NEXT: movt32 a2, t0 2773; CHECK-NEXT: mov16 a0, a1 2774; CHECK-NEXT: mov16 a1, a2 2775; CHECK-NEXT: rts16 2776; 2777; GENERIC-LABEL: selectC_uge_i64: 2778; GENERIC: # %bb.0: # %entry 2779; GENERIC-NEXT: .cfi_def_cfa_offset 0 2780; GENERIC-NEXT: subi16 sp, sp, 4 2781; GENERIC-NEXT: .cfi_def_cfa_offset 4 2782; GENERIC-NEXT: btsti16 a0, 0 2783; GENERIC-NEXT: bt16 .LBB69_2 2784; GENERIC-NEXT: # %bb.1: # %entry 2785; GENERIC-NEXT: mov16 a3, a1 2786; GENERIC-NEXT: .LBB69_2: # %entry 2787; GENERIC-NEXT: btsti16 a0, 0 2788; GENERIC-NEXT: bf16 .LBB69_4 2789; GENERIC-NEXT: # %bb.3: 2790; GENERIC-NEXT: ld16.w a2, (sp, 4) 2791; GENERIC-NEXT: .LBB69_4: # %entry 2792; GENERIC-NEXT: mov16 a0, a3 2793; GENERIC-NEXT: mov16 a1, a2 2794; GENERIC-NEXT: addi16 sp, sp, 4 2795; GENERIC-NEXT: rts16 2796entry: 2797 %ret = select i1 %c, i64 %m, i64 %n 2798 ret i64 %ret 2799} 2800 2801 2802define i16 @selectRR_uge_i16(i16 %x, i16 %y, i16 %n, i16 %m) { 2803; CHECK-LABEL: selectRR_uge_i16: 2804; CHECK: # %bb.0: # %entry 2805; CHECK-NEXT: zexth16 a0, a0 2806; CHECK-NEXT: zexth16 a1, a1 2807; CHECK-NEXT: cmphs16 a1, a0 2808; CHECK-NEXT: movt32 a2, a3 2809; CHECK-NEXT: mov16 a0, a2 2810; CHECK-NEXT: rts16 2811; 2812; GENERIC-LABEL: selectRR_uge_i16: 2813; GENERIC: # %bb.0: # %entry 2814; GENERIC-NEXT: subi16 sp, sp, 12 2815; GENERIC-NEXT: .cfi_def_cfa_offset 12 2816; GENERIC-NEXT: st16.w l2, (sp, 8) # 4-byte Folded Spill 2817; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 2818; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 2819; GENERIC-NEXT: .cfi_offset l2, -4 2820; GENERIC-NEXT: .cfi_offset l1, -8 2821; GENERIC-NEXT: .cfi_offset l0, -12 2822; GENERIC-NEXT: subi16 sp, sp, 4 2823; GENERIC-NEXT: .cfi_def_cfa_offset 16 2824; GENERIC-NEXT: movi16 l0, 0 2825; GENERIC-NEXT: lsli16 l1, l0, 24 2826; GENERIC-NEXT: lsli16 l0, l0, 16 2827; GENERIC-NEXT: or16 l0, l1 2828; GENERIC-NEXT: movi16 l1, 255 2829; GENERIC-NEXT: lsli16 l2, l1, 8 2830; GENERIC-NEXT: or16 l2, l0 2831; GENERIC-NEXT: or16 l2, l1 2832; GENERIC-NEXT: and16 a0, l2 2833; GENERIC-NEXT: and16 l2, a1 2834; GENERIC-NEXT: cmphs16 l2, a0 2835; GENERIC-NEXT: mvcv16 a0 2836; GENERIC-NEXT: movi16 a1, 1 2837; GENERIC-NEXT: subu16 a1, a0 2838; GENERIC-NEXT: btsti16 a1, 0 2839; GENERIC-NEXT: bt16 .LBB70_2 2840; GENERIC-NEXT: # %bb.1: # %entry 2841; GENERIC-NEXT: mov16 a3, a2 2842; GENERIC-NEXT: .LBB70_2: # %entry 2843; GENERIC-NEXT: mov16 a0, a3 2844; GENERIC-NEXT: addi16 sp, sp, 4 2845; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2846; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 2847; GENERIC-NEXT: ld16.w l2, (sp, 8) # 4-byte Folded Reload 2848; GENERIC-NEXT: addi16 sp, sp, 12 2849; GENERIC-NEXT: rts16 2850entry: 2851 %icmp = icmp uge i16 %y, %x 2852 %ret = select i1 %icmp, i16 %m, i16 %n 2853 ret i16 %ret 2854} 2855 2856define i16 @selectRI_uge_i16(i16 %x, i16 %n, i16 %m) { 2857; CHECK-LABEL: selectRI_uge_i16: 2858; CHECK: # %bb.0: # %entry 2859; CHECK-NEXT: zexth16 a0, a0 2860; CHECK-NEXT: movi16 a3, 9 2861; CHECK-NEXT: cmphs16 a3, a0 2862; CHECK-NEXT: movf32 a1, a2 2863; CHECK-NEXT: mov16 a0, a1 2864; CHECK-NEXT: rts16 2865; 2866; GENERIC-LABEL: selectRI_uge_i16: 2867; GENERIC: # %bb.0: # %entry 2868; GENERIC-NEXT: subi16 sp, sp, 8 2869; GENERIC-NEXT: .cfi_def_cfa_offset 8 2870; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 2871; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 2872; GENERIC-NEXT: .cfi_offset l1, -4 2873; GENERIC-NEXT: .cfi_offset l0, -8 2874; GENERIC-NEXT: subi16 sp, sp, 4 2875; GENERIC-NEXT: .cfi_def_cfa_offset 12 2876; GENERIC-NEXT: movi16 a3, 0 2877; GENERIC-NEXT: lsli16 l0, a3, 24 2878; GENERIC-NEXT: lsli16 a3, a3, 16 2879; GENERIC-NEXT: or16 a3, l0 2880; GENERIC-NEXT: movi16 l0, 255 2881; GENERIC-NEXT: lsli16 l1, l0, 8 2882; GENERIC-NEXT: or16 l1, a3 2883; GENERIC-NEXT: or16 l1, l0 2884; GENERIC-NEXT: and16 l1, a0 2885; GENERIC-NEXT: movi16 a0, 9 2886; GENERIC-NEXT: cmphs16 a0, l1 2887; GENERIC-NEXT: mvcv16 a0 2888; GENERIC-NEXT: btsti16 a0, 0 2889; GENERIC-NEXT: bt16 .LBB71_2 2890; GENERIC-NEXT: # %bb.1: # %entry 2891; GENERIC-NEXT: mov16 a2, a1 2892; GENERIC-NEXT: .LBB71_2: # %entry 2893; GENERIC-NEXT: mov16 a0, a2 2894; GENERIC-NEXT: addi16 sp, sp, 4 2895; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2896; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 2897; GENERIC-NEXT: addi16 sp, sp, 8 2898; GENERIC-NEXT: rts16 2899entry: 2900 %icmp = icmp uge i16 %x, 10 2901 %ret = select i1 %icmp, i16 %m, i16 %n 2902 ret i16 %ret 2903} 2904 2905define i16 @selectRX_uge_i16(i16 %x, i16 %n, i16 %m) { 2906; CHECK-LABEL: selectRX_uge_i16: 2907; CHECK: # %bb.0: # %entry 2908; CHECK-NEXT: zexth16 a0, a0 2909; CHECK-NEXT: movi32 a3, 2032 2910; CHECK-NEXT: cmphs16 a3, a0 2911; CHECK-NEXT: movf32 a1, a2 2912; CHECK-NEXT: mov16 a0, a1 2913; CHECK-NEXT: rts16 2914; 2915; GENERIC-LABEL: selectRX_uge_i16: 2916; GENERIC: # %bb.0: # %entry 2917; GENERIC-NEXT: subi16 sp, sp, 8 2918; GENERIC-NEXT: .cfi_def_cfa_offset 8 2919; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 2920; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 2921; GENERIC-NEXT: .cfi_offset l1, -4 2922; GENERIC-NEXT: .cfi_offset l0, -8 2923; GENERIC-NEXT: subi16 sp, sp, 4 2924; GENERIC-NEXT: .cfi_def_cfa_offset 12 2925; GENERIC-NEXT: movi16 a3, 0 2926; GENERIC-NEXT: lsli16 l0, a3, 24 2927; GENERIC-NEXT: lsli16 a3, a3, 16 2928; GENERIC-NEXT: or16 a3, l0 2929; GENERIC-NEXT: movi16 l0, 255 2930; GENERIC-NEXT: lsli16 l1, l0, 8 2931; GENERIC-NEXT: or16 l1, a3 2932; GENERIC-NEXT: or16 l1, l0 2933; GENERIC-NEXT: and16 l1, a0 2934; GENERIC-NEXT: movi16 a0, 7 2935; GENERIC-NEXT: lsli16 a0, a0, 8 2936; GENERIC-NEXT: or16 a0, a3 2937; GENERIC-NEXT: movi16 a3, 240 2938; GENERIC-NEXT: or16 a3, a0 2939; GENERIC-NEXT: cmphs16 a3, l1 2940; GENERIC-NEXT: mvcv16 a0 2941; GENERIC-NEXT: btsti16 a0, 0 2942; GENERIC-NEXT: bt16 .LBB72_2 2943; GENERIC-NEXT: # %bb.1: # %entry 2944; GENERIC-NEXT: mov16 a2, a1 2945; GENERIC-NEXT: .LBB72_2: # %entry 2946; GENERIC-NEXT: mov16 a0, a2 2947; GENERIC-NEXT: addi16 sp, sp, 4 2948; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 2949; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 2950; GENERIC-NEXT: addi16 sp, sp, 8 2951; GENERIC-NEXT: rts16 2952entry: 2953 %icmp = icmp uge i16 %x, 47777777 2954 %ret = select i1 %icmp, i16 %m, i16 %n 2955 ret i16 %ret 2956} 2957 2958define i16 @selectC_uge_i16(i1 %c, i16 %n, i16 %m) { 2959; CHECK-LABEL: selectC_uge_i16: 2960; CHECK: # %bb.0: # %entry 2961; CHECK-NEXT: btsti16 a0, 0 2962; CHECK-NEXT: movt32 a1, a2 2963; CHECK-NEXT: mov16 a0, a1 2964; CHECK-NEXT: rts16 2965; 2966; GENERIC-LABEL: selectC_uge_i16: 2967; GENERIC: # %bb.0: # %entry 2968; GENERIC-NEXT: .cfi_def_cfa_offset 0 2969; GENERIC-NEXT: subi16 sp, sp, 4 2970; GENERIC-NEXT: .cfi_def_cfa_offset 4 2971; GENERIC-NEXT: btsti16 a0, 0 2972; GENERIC-NEXT: bt16 .LBB73_2 2973; GENERIC-NEXT: # %bb.1: # %entry 2974; GENERIC-NEXT: mov16 a2, a1 2975; GENERIC-NEXT: .LBB73_2: # %entry 2976; GENERIC-NEXT: mov16 a0, a2 2977; GENERIC-NEXT: addi16 sp, sp, 4 2978; GENERIC-NEXT: rts16 2979entry: 2980 %ret = select i1 %c, i16 %m, i16 %n 2981 ret i16 %ret 2982} 2983 2984 2985define i8 @selectRR_uge_i8(i8 %x, i8 %y, i8 %n, i8 %m) { 2986; CHECK-LABEL: selectRR_uge_i8: 2987; CHECK: # %bb.0: # %entry 2988; CHECK-NEXT: zextb16 a0, a0 2989; CHECK-NEXT: zextb16 a1, a1 2990; CHECK-NEXT: cmphs16 a1, a0 2991; CHECK-NEXT: movt32 a2, a3 2992; CHECK-NEXT: mov16 a0, a2 2993; CHECK-NEXT: rts16 2994; 2995; GENERIC-LABEL: selectRR_uge_i8: 2996; GENERIC: # %bb.0: # %entry 2997; GENERIC-NEXT: subi16 sp, sp, 4 2998; GENERIC-NEXT: .cfi_def_cfa_offset 4 2999; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 3000; GENERIC-NEXT: .cfi_offset l0, -4 3001; GENERIC-NEXT: subi16 sp, sp, 4 3002; GENERIC-NEXT: .cfi_def_cfa_offset 8 3003; GENERIC-NEXT: movi16 l0, 255 3004; GENERIC-NEXT: and16 a0, l0 3005; GENERIC-NEXT: and16 a1, l0 3006; GENERIC-NEXT: cmphs16 a1, a0 3007; GENERIC-NEXT: mvcv16 a0 3008; GENERIC-NEXT: movi16 a1, 1 3009; GENERIC-NEXT: subu16 a1, a0 3010; GENERIC-NEXT: btsti16 a1, 0 3011; GENERIC-NEXT: bt16 .LBB74_2 3012; GENERIC-NEXT: # %bb.1: # %entry 3013; GENERIC-NEXT: mov16 a3, a2 3014; GENERIC-NEXT: .LBB74_2: # %entry 3015; GENERIC-NEXT: mov16 a0, a3 3016; GENERIC-NEXT: addi16 sp, sp, 4 3017; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 3018; GENERIC-NEXT: addi16 sp, sp, 4 3019; GENERIC-NEXT: rts16 3020entry: 3021 %icmp = icmp uge i8 %y, %x 3022 %ret = select i1 %icmp, i8 %m, i8 %n 3023 ret i8 %ret 3024} 3025 3026define i8 @selectRI_uge_i8(i8 %x, i8 %n, i8 %m) { 3027; CHECK-LABEL: selectRI_uge_i8: 3028; CHECK: # %bb.0: # %entry 3029; CHECK-NEXT: zextb16 a0, a0 3030; CHECK-NEXT: movi16 a3, 9 3031; CHECK-NEXT: cmphs16 a3, a0 3032; CHECK-NEXT: movf32 a1, a2 3033; CHECK-NEXT: mov16 a0, a1 3034; CHECK-NEXT: rts16 3035; 3036; GENERIC-LABEL: selectRI_uge_i8: 3037; GENERIC: # %bb.0: # %entry 3038; GENERIC-NEXT: .cfi_def_cfa_offset 0 3039; GENERIC-NEXT: subi16 sp, sp, 4 3040; GENERIC-NEXT: .cfi_def_cfa_offset 4 3041; GENERIC-NEXT: movi16 a3, 255 3042; GENERIC-NEXT: and16 a3, a0 3043; GENERIC-NEXT: movi16 a0, 9 3044; GENERIC-NEXT: cmphs16 a0, a3 3045; GENERIC-NEXT: mvcv16 a0 3046; GENERIC-NEXT: btsti16 a0, 0 3047; GENERIC-NEXT: bt16 .LBB75_2 3048; GENERIC-NEXT: # %bb.1: # %entry 3049; GENERIC-NEXT: mov16 a2, a1 3050; GENERIC-NEXT: .LBB75_2: # %entry 3051; GENERIC-NEXT: mov16 a0, a2 3052; GENERIC-NEXT: addi16 sp, sp, 4 3053; GENERIC-NEXT: rts16 3054entry: 3055 %icmp = icmp uge i8 %x, 10 3056 %ret = select i1 %icmp, i8 %m, i8 %n 3057 ret i8 %ret 3058} 3059 3060define i8 @selectRX_uge_i8(i8 %x, i8 %n, i8 %m) { 3061; CHECK-LABEL: selectRX_uge_i8: 3062; CHECK: # %bb.0: # %entry 3063; CHECK-NEXT: zextb16 a0, a0 3064; CHECK-NEXT: movi16 a3, 240 3065; CHECK-NEXT: cmphs16 a3, a0 3066; CHECK-NEXT: movf32 a1, a2 3067; CHECK-NEXT: mov16 a0, a1 3068; CHECK-NEXT: rts16 3069; 3070; GENERIC-LABEL: selectRX_uge_i8: 3071; GENERIC: # %bb.0: # %entry 3072; GENERIC-NEXT: .cfi_def_cfa_offset 0 3073; GENERIC-NEXT: subi16 sp, sp, 4 3074; GENERIC-NEXT: .cfi_def_cfa_offset 4 3075; GENERIC-NEXT: movi16 a3, 255 3076; GENERIC-NEXT: and16 a3, a0 3077; GENERIC-NEXT: movi16 a0, 240 3078; GENERIC-NEXT: cmphs16 a0, a3 3079; GENERIC-NEXT: mvcv16 a0 3080; GENERIC-NEXT: btsti16 a0, 0 3081; GENERIC-NEXT: bt16 .LBB76_2 3082; GENERIC-NEXT: # %bb.1: # %entry 3083; GENERIC-NEXT: mov16 a2, a1 3084; GENERIC-NEXT: .LBB76_2: # %entry 3085; GENERIC-NEXT: mov16 a0, a2 3086; GENERIC-NEXT: addi16 sp, sp, 4 3087; GENERIC-NEXT: rts16 3088entry: 3089 %icmp = icmp uge i8 %x, 47777777 3090 %ret = select i1 %icmp, i8 %m, i8 %n 3091 ret i8 %ret 3092} 3093 3094define i8 @selectC_uge_i8(i1 %c, i8 %n, i8 %m) { 3095; CHECK-LABEL: selectC_uge_i8: 3096; CHECK: # %bb.0: # %entry 3097; CHECK-NEXT: btsti16 a0, 0 3098; CHECK-NEXT: movt32 a1, a2 3099; CHECK-NEXT: mov16 a0, a1 3100; CHECK-NEXT: rts16 3101; 3102; GENERIC-LABEL: selectC_uge_i8: 3103; GENERIC: # %bb.0: # %entry 3104; GENERIC-NEXT: .cfi_def_cfa_offset 0 3105; GENERIC-NEXT: subi16 sp, sp, 4 3106; GENERIC-NEXT: .cfi_def_cfa_offset 4 3107; GENERIC-NEXT: btsti16 a0, 0 3108; GENERIC-NEXT: bt16 .LBB77_2 3109; GENERIC-NEXT: # %bb.1: # %entry 3110; GENERIC-NEXT: mov16 a2, a1 3111; GENERIC-NEXT: .LBB77_2: # %entry 3112; GENERIC-NEXT: mov16 a0, a2 3113; GENERIC-NEXT: addi16 sp, sp, 4 3114; GENERIC-NEXT: rts16 3115entry: 3116 %ret = select i1 %c, i8 %m, i8 %n 3117 ret i8 %ret 3118} 3119 3120 3121define i1 @selectRR_uge_i1(i1 %x, i1 %y, i1 %n, i1 %m) { 3122; CHECK-LABEL: selectRR_uge_i1: 3123; CHECK: # %bb.0: # %entry 3124; CHECK-NEXT: btsti16 a0, 0 3125; CHECK-NEXT: mov16 a0, a3 3126; CHECK-NEXT: movt32 a0, a2 3127; CHECK-NEXT: btsti16 a1, 0 3128; CHECK-NEXT: movt32 a0, a3 3129; CHECK-NEXT: rts16 3130; 3131; GENERIC-LABEL: selectRR_uge_i1: 3132; GENERIC: # %bb.0: # %entry 3133; GENERIC-NEXT: .cfi_def_cfa_offset 0 3134; GENERIC-NEXT: subi16 sp, sp, 4 3135; GENERIC-NEXT: .cfi_def_cfa_offset 4 3136; GENERIC-NEXT: btsti16 a0, 0 3137; GENERIC-NEXT: bt16 .LBB78_2 3138; GENERIC-NEXT: # %bb.1: # %entry 3139; GENERIC-NEXT: mov16 a2, a3 3140; GENERIC-NEXT: .LBB78_2: # %entry 3141; GENERIC-NEXT: btsti16 a1, 0 3142; GENERIC-NEXT: bt16 .LBB78_4 3143; GENERIC-NEXT: # %bb.3: # %entry 3144; GENERIC-NEXT: mov16 a3, a2 3145; GENERIC-NEXT: .LBB78_4: # %entry 3146; GENERIC-NEXT: mov16 a0, a3 3147; GENERIC-NEXT: addi16 sp, sp, 4 3148; GENERIC-NEXT: rts16 3149entry: 3150 %icmp = icmp uge i1 %y, %x 3151 %ret = select i1 %icmp, i1 %m, i1 %n 3152 ret i1 %ret 3153} 3154 3155define i1 @selectRI_uge_i1(i1 %x, i1 %n, i1 %m) { 3156; CHECK-LABEL: selectRI_uge_i1: 3157; CHECK: # %bb.0: # %entry 3158; CHECK-NEXT: mov16 a0, a2 3159; CHECK-NEXT: rts16 3160; 3161; GENERIC-LABEL: selectRI_uge_i1: 3162; GENERIC: # %bb.0: # %entry 3163; GENERIC-NEXT: .cfi_def_cfa_offset 0 3164; GENERIC-NEXT: subi16 sp, sp, 4 3165; GENERIC-NEXT: .cfi_def_cfa_offset 4 3166; GENERIC-NEXT: mov16 a0, a2 3167; GENERIC-NEXT: addi16 sp, sp, 4 3168; GENERIC-NEXT: rts16 3169entry: 3170 %icmp = icmp uge i1 %x, 10 3171 %ret = select i1 %icmp, i1 %m, i1 %n 3172 ret i1 %ret 3173} 3174 3175define i1 @selectRX_uge_i1(i1 %x, i1 %n, i1 %m) { 3176; CHECK-LABEL: selectRX_uge_i1: 3177; CHECK: # %bb.0: # %entry 3178; CHECK-NEXT: btsti16 a0, 0 3179; CHECK-NEXT: movt32 a1, a2 3180; CHECK-NEXT: mov16 a0, a1 3181; CHECK-NEXT: rts16 3182; 3183; GENERIC-LABEL: selectRX_uge_i1: 3184; GENERIC: # %bb.0: # %entry 3185; GENERIC-NEXT: .cfi_def_cfa_offset 0 3186; GENERIC-NEXT: subi16 sp, sp, 4 3187; GENERIC-NEXT: .cfi_def_cfa_offset 4 3188; GENERIC-NEXT: btsti16 a0, 0 3189; GENERIC-NEXT: bt16 .LBB80_2 3190; GENERIC-NEXT: # %bb.1: # %entry 3191; GENERIC-NEXT: mov16 a2, a1 3192; GENERIC-NEXT: .LBB80_2: # %entry 3193; GENERIC-NEXT: mov16 a0, a2 3194; GENERIC-NEXT: addi16 sp, sp, 4 3195; GENERIC-NEXT: rts16 3196entry: 3197 %icmp = icmp uge i1 %x, 47777777 3198 %ret = select i1 %icmp, i1 %m, i1 %n 3199 ret i1 %ret 3200} 3201 3202define i1 @selectC_uge_i1(i1 %c, i1 %n, i1 %m) { 3203; CHECK-LABEL: selectC_uge_i1: 3204; CHECK: # %bb.0: # %entry 3205; CHECK-NEXT: btsti16 a0, 0 3206; CHECK-NEXT: movt32 a1, a2 3207; CHECK-NEXT: mov16 a0, a1 3208; CHECK-NEXT: rts16 3209; 3210; GENERIC-LABEL: selectC_uge_i1: 3211; GENERIC: # %bb.0: # %entry 3212; GENERIC-NEXT: .cfi_def_cfa_offset 0 3213; GENERIC-NEXT: subi16 sp, sp, 4 3214; GENERIC-NEXT: .cfi_def_cfa_offset 4 3215; GENERIC-NEXT: btsti16 a0, 0 3216; GENERIC-NEXT: bt16 .LBB81_2 3217; GENERIC-NEXT: # %bb.1: # %entry 3218; GENERIC-NEXT: mov16 a2, a1 3219; GENERIC-NEXT: .LBB81_2: # %entry 3220; GENERIC-NEXT: mov16 a0, a2 3221; GENERIC-NEXT: addi16 sp, sp, 4 3222; GENERIC-NEXT: rts16 3223entry: 3224 %ret = select i1 %c, i1 %m, i1 %n 3225 ret i1 %ret 3226} 3227 3228 3229define i32 @selectRR_ult_i32(i32 %x, i32 %y, i32 %n, i32 %m) { 3230; CHECK-LABEL: selectRR_ult_i32: 3231; CHECK: # %bb.0: # %entry 3232; CHECK-NEXT: cmphs16 a1, a0 3233; CHECK-NEXT: movf32 a2, a3 3234; CHECK-NEXT: mov16 a0, a2 3235; CHECK-NEXT: rts16 3236; 3237; GENERIC-LABEL: selectRR_ult_i32: 3238; GENERIC: # %bb.0: # %entry 3239; GENERIC-NEXT: .cfi_def_cfa_offset 0 3240; GENERIC-NEXT: subi16 sp, sp, 4 3241; GENERIC-NEXT: .cfi_def_cfa_offset 4 3242; GENERIC-NEXT: cmphs16 a1, a0 3243; GENERIC-NEXT: mvcv16 a0 3244; GENERIC-NEXT: btsti16 a0, 0 3245; GENERIC-NEXT: bt16 .LBB82_2 3246; GENERIC-NEXT: # %bb.1: # %entry 3247; GENERIC-NEXT: mov16 a3, a2 3248; GENERIC-NEXT: .LBB82_2: # %entry 3249; GENERIC-NEXT: mov16 a0, a3 3250; GENERIC-NEXT: addi16 sp, sp, 4 3251; GENERIC-NEXT: rts16 3252entry: 3253 %icmp = icmp ult i32 %y, %x 3254 %ret = select i1 %icmp, i32 %m, i32 %n 3255 ret i32 %ret 3256} 3257 3258define i32 @selectRI_ult_i32(i32 %x, i32 %n, i32 %m) { 3259; CHECK-LABEL: selectRI_ult_i32: 3260; CHECK: # %bb.0: # %entry 3261; CHECK-NEXT: cmphsi16 a0, 10 3262; CHECK-NEXT: movf32 a1, a2 3263; CHECK-NEXT: mov16 a0, a1 3264; CHECK-NEXT: rts16 3265; 3266; GENERIC-LABEL: selectRI_ult_i32: 3267; GENERIC: # %bb.0: # %entry 3268; GENERIC-NEXT: .cfi_def_cfa_offset 0 3269; GENERIC-NEXT: subi16 sp, sp, 4 3270; GENERIC-NEXT: .cfi_def_cfa_offset 4 3271; GENERIC-NEXT: cmphsi16 a0, 10 3272; GENERIC-NEXT: mvcv16 a0 3273; GENERIC-NEXT: btsti16 a0, 0 3274; GENERIC-NEXT: bt16 .LBB83_2 3275; GENERIC-NEXT: # %bb.1: # %entry 3276; GENERIC-NEXT: mov16 a2, a1 3277; GENERIC-NEXT: .LBB83_2: # %entry 3278; GENERIC-NEXT: mov16 a0, a2 3279; GENERIC-NEXT: addi16 sp, sp, 4 3280; GENERIC-NEXT: rts16 3281entry: 3282 %icmp = icmp ult i32 %x, 10 3283 %ret = select i1 %icmp, i32 %m, i32 %n 3284 ret i32 %ret 3285} 3286 3287define i32 @selectRX_ult_i32(i32 %x, i32 %n, i32 %m) { 3288; CHECK-LABEL: selectRX_ult_i32: 3289; CHECK: # %bb.0: # %entry 3290; CHECK-NEXT: movih32 a3, 729 3291; CHECK-NEXT: ori32 a3, a3, 2033 3292; CHECK-NEXT: cmphs16 a0, a3 3293; CHECK-NEXT: movf32 a1, a2 3294; CHECK-NEXT: mov16 a0, a1 3295; CHECK-NEXT: rts16 3296; 3297; GENERIC-LABEL: selectRX_ult_i32: 3298; GENERIC: # %bb.0: # %entry 3299; GENERIC-NEXT: subi16 sp, sp, 4 3300; GENERIC-NEXT: .cfi_def_cfa_offset 4 3301; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 3302; GENERIC-NEXT: .cfi_offset l0, -4 3303; GENERIC-NEXT: subi16 sp, sp, 4 3304; GENERIC-NEXT: .cfi_def_cfa_offset 8 3305; GENERIC-NEXT: movi16 a3, 2 3306; GENERIC-NEXT: lsli16 a3, a3, 24 3307; GENERIC-NEXT: movi16 l0, 217 3308; GENERIC-NEXT: lsli16 l0, l0, 16 3309; GENERIC-NEXT: or16 l0, a3 3310; GENERIC-NEXT: movi16 a3, 7 3311; GENERIC-NEXT: lsli16 a3, a3, 8 3312; GENERIC-NEXT: or16 a3, l0 3313; GENERIC-NEXT: movi16 l0, 241 3314; GENERIC-NEXT: or16 l0, a3 3315; GENERIC-NEXT: cmphs16 a0, l0 3316; GENERIC-NEXT: mvcv16 a0 3317; GENERIC-NEXT: btsti16 a0, 0 3318; GENERIC-NEXT: bt16 .LBB84_2 3319; GENERIC-NEXT: # %bb.1: # %entry 3320; GENERIC-NEXT: mov16 a2, a1 3321; GENERIC-NEXT: .LBB84_2: # %entry 3322; GENERIC-NEXT: mov16 a0, a2 3323; GENERIC-NEXT: addi16 sp, sp, 4 3324; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 3325; GENERIC-NEXT: addi16 sp, sp, 4 3326; GENERIC-NEXT: rts16 3327entry: 3328 %icmp = icmp ult i32 %x, 47777777 3329 %ret = select i1 %icmp, i32 %m, i32 %n 3330 ret i32 %ret 3331} 3332 3333define i32 @selectC_ult_i32(i1 %c, i32 %n, i32 %m) { 3334; CHECK-LABEL: selectC_ult_i32: 3335; CHECK: # %bb.0: # %entry 3336; CHECK-NEXT: btsti16 a0, 0 3337; CHECK-NEXT: movt32 a1, a2 3338; CHECK-NEXT: mov16 a0, a1 3339; CHECK-NEXT: rts16 3340; 3341; GENERIC-LABEL: selectC_ult_i32: 3342; GENERIC: # %bb.0: # %entry 3343; GENERIC-NEXT: .cfi_def_cfa_offset 0 3344; GENERIC-NEXT: subi16 sp, sp, 4 3345; GENERIC-NEXT: .cfi_def_cfa_offset 4 3346; GENERIC-NEXT: btsti16 a0, 0 3347; GENERIC-NEXT: bt16 .LBB85_2 3348; GENERIC-NEXT: # %bb.1: # %entry 3349; GENERIC-NEXT: mov16 a2, a1 3350; GENERIC-NEXT: .LBB85_2: # %entry 3351; GENERIC-NEXT: mov16 a0, a2 3352; GENERIC-NEXT: addi16 sp, sp, 4 3353; GENERIC-NEXT: rts16 3354entry: 3355 %ret = select i1 %c, i32 %m, i32 %n 3356 ret i32 %ret 3357} 3358 3359define i64 @selectRR_ult_i64(i64 %x, i64 %y, i64 %n, i64 %m) { 3360; CHECK-LABEL: selectRR_ult_i64: 3361; CHECK: # %bb.0: # %entry 3362; CHECK-NEXT: .cfi_def_cfa_offset 0 3363; CHECK-NEXT: subi16 sp, sp, 8 3364; CHECK-NEXT: .cfi_def_cfa_offset 8 3365; CHECK-NEXT: cmpne16 a3, a1 3366; CHECK-NEXT: mvc32 t0 3367; CHECK-NEXT: st32.w t0, (sp, 4) 3368; CHECK-NEXT: cmphs16 a3, a1 3369; CHECK-NEXT: mvcv16 a1 3370; CHECK-NEXT: cmphs16 a2, a0 3371; CHECK-NEXT: mvcv16 a0 3372; CHECK-NEXT: ld16.w a2, (sp, 4) 3373; CHECK-NEXT: btsti16 a2, 0 3374; CHECK-NEXT: movf32 a1, a0 3375; CHECK-NEXT: addi16 a2, sp, 8 3376; CHECK-NEXT: addi16 a0, sp, 16 3377; CHECK-NEXT: btsti16 a1, 0 3378; CHECK-NEXT: movt32 a2, a0 3379; CHECK-NEXT: ld16.w a0, (a2, 0) 3380; CHECK-NEXT: ld16.w a1, (a2, 4) 3381; CHECK-NEXT: addi16 sp, sp, 8 3382; CHECK-NEXT: rts16 3383; 3384; GENERIC-LABEL: selectRR_ult_i64: 3385; GENERIC: # %bb.0: # %entry 3386; GENERIC-NEXT: subi16 sp, sp, 4 3387; GENERIC-NEXT: .cfi_def_cfa_offset 4 3388; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 3389; GENERIC-NEXT: .cfi_offset l0, -4 3390; GENERIC-NEXT: subi16 sp, sp, 4 3391; GENERIC-NEXT: .cfi_def_cfa_offset 8 3392; GENERIC-NEXT: cmphs16 a3, a1 3393; GENERIC-NEXT: mvcv16 l0 3394; GENERIC-NEXT: cmphs16 a2, a0 3395; GENERIC-NEXT: mvcv16 a0 3396; GENERIC-NEXT: cmpne16 a3, a1 3397; GENERIC-NEXT: mvcv16 a1 3398; GENERIC-NEXT: btsti16 a1, 0 3399; GENERIC-NEXT: bt16 .LBB86_2 3400; GENERIC-NEXT: # %bb.1: # %entry 3401; GENERIC-NEXT: mov16 a0, l0 3402; GENERIC-NEXT: .LBB86_2: # %entry 3403; GENERIC-NEXT: btsti16 a0, 0 3404; GENERIC-NEXT: bt16 .LBB86_4 3405; GENERIC-NEXT: # %bb.3: # %entry 3406; GENERIC-NEXT: movi16 a0, 8 3407; GENERIC-NEXT: br32 .LBB86_5 3408; GENERIC-NEXT: .LBB86_4: 3409; GENERIC-NEXT: movi16 a0, 16 3410; GENERIC-NEXT: .LBB86_5: # %entry 3411; GENERIC-NEXT: addu16 a0, sp 3412; GENERIC-NEXT: mov16 a1, a0 3413; GENERIC-NEXT: ld16.w a0, (a0, 0) 3414; GENERIC-NEXT: ld16.w a1, (a1, 4) 3415; GENERIC-NEXT: addi16 sp, sp, 4 3416; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 3417; GENERIC-NEXT: addi16 sp, sp, 4 3418; GENERIC-NEXT: rts16 3419entry: 3420 %icmp = icmp ult i64 %y, %x 3421 %ret = select i1 %icmp, i64 %m, i64 %n 3422 ret i64 %ret 3423} 3424 3425define i64 @selectRI_ult_i64(i64 %x, i64 %n, i64 %m) { 3426; CHECK-LABEL: selectRI_ult_i64: 3427; CHECK: # %bb.0: # %entry 3428; CHECK-NEXT: .cfi_def_cfa_offset 0 3429; CHECK-NEXT: subi16 sp, sp, 8 3430; CHECK-NEXT: .cfi_def_cfa_offset 8 3431; CHECK-NEXT: ld32.w t0, (sp, 12) 3432; CHECK-NEXT: ld32.w t1, (sp, 8) 3433; CHECK-NEXT: cmpnei16 a1, 0 3434; CHECK-NEXT: st16.w a2, (sp, 0) 3435; CHECK-NEXT: mvc32 a1 3436; CHECK-NEXT: st16.w a1, (sp, 4) 3437; CHECK-NEXT: cmphsi16 a0, 10 3438; CHECK-NEXT: mvcv16 a0 3439; CHECK-NEXT: movi16 a1, 0 3440; CHECK-NEXT: ld16.w a2, (sp, 4) 3441; CHECK-NEXT: btsti16 a2, 0 3442; CHECK-NEXT: ld16.w a2, (sp, 0) 3443; CHECK-NEXT: movf32 a1, a0 3444; CHECK-NEXT: btsti16 a1, 0 3445; CHECK-NEXT: movt32 a2, t1 3446; CHECK-NEXT: movt32 a3, t0 3447; CHECK-NEXT: mov16 a0, a2 3448; CHECK-NEXT: mov16 a1, a3 3449; CHECK-NEXT: addi16 sp, sp, 8 3450; CHECK-NEXT: rts16 3451; 3452; GENERIC-LABEL: selectRI_ult_i64: 3453; GENERIC: # %bb.0: # %entry 3454; GENERIC-NEXT: .cfi_def_cfa_offset 0 3455; GENERIC-NEXT: subi16 sp, sp, 4 3456; GENERIC-NEXT: .cfi_def_cfa_offset 4 3457; GENERIC-NEXT: cmphsi16 a0, 10 3458; GENERIC-NEXT: mvcv16 a0 3459; GENERIC-NEXT: cmpnei16 a1, 0 3460; GENERIC-NEXT: mvcv16 a1 3461; GENERIC-NEXT: btsti16 a1, 0 3462; GENERIC-NEXT: bf16 .LBB87_5 3463; GENERIC-NEXT: # %bb.1: # %entry 3464; GENERIC-NEXT: btsti16 a0, 0 3465; GENERIC-NEXT: bt16 .LBB87_6 3466; GENERIC-NEXT: .LBB87_2: # %entry 3467; GENERIC-NEXT: btsti16 a0, 0 3468; GENERIC-NEXT: bf16 .LBB87_4 3469; GENERIC-NEXT: .LBB87_3: 3470; GENERIC-NEXT: ld16.w a3, (sp, 8) 3471; GENERIC-NEXT: .LBB87_4: # %entry 3472; GENERIC-NEXT: mov16 a0, a2 3473; GENERIC-NEXT: mov16 a1, a3 3474; GENERIC-NEXT: addi16 sp, sp, 4 3475; GENERIC-NEXT: rts16 3476; GENERIC-NEXT: .LBB87_5: # %entry 3477; GENERIC-NEXT: movi16 a0, 0 3478; GENERIC-NEXT: btsti16 a0, 0 3479; GENERIC-NEXT: bf16 .LBB87_2 3480; GENERIC-NEXT: .LBB87_6: 3481; GENERIC-NEXT: ld16.w a2, (sp, 4) 3482; GENERIC-NEXT: btsti16 a0, 0 3483; GENERIC-NEXT: bt16 .LBB87_3 3484; GENERIC-NEXT: br32 .LBB87_4 3485entry: 3486 %icmp = icmp ult i64 %x, 10 3487 %ret = select i1 %icmp, i64 %m, i64 %n 3488 ret i64 %ret 3489} 3490 3491define i64 @selectRX_ult_i64(i64 %x, i64 %n, i64 %m) { 3492; CHECK-LABEL: selectRX_ult_i64: 3493; CHECK: # %bb.0: # %entry 3494; CHECK-NEXT: subi16 sp, sp, 4 3495; CHECK-NEXT: .cfi_def_cfa_offset 4 3496; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 3497; CHECK-NEXT: .cfi_offset l0, -4 3498; CHECK-NEXT: .cfi_def_cfa_offset 4 3499; CHECK-NEXT: ld32.w t0, (sp, 8) 3500; CHECK-NEXT: ld32.w t1, (sp, 4) 3501; CHECK-NEXT: movih32 l0, 729 3502; CHECK-NEXT: ori32 l0, l0, 2033 3503; CHECK-NEXT: cmphs16 a0, l0 3504; CHECK-NEXT: mvcv16 a0 3505; CHECK-NEXT: cmpnei16 a1, 0 3506; CHECK-NEXT: movi16 a1, 0 3507; CHECK-NEXT: movf32 a1, a0 3508; CHECK-NEXT: btsti16 a1, 0 3509; CHECK-NEXT: movt32 a2, t1 3510; CHECK-NEXT: movt32 a3, t0 3511; CHECK-NEXT: mov16 a0, a2 3512; CHECK-NEXT: mov16 a1, a3 3513; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 3514; CHECK-NEXT: addi16 sp, sp, 4 3515; CHECK-NEXT: rts16 3516; 3517; GENERIC-LABEL: selectRX_ult_i64: 3518; GENERIC: # %bb.0: # %entry 3519; GENERIC-NEXT: subi16 sp, sp, 8 3520; GENERIC-NEXT: .cfi_def_cfa_offset 8 3521; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 3522; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 3523; GENERIC-NEXT: .cfi_offset l1, -4 3524; GENERIC-NEXT: .cfi_offset l0, -8 3525; GENERIC-NEXT: subi16 sp, sp, 4 3526; GENERIC-NEXT: .cfi_def_cfa_offset 12 3527; GENERIC-NEXT: movi16 l0, 2 3528; GENERIC-NEXT: lsli16 l0, l0, 24 3529; GENERIC-NEXT: movi16 l1, 217 3530; GENERIC-NEXT: lsli16 l1, l1, 16 3531; GENERIC-NEXT: or16 l1, l0 3532; GENERIC-NEXT: movi16 l0, 7 3533; GENERIC-NEXT: lsli16 l0, l0, 8 3534; GENERIC-NEXT: or16 l0, l1 3535; GENERIC-NEXT: movi16 l1, 241 3536; GENERIC-NEXT: or16 l1, l0 3537; GENERIC-NEXT: cmphs16 a0, l1 3538; GENERIC-NEXT: mvcv16 a0 3539; GENERIC-NEXT: cmpnei16 a1, 0 3540; GENERIC-NEXT: mvcv16 a1 3541; GENERIC-NEXT: btsti16 a1, 0 3542; GENERIC-NEXT: bf16 .LBB88_5 3543; GENERIC-NEXT: # %bb.1: # %entry 3544; GENERIC-NEXT: btsti16 a0, 0 3545; GENERIC-NEXT: bt16 .LBB88_6 3546; GENERIC-NEXT: .LBB88_2: # %entry 3547; GENERIC-NEXT: btsti16 a0, 0 3548; GENERIC-NEXT: bf16 .LBB88_4 3549; GENERIC-NEXT: .LBB88_3: 3550; GENERIC-NEXT: ld16.w a3, (sp, 16) 3551; GENERIC-NEXT: .LBB88_4: # %entry 3552; GENERIC-NEXT: mov16 a0, a2 3553; GENERIC-NEXT: mov16 a1, a3 3554; GENERIC-NEXT: addi16 sp, sp, 4 3555; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 3556; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 3557; GENERIC-NEXT: addi16 sp, sp, 8 3558; GENERIC-NEXT: rts16 3559; GENERIC-NEXT: .LBB88_5: # %entry 3560; GENERIC-NEXT: movi16 a0, 0 3561; GENERIC-NEXT: btsti16 a0, 0 3562; GENERIC-NEXT: bf16 .LBB88_2 3563; GENERIC-NEXT: .LBB88_6: 3564; GENERIC-NEXT: ld16.w a2, (sp, 12) 3565; GENERIC-NEXT: btsti16 a0, 0 3566; GENERIC-NEXT: bt16 .LBB88_3 3567; GENERIC-NEXT: br32 .LBB88_4 3568entry: 3569 %icmp = icmp ult i64 %x, 47777777 3570 %ret = select i1 %icmp, i64 %m, i64 %n 3571 ret i64 %ret 3572} 3573 3574define i64 @selectC_ult_i64(i1 %c, i64 %n, i64 %m) { 3575; CHECK-LABEL: selectC_ult_i64: 3576; CHECK: # %bb.0: # %entry 3577; CHECK-NEXT: ld32.w t0, (sp, 0) 3578; CHECK-NEXT: btsti16 a0, 0 3579; CHECK-NEXT: movt32 a1, a3 3580; CHECK-NEXT: movt32 a2, t0 3581; CHECK-NEXT: mov16 a0, a1 3582; CHECK-NEXT: mov16 a1, a2 3583; CHECK-NEXT: rts16 3584; 3585; GENERIC-LABEL: selectC_ult_i64: 3586; GENERIC: # %bb.0: # %entry 3587; GENERIC-NEXT: .cfi_def_cfa_offset 0 3588; GENERIC-NEXT: subi16 sp, sp, 4 3589; GENERIC-NEXT: .cfi_def_cfa_offset 4 3590; GENERIC-NEXT: btsti16 a0, 0 3591; GENERIC-NEXT: bt16 .LBB89_2 3592; GENERIC-NEXT: # %bb.1: # %entry 3593; GENERIC-NEXT: mov16 a3, a1 3594; GENERIC-NEXT: .LBB89_2: # %entry 3595; GENERIC-NEXT: btsti16 a0, 0 3596; GENERIC-NEXT: bf16 .LBB89_4 3597; GENERIC-NEXT: # %bb.3: 3598; GENERIC-NEXT: ld16.w a2, (sp, 4) 3599; GENERIC-NEXT: .LBB89_4: # %entry 3600; GENERIC-NEXT: mov16 a0, a3 3601; GENERIC-NEXT: mov16 a1, a2 3602; GENERIC-NEXT: addi16 sp, sp, 4 3603; GENERIC-NEXT: rts16 3604entry: 3605 %ret = select i1 %c, i64 %m, i64 %n 3606 ret i64 %ret 3607} 3608 3609 3610define i16 @selectRR_ult_i16(i16 %x, i16 %y, i16 %n, i16 %m) { 3611; CHECK-LABEL: selectRR_ult_i16: 3612; CHECK: # %bb.0: # %entry 3613; CHECK-NEXT: zexth16 a0, a0 3614; CHECK-NEXT: zexth16 a1, a1 3615; CHECK-NEXT: cmphs16 a1, a0 3616; CHECK-NEXT: movf32 a2, a3 3617; CHECK-NEXT: mov16 a0, a2 3618; CHECK-NEXT: rts16 3619; 3620; GENERIC-LABEL: selectRR_ult_i16: 3621; GENERIC: # %bb.0: # %entry 3622; GENERIC-NEXT: subi16 sp, sp, 12 3623; GENERIC-NEXT: .cfi_def_cfa_offset 12 3624; GENERIC-NEXT: st16.w l2, (sp, 8) # 4-byte Folded Spill 3625; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 3626; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 3627; GENERIC-NEXT: .cfi_offset l2, -4 3628; GENERIC-NEXT: .cfi_offset l1, -8 3629; GENERIC-NEXT: .cfi_offset l0, -12 3630; GENERIC-NEXT: subi16 sp, sp, 4 3631; GENERIC-NEXT: .cfi_def_cfa_offset 16 3632; GENERIC-NEXT: movi16 l0, 0 3633; GENERIC-NEXT: lsli16 l1, l0, 24 3634; GENERIC-NEXT: lsli16 l0, l0, 16 3635; GENERIC-NEXT: or16 l0, l1 3636; GENERIC-NEXT: movi16 l1, 255 3637; GENERIC-NEXT: lsli16 l2, l1, 8 3638; GENERIC-NEXT: or16 l2, l0 3639; GENERIC-NEXT: or16 l2, l1 3640; GENERIC-NEXT: and16 a0, l2 3641; GENERIC-NEXT: and16 l2, a1 3642; GENERIC-NEXT: cmphs16 l2, a0 3643; GENERIC-NEXT: mvcv16 a0 3644; GENERIC-NEXT: btsti16 a0, 0 3645; GENERIC-NEXT: bt16 .LBB90_2 3646; GENERIC-NEXT: # %bb.1: # %entry 3647; GENERIC-NEXT: mov16 a3, a2 3648; GENERIC-NEXT: .LBB90_2: # %entry 3649; GENERIC-NEXT: mov16 a0, a3 3650; GENERIC-NEXT: addi16 sp, sp, 4 3651; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 3652; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 3653; GENERIC-NEXT: ld16.w l2, (sp, 8) # 4-byte Folded Reload 3654; GENERIC-NEXT: addi16 sp, sp, 12 3655; GENERIC-NEXT: rts16 3656entry: 3657 %icmp = icmp ult i16 %y, %x 3658 %ret = select i1 %icmp, i16 %m, i16 %n 3659 ret i16 %ret 3660} 3661 3662define i16 @selectRI_ult_i16(i16 %x, i16 %n, i16 %m) { 3663; CHECK-LABEL: selectRI_ult_i16: 3664; CHECK: # %bb.0: # %entry 3665; CHECK-NEXT: zexth16 a0, a0 3666; CHECK-NEXT: cmphsi16 a0, 10 3667; CHECK-NEXT: movf32 a1, a2 3668; CHECK-NEXT: mov16 a0, a1 3669; CHECK-NEXT: rts16 3670; 3671; GENERIC-LABEL: selectRI_ult_i16: 3672; GENERIC: # %bb.0: # %entry 3673; GENERIC-NEXT: subi16 sp, sp, 8 3674; GENERIC-NEXT: .cfi_def_cfa_offset 8 3675; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 3676; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 3677; GENERIC-NEXT: .cfi_offset l1, -4 3678; GENERIC-NEXT: .cfi_offset l0, -8 3679; GENERIC-NEXT: subi16 sp, sp, 4 3680; GENERIC-NEXT: .cfi_def_cfa_offset 12 3681; GENERIC-NEXT: movi16 a3, 0 3682; GENERIC-NEXT: lsli16 l0, a3, 24 3683; GENERIC-NEXT: lsli16 a3, a3, 16 3684; GENERIC-NEXT: or16 a3, l0 3685; GENERIC-NEXT: movi16 l0, 255 3686; GENERIC-NEXT: lsli16 l1, l0, 8 3687; GENERIC-NEXT: or16 l1, a3 3688; GENERIC-NEXT: or16 l1, l0 3689; GENERIC-NEXT: and16 l1, a0 3690; GENERIC-NEXT: cmphsi16 l1, 10 3691; GENERIC-NEXT: mvcv16 a0 3692; GENERIC-NEXT: btsti16 a0, 0 3693; GENERIC-NEXT: bt16 .LBB91_2 3694; GENERIC-NEXT: # %bb.1: # %entry 3695; GENERIC-NEXT: mov16 a2, a1 3696; GENERIC-NEXT: .LBB91_2: # %entry 3697; GENERIC-NEXT: mov16 a0, a2 3698; GENERIC-NEXT: addi16 sp, sp, 4 3699; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 3700; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 3701; GENERIC-NEXT: addi16 sp, sp, 8 3702; GENERIC-NEXT: rts16 3703entry: 3704 %icmp = icmp ult i16 %x, 10 3705 %ret = select i1 %icmp, i16 %m, i16 %n 3706 ret i16 %ret 3707} 3708 3709define i16 @selectRX_ult_i16(i16 %x, i16 %n, i16 %m) { 3710; CHECK-LABEL: selectRX_ult_i16: 3711; CHECK: # %bb.0: # %entry 3712; CHECK-NEXT: zexth16 a0, a0 3713; CHECK-NEXT: cmphsi32 a0, 2033 3714; CHECK-NEXT: movf32 a1, a2 3715; CHECK-NEXT: mov16 a0, a1 3716; CHECK-NEXT: rts16 3717; 3718; GENERIC-LABEL: selectRX_ult_i16: 3719; GENERIC: # %bb.0: # %entry 3720; GENERIC-NEXT: subi16 sp, sp, 8 3721; GENERIC-NEXT: .cfi_def_cfa_offset 8 3722; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 3723; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 3724; GENERIC-NEXT: .cfi_offset l1, -4 3725; GENERIC-NEXT: .cfi_offset l0, -8 3726; GENERIC-NEXT: subi16 sp, sp, 4 3727; GENERIC-NEXT: .cfi_def_cfa_offset 12 3728; GENERIC-NEXT: movi16 a3, 0 3729; GENERIC-NEXT: lsli16 l0, a3, 24 3730; GENERIC-NEXT: lsli16 a3, a3, 16 3731; GENERIC-NEXT: or16 a3, l0 3732; GENERIC-NEXT: movi16 l0, 255 3733; GENERIC-NEXT: lsli16 l1, l0, 8 3734; GENERIC-NEXT: or16 l1, a3 3735; GENERIC-NEXT: or16 l1, l0 3736; GENERIC-NEXT: and16 l1, a0 3737; GENERIC-NEXT: movi16 a0, 7 3738; GENERIC-NEXT: lsli16 a0, a0, 8 3739; GENERIC-NEXT: or16 a0, a3 3740; GENERIC-NEXT: movi16 a3, 241 3741; GENERIC-NEXT: or16 a3, a0 3742; GENERIC-NEXT: cmphs16 l1, a3 3743; GENERIC-NEXT: mvcv16 a0 3744; GENERIC-NEXT: btsti16 a0, 0 3745; GENERIC-NEXT: bt16 .LBB92_2 3746; GENERIC-NEXT: # %bb.1: # %entry 3747; GENERIC-NEXT: mov16 a2, a1 3748; GENERIC-NEXT: .LBB92_2: # %entry 3749; GENERIC-NEXT: mov16 a0, a2 3750; GENERIC-NEXT: addi16 sp, sp, 4 3751; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 3752; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 3753; GENERIC-NEXT: addi16 sp, sp, 8 3754; GENERIC-NEXT: rts16 3755entry: 3756 %icmp = icmp ult i16 %x, 47777777 3757 %ret = select i1 %icmp, i16 %m, i16 %n 3758 ret i16 %ret 3759} 3760 3761define i16 @selectC_ult_i16(i1 %c, i16 %n, i16 %m) { 3762; CHECK-LABEL: selectC_ult_i16: 3763; CHECK: # %bb.0: # %entry 3764; CHECK-NEXT: btsti16 a0, 0 3765; CHECK-NEXT: movt32 a1, a2 3766; CHECK-NEXT: mov16 a0, a1 3767; CHECK-NEXT: rts16 3768; 3769; GENERIC-LABEL: selectC_ult_i16: 3770; GENERIC: # %bb.0: # %entry 3771; GENERIC-NEXT: .cfi_def_cfa_offset 0 3772; GENERIC-NEXT: subi16 sp, sp, 4 3773; GENERIC-NEXT: .cfi_def_cfa_offset 4 3774; GENERIC-NEXT: btsti16 a0, 0 3775; GENERIC-NEXT: bt16 .LBB93_2 3776; GENERIC-NEXT: # %bb.1: # %entry 3777; GENERIC-NEXT: mov16 a2, a1 3778; GENERIC-NEXT: .LBB93_2: # %entry 3779; GENERIC-NEXT: mov16 a0, a2 3780; GENERIC-NEXT: addi16 sp, sp, 4 3781; GENERIC-NEXT: rts16 3782entry: 3783 %ret = select i1 %c, i16 %m, i16 %n 3784 ret i16 %ret 3785} 3786 3787 3788define i8 @selectRR_ult_i8(i8 %x, i8 %y, i8 %n, i8 %m) { 3789; CHECK-LABEL: selectRR_ult_i8: 3790; CHECK: # %bb.0: # %entry 3791; CHECK-NEXT: zextb16 a0, a0 3792; CHECK-NEXT: zextb16 a1, a1 3793; CHECK-NEXT: cmphs16 a1, a0 3794; CHECK-NEXT: movf32 a2, a3 3795; CHECK-NEXT: mov16 a0, a2 3796; CHECK-NEXT: rts16 3797; 3798; GENERIC-LABEL: selectRR_ult_i8: 3799; GENERIC: # %bb.0: # %entry 3800; GENERIC-NEXT: subi16 sp, sp, 4 3801; GENERIC-NEXT: .cfi_def_cfa_offset 4 3802; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 3803; GENERIC-NEXT: .cfi_offset l0, -4 3804; GENERIC-NEXT: subi16 sp, sp, 4 3805; GENERIC-NEXT: .cfi_def_cfa_offset 8 3806; GENERIC-NEXT: movi16 l0, 255 3807; GENERIC-NEXT: and16 a0, l0 3808; GENERIC-NEXT: and16 a1, l0 3809; GENERIC-NEXT: cmphs16 a1, a0 3810; GENERIC-NEXT: mvcv16 a0 3811; GENERIC-NEXT: btsti16 a0, 0 3812; GENERIC-NEXT: bt16 .LBB94_2 3813; GENERIC-NEXT: # %bb.1: # %entry 3814; GENERIC-NEXT: mov16 a3, a2 3815; GENERIC-NEXT: .LBB94_2: # %entry 3816; GENERIC-NEXT: mov16 a0, a3 3817; GENERIC-NEXT: addi16 sp, sp, 4 3818; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 3819; GENERIC-NEXT: addi16 sp, sp, 4 3820; GENERIC-NEXT: rts16 3821entry: 3822 %icmp = icmp ult i8 %y, %x 3823 %ret = select i1 %icmp, i8 %m, i8 %n 3824 ret i8 %ret 3825} 3826 3827define i8 @selectRI_ult_i8(i8 %x, i8 %n, i8 %m) { 3828; CHECK-LABEL: selectRI_ult_i8: 3829; CHECK: # %bb.0: # %entry 3830; CHECK-NEXT: zextb16 a0, a0 3831; CHECK-NEXT: cmphsi16 a0, 10 3832; CHECK-NEXT: movf32 a1, a2 3833; CHECK-NEXT: mov16 a0, a1 3834; CHECK-NEXT: rts16 3835; 3836; GENERIC-LABEL: selectRI_ult_i8: 3837; GENERIC: # %bb.0: # %entry 3838; GENERIC-NEXT: .cfi_def_cfa_offset 0 3839; GENERIC-NEXT: subi16 sp, sp, 4 3840; GENERIC-NEXT: .cfi_def_cfa_offset 4 3841; GENERIC-NEXT: movi16 a3, 255 3842; GENERIC-NEXT: and16 a3, a0 3843; GENERIC-NEXT: cmphsi16 a3, 10 3844; GENERIC-NEXT: mvcv16 a0 3845; GENERIC-NEXT: btsti16 a0, 0 3846; GENERIC-NEXT: bt16 .LBB95_2 3847; GENERIC-NEXT: # %bb.1: # %entry 3848; GENERIC-NEXT: mov16 a2, a1 3849; GENERIC-NEXT: .LBB95_2: # %entry 3850; GENERIC-NEXT: mov16 a0, a2 3851; GENERIC-NEXT: addi16 sp, sp, 4 3852; GENERIC-NEXT: rts16 3853entry: 3854 %icmp = icmp ult i8 %x, 10 3855 %ret = select i1 %icmp, i8 %m, i8 %n 3856 ret i8 %ret 3857} 3858 3859define i8 @selectRX_ult_i8(i8 %x, i8 %n, i8 %m) { 3860; CHECK-LABEL: selectRX_ult_i8: 3861; CHECK: # %bb.0: # %entry 3862; CHECK-NEXT: zextb16 a0, a0 3863; CHECK-NEXT: cmphsi32 a0, 241 3864; CHECK-NEXT: movf32 a1, a2 3865; CHECK-NEXT: mov16 a0, a1 3866; CHECK-NEXT: rts16 3867; 3868; GENERIC-LABEL: selectRX_ult_i8: 3869; GENERIC: # %bb.0: # %entry 3870; GENERIC-NEXT: .cfi_def_cfa_offset 0 3871; GENERIC-NEXT: subi16 sp, sp, 4 3872; GENERIC-NEXT: .cfi_def_cfa_offset 4 3873; GENERIC-NEXT: movi16 a3, 255 3874; GENERIC-NEXT: and16 a3, a0 3875; GENERIC-NEXT: movi16 a0, 241 3876; GENERIC-NEXT: cmphs16 a3, a0 3877; GENERIC-NEXT: mvcv16 a0 3878; GENERIC-NEXT: btsti16 a0, 0 3879; GENERIC-NEXT: bt16 .LBB96_2 3880; GENERIC-NEXT: # %bb.1: # %entry 3881; GENERIC-NEXT: mov16 a2, a1 3882; GENERIC-NEXT: .LBB96_2: # %entry 3883; GENERIC-NEXT: mov16 a0, a2 3884; GENERIC-NEXT: addi16 sp, sp, 4 3885; GENERIC-NEXT: rts16 3886entry: 3887 %icmp = icmp ult i8 %x, 47777777 3888 %ret = select i1 %icmp, i8 %m, i8 %n 3889 ret i8 %ret 3890} 3891 3892define i8 @selectC_ult_i8(i1 %c, i8 %n, i8 %m) { 3893; CHECK-LABEL: selectC_ult_i8: 3894; CHECK: # %bb.0: # %entry 3895; CHECK-NEXT: btsti16 a0, 0 3896; CHECK-NEXT: movt32 a1, a2 3897; CHECK-NEXT: mov16 a0, a1 3898; CHECK-NEXT: rts16 3899; 3900; GENERIC-LABEL: selectC_ult_i8: 3901; GENERIC: # %bb.0: # %entry 3902; GENERIC-NEXT: .cfi_def_cfa_offset 0 3903; GENERIC-NEXT: subi16 sp, sp, 4 3904; GENERIC-NEXT: .cfi_def_cfa_offset 4 3905; GENERIC-NEXT: btsti16 a0, 0 3906; GENERIC-NEXT: bt16 .LBB97_2 3907; GENERIC-NEXT: # %bb.1: # %entry 3908; GENERIC-NEXT: mov16 a2, a1 3909; GENERIC-NEXT: .LBB97_2: # %entry 3910; GENERIC-NEXT: mov16 a0, a2 3911; GENERIC-NEXT: addi16 sp, sp, 4 3912; GENERIC-NEXT: rts16 3913entry: 3914 %ret = select i1 %c, i8 %m, i8 %n 3915 ret i8 %ret 3916} 3917 3918 3919define i1 @selectRR_ult_i1(i1 %x, i1 %y, i1 %n, i1 %m) { 3920; CHECK-LABEL: selectRR_ult_i1: 3921; CHECK: # %bb.0: # %entry 3922; CHECK-NEXT: btsti16 a1, 0 3923; CHECK-NEXT: movt32 a3, a2 3924; CHECK-NEXT: btsti16 a0, 0 3925; CHECK-NEXT: movt32 a2, a3 3926; CHECK-NEXT: mov16 a0, a2 3927; CHECK-NEXT: rts16 3928; 3929; GENERIC-LABEL: selectRR_ult_i1: 3930; GENERIC: # %bb.0: # %entry 3931; GENERIC-NEXT: subi16 sp, sp, 4 3932; GENERIC-NEXT: .cfi_def_cfa_offset 4 3933; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 3934; GENERIC-NEXT: .cfi_offset l0, -4 3935; GENERIC-NEXT: subi16 sp, sp, 4 3936; GENERIC-NEXT: .cfi_def_cfa_offset 8 3937; GENERIC-NEXT: mov16 l0, a0 3938; GENERIC-NEXT: btsti16 a1, 0 3939; GENERIC-NEXT: mov16 a0, a2 3940; GENERIC-NEXT: bt16 .LBB98_2 3941; GENERIC-NEXT: # %bb.1: # %entry 3942; GENERIC-NEXT: mov16 a0, a3 3943; GENERIC-NEXT: .LBB98_2: # %entry 3944; GENERIC-NEXT: btsti16 l0, 0 3945; GENERIC-NEXT: bt16 .LBB98_4 3946; GENERIC-NEXT: # %bb.3: # %entry 3947; GENERIC-NEXT: mov16 a0, a2 3948; GENERIC-NEXT: .LBB98_4: # %entry 3949; GENERIC-NEXT: addi16 sp, sp, 4 3950; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 3951; GENERIC-NEXT: addi16 sp, sp, 4 3952; GENERIC-NEXT: rts16 3953entry: 3954 %icmp = icmp ult i1 %y, %x 3955 %ret = select i1 %icmp, i1 %m, i1 %n 3956 ret i1 %ret 3957} 3958 3959define i1 @selectRI_ult_i1(i1 %x, i1 %n, i1 %m) { 3960; CHECK-LABEL: selectRI_ult_i1: 3961; CHECK: # %bb.0: # %entry 3962; CHECK-NEXT: mov16 a0, a1 3963; CHECK-NEXT: rts16 3964; 3965; GENERIC-LABEL: selectRI_ult_i1: 3966; GENERIC: # %bb.0: # %entry 3967; GENERIC-NEXT: .cfi_def_cfa_offset 0 3968; GENERIC-NEXT: subi16 sp, sp, 4 3969; GENERIC-NEXT: .cfi_def_cfa_offset 4 3970; GENERIC-NEXT: mov16 a0, a1 3971; GENERIC-NEXT: addi16 sp, sp, 4 3972; GENERIC-NEXT: rts16 3973entry: 3974 %icmp = icmp ult i1 %x, 10 3975 %ret = select i1 %icmp, i1 %m, i1 %n 3976 ret i1 %ret 3977} 3978 3979define i1 @selectRX_ult_i1(i1 %x, i1 %n, i1 %m) { 3980; CHECK-LABEL: selectRX_ult_i1: 3981; CHECK: # %bb.0: # %entry 3982; CHECK-NEXT: btsti16 a0, 0 3983; CHECK-NEXT: movt32 a2, a1 3984; CHECK-NEXT: mov16 a0, a2 3985; CHECK-NEXT: rts16 3986; 3987; GENERIC-LABEL: selectRX_ult_i1: 3988; GENERIC: # %bb.0: # %entry 3989; GENERIC-NEXT: .cfi_def_cfa_offset 0 3990; GENERIC-NEXT: subi16 sp, sp, 4 3991; GENERIC-NEXT: .cfi_def_cfa_offset 4 3992; GENERIC-NEXT: btsti16 a0, 0 3993; GENERIC-NEXT: bt16 .LBB100_2 3994; GENERIC-NEXT: # %bb.1: # %entry 3995; GENERIC-NEXT: mov16 a1, a2 3996; GENERIC-NEXT: .LBB100_2: # %entry 3997; GENERIC-NEXT: mov16 a0, a1 3998; GENERIC-NEXT: addi16 sp, sp, 4 3999; GENERIC-NEXT: rts16 4000entry: 4001 %icmp = icmp ult i1 %x, 47777777 4002 %ret = select i1 %icmp, i1 %m, i1 %n 4003 ret i1 %ret 4004} 4005 4006define i1 @selectC_ult_i1(i1 %c, i1 %n, i1 %m) { 4007; CHECK-LABEL: selectC_ult_i1: 4008; CHECK: # %bb.0: # %entry 4009; CHECK-NEXT: btsti16 a0, 0 4010; CHECK-NEXT: movt32 a1, a2 4011; CHECK-NEXT: mov16 a0, a1 4012; CHECK-NEXT: rts16 4013; 4014; GENERIC-LABEL: selectC_ult_i1: 4015; GENERIC: # %bb.0: # %entry 4016; GENERIC-NEXT: .cfi_def_cfa_offset 0 4017; GENERIC-NEXT: subi16 sp, sp, 4 4018; GENERIC-NEXT: .cfi_def_cfa_offset 4 4019; GENERIC-NEXT: btsti16 a0, 0 4020; GENERIC-NEXT: bt16 .LBB101_2 4021; GENERIC-NEXT: # %bb.1: # %entry 4022; GENERIC-NEXT: mov16 a2, a1 4023; GENERIC-NEXT: .LBB101_2: # %entry 4024; GENERIC-NEXT: mov16 a0, a2 4025; GENERIC-NEXT: addi16 sp, sp, 4 4026; GENERIC-NEXT: rts16 4027entry: 4028 %ret = select i1 %c, i1 %m, i1 %n 4029 ret i1 %ret 4030} 4031 4032define i32 @selectRR_ule_i32(i32 %x, i32 %y, i32 %n, i32 %m) { 4033; CHECK-LABEL: selectRR_ule_i32: 4034; CHECK: # %bb.0: # %entry 4035; CHECK-NEXT: cmphs16 a0, a1 4036; CHECK-NEXT: movt32 a2, a3 4037; CHECK-NEXT: mov16 a0, a2 4038; CHECK-NEXT: rts16 4039; 4040; GENERIC-LABEL: selectRR_ule_i32: 4041; GENERIC: # %bb.0: # %entry 4042; GENERIC-NEXT: .cfi_def_cfa_offset 0 4043; GENERIC-NEXT: subi16 sp, sp, 4 4044; GENERIC-NEXT: .cfi_def_cfa_offset 4 4045; GENERIC-NEXT: cmphs16 a0, a1 4046; GENERIC-NEXT: mvcv16 a0 4047; GENERIC-NEXT: movi16 a1, 1 4048; GENERIC-NEXT: subu16 a1, a0 4049; GENERIC-NEXT: btsti16 a1, 0 4050; GENERIC-NEXT: bt16 .LBB102_2 4051; GENERIC-NEXT: # %bb.1: # %entry 4052; GENERIC-NEXT: mov16 a3, a2 4053; GENERIC-NEXT: .LBB102_2: # %entry 4054; GENERIC-NEXT: mov16 a0, a3 4055; GENERIC-NEXT: addi16 sp, sp, 4 4056; GENERIC-NEXT: rts16 4057entry: 4058 %icmp = icmp ule i32 %y, %x 4059 %ret = select i1 %icmp, i32 %m, i32 %n 4060 ret i32 %ret 4061} 4062 4063define i32 @selectRI_ule_i32(i32 %x, i32 %n, i32 %m) { 4064; CHECK-LABEL: selectRI_ule_i32: 4065; CHECK: # %bb.0: # %entry 4066; CHECK-NEXT: cmphsi16 a0, 11 4067; CHECK-NEXT: movf32 a1, a2 4068; CHECK-NEXT: mov16 a0, a1 4069; CHECK-NEXT: rts16 4070; 4071; GENERIC-LABEL: selectRI_ule_i32: 4072; GENERIC: # %bb.0: # %entry 4073; GENERIC-NEXT: .cfi_def_cfa_offset 0 4074; GENERIC-NEXT: subi16 sp, sp, 4 4075; GENERIC-NEXT: .cfi_def_cfa_offset 4 4076; GENERIC-NEXT: cmphsi16 a0, 11 4077; GENERIC-NEXT: mvcv16 a0 4078; GENERIC-NEXT: btsti16 a0, 0 4079; GENERIC-NEXT: bt16 .LBB103_2 4080; GENERIC-NEXT: # %bb.1: # %entry 4081; GENERIC-NEXT: mov16 a2, a1 4082; GENERIC-NEXT: .LBB103_2: # %entry 4083; GENERIC-NEXT: mov16 a0, a2 4084; GENERIC-NEXT: addi16 sp, sp, 4 4085; GENERIC-NEXT: rts16 4086entry: 4087 %icmp = icmp ule i32 %x, 10 4088 %ret = select i1 %icmp, i32 %m, i32 %n 4089 ret i32 %ret 4090} 4091 4092define i32 @selectRX_ule_i32(i32 %x, i32 %n, i32 %m) { 4093; CHECK-LABEL: selectRX_ule_i32: 4094; CHECK: # %bb.0: # %entry 4095; CHECK-NEXT: movih32 a3, 729 4096; CHECK-NEXT: ori32 a3, a3, 2034 4097; CHECK-NEXT: cmphs16 a0, a3 4098; CHECK-NEXT: movf32 a1, a2 4099; CHECK-NEXT: mov16 a0, a1 4100; CHECK-NEXT: rts16 4101; 4102; GENERIC-LABEL: selectRX_ule_i32: 4103; GENERIC: # %bb.0: # %entry 4104; GENERIC-NEXT: subi16 sp, sp, 4 4105; GENERIC-NEXT: .cfi_def_cfa_offset 4 4106; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 4107; GENERIC-NEXT: .cfi_offset l0, -4 4108; GENERIC-NEXT: subi16 sp, sp, 4 4109; GENERIC-NEXT: .cfi_def_cfa_offset 8 4110; GENERIC-NEXT: movi16 a3, 2 4111; GENERIC-NEXT: lsli16 a3, a3, 24 4112; GENERIC-NEXT: movi16 l0, 217 4113; GENERIC-NEXT: lsli16 l0, l0, 16 4114; GENERIC-NEXT: or16 l0, a3 4115; GENERIC-NEXT: movi16 a3, 7 4116; GENERIC-NEXT: lsli16 a3, a3, 8 4117; GENERIC-NEXT: or16 a3, l0 4118; GENERIC-NEXT: movi16 l0, 242 4119; GENERIC-NEXT: or16 l0, a3 4120; GENERIC-NEXT: cmphs16 a0, l0 4121; GENERIC-NEXT: mvcv16 a0 4122; GENERIC-NEXT: btsti16 a0, 0 4123; GENERIC-NEXT: bt16 .LBB104_2 4124; GENERIC-NEXT: # %bb.1: # %entry 4125; GENERIC-NEXT: mov16 a2, a1 4126; GENERIC-NEXT: .LBB104_2: # %entry 4127; GENERIC-NEXT: mov16 a0, a2 4128; GENERIC-NEXT: addi16 sp, sp, 4 4129; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 4130; GENERIC-NEXT: addi16 sp, sp, 4 4131; GENERIC-NEXT: rts16 4132entry: 4133 %icmp = icmp ule i32 %x, 47777777 4134 %ret = select i1 %icmp, i32 %m, i32 %n 4135 ret i32 %ret 4136} 4137 4138define i32 @selectC_ule_i32(i1 %c, i32 %n, i32 %m) { 4139; CHECK-LABEL: selectC_ule_i32: 4140; CHECK: # %bb.0: # %entry 4141; CHECK-NEXT: btsti16 a0, 0 4142; CHECK-NEXT: movt32 a1, a2 4143; CHECK-NEXT: mov16 a0, a1 4144; CHECK-NEXT: rts16 4145; 4146; GENERIC-LABEL: selectC_ule_i32: 4147; GENERIC: # %bb.0: # %entry 4148; GENERIC-NEXT: .cfi_def_cfa_offset 0 4149; GENERIC-NEXT: subi16 sp, sp, 4 4150; GENERIC-NEXT: .cfi_def_cfa_offset 4 4151; GENERIC-NEXT: btsti16 a0, 0 4152; GENERIC-NEXT: bt16 .LBB105_2 4153; GENERIC-NEXT: # %bb.1: # %entry 4154; GENERIC-NEXT: mov16 a2, a1 4155; GENERIC-NEXT: .LBB105_2: # %entry 4156; GENERIC-NEXT: mov16 a0, a2 4157; GENERIC-NEXT: addi16 sp, sp, 4 4158; GENERIC-NEXT: rts16 4159entry: 4160 %ret = select i1 %c, i32 %m, i32 %n 4161 ret i32 %ret 4162} 4163 4164define i64 @selectRR_ule_i64(i64 %x, i64 %y, i64 %n, i64 %m) { 4165; CHECK-LABEL: selectRR_ule_i64: 4166; CHECK: # %bb.0: # %entry 4167; CHECK-NEXT: .cfi_def_cfa_offset 0 4168; CHECK-NEXT: subi16 sp, sp, 16 4169; CHECK-NEXT: .cfi_def_cfa_offset 16 4170; CHECK-NEXT: cmphs16 a1, a3 4171; CHECK-NEXT: mvc32 t0 4172; CHECK-NEXT: st32.w t0, (sp, 12) 4173; CHECK-NEXT: cmphs16 a0, a2 4174; CHECK-NEXT: mvc32 a0 4175; CHECK-NEXT: st16.w a0, (sp, 4) 4176; CHECK-NEXT: cmpne16 a3, a1 4177; CHECK-NEXT: mvc32 a0 4178; CHECK-NEXT: st16.w a0, (sp, 8) 4179; CHECK-NEXT: ld16.w a0, (sp, 4) 4180; CHECK-NEXT: btsti16 a0, 0 4181; CHECK-NEXT: mvc32 a0 4182; CHECK-NEXT: ld16.w a1, (sp, 12) 4183; CHECK-NEXT: btsti16 a1, 0 4184; CHECK-NEXT: mvc32 a1 4185; CHECK-NEXT: ld16.w a2, (sp, 8) 4186; CHECK-NEXT: btsti16 a2, 0 4187; CHECK-NEXT: movf32 a1, a0 4188; CHECK-NEXT: addi16 a2, sp, 16 4189; CHECK-NEXT: addi16 a0, sp, 24 4190; CHECK-NEXT: btsti16 a1, 0 4191; CHECK-NEXT: movt32 a2, a0 4192; CHECK-NEXT: ld16.w a0, (a2, 0) 4193; CHECK-NEXT: ld16.w a1, (a2, 4) 4194; CHECK-NEXT: addi16 sp, sp, 16 4195; CHECK-NEXT: rts16 4196; 4197; GENERIC-LABEL: selectRR_ule_i64: 4198; GENERIC: # %bb.0: # %entry 4199; GENERIC-NEXT: subi16 sp, sp, 8 4200; GENERIC-NEXT: .cfi_def_cfa_offset 8 4201; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 4202; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 4203; GENERIC-NEXT: .cfi_offset l1, -4 4204; GENERIC-NEXT: .cfi_offset l0, -8 4205; GENERIC-NEXT: subi16 sp, sp, 4 4206; GENERIC-NEXT: .cfi_def_cfa_offset 12 4207; GENERIC-NEXT: cmphs16 a1, a3 4208; GENERIC-NEXT: mvcv16 l1 4209; GENERIC-NEXT: movi16 l0, 1 4210; GENERIC-NEXT: cmphs16 a0, a2 4211; GENERIC-NEXT: mvcv16 a0 4212; GENERIC-NEXT: cmpne16 a3, a1 4213; GENERIC-NEXT: mvcv16 a1 4214; GENERIC-NEXT: btsti16 a1, 0 4215; GENERIC-NEXT: bt16 .LBB106_3 4216; GENERIC-NEXT: # %bb.1: # %entry 4217; GENERIC-NEXT: subu16 l0, l1 4218; GENERIC-NEXT: btsti16 l0, 0 4219; GENERIC-NEXT: bf16 .LBB106_4 4220; GENERIC-NEXT: .LBB106_2: 4221; GENERIC-NEXT: movi16 a0, 20 4222; GENERIC-NEXT: br32 .LBB106_5 4223; GENERIC-NEXT: .LBB106_3: 4224; GENERIC-NEXT: subu16 l0, a0 4225; GENERIC-NEXT: btsti16 l0, 0 4226; GENERIC-NEXT: bt16 .LBB106_2 4227; GENERIC-NEXT: .LBB106_4: # %entry 4228; GENERIC-NEXT: movi16 a0, 12 4229; GENERIC-NEXT: .LBB106_5: # %entry 4230; GENERIC-NEXT: addu16 a0, sp 4231; GENERIC-NEXT: mov16 a1, a0 4232; GENERIC-NEXT: ld16.w a0, (a0, 0) 4233; GENERIC-NEXT: ld16.w a1, (a1, 4) 4234; GENERIC-NEXT: addi16 sp, sp, 4 4235; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 4236; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 4237; GENERIC-NEXT: addi16 sp, sp, 8 4238; GENERIC-NEXT: rts16 4239entry: 4240 %icmp = icmp ule i64 %y, %x 4241 %ret = select i1 %icmp, i64 %m, i64 %n 4242 ret i64 %ret 4243} 4244 4245define i64 @selectRI_ule_i64(i64 %x, i64 %n, i64 %m) { 4246; CHECK-LABEL: selectRI_ule_i64: 4247; CHECK: # %bb.0: # %entry 4248; CHECK-NEXT: .cfi_def_cfa_offset 0 4249; CHECK-NEXT: subi16 sp, sp, 8 4250; CHECK-NEXT: .cfi_def_cfa_offset 8 4251; CHECK-NEXT: ld32.w t0, (sp, 12) 4252; CHECK-NEXT: ld32.w t1, (sp, 8) 4253; CHECK-NEXT: cmpnei16 a1, 0 4254; CHECK-NEXT: st16.w a2, (sp, 0) 4255; CHECK-NEXT: mvc32 a1 4256; CHECK-NEXT: st16.w a1, (sp, 4) 4257; CHECK-NEXT: cmphsi16 a0, 11 4258; CHECK-NEXT: mvcv16 a0 4259; CHECK-NEXT: movi16 a1, 0 4260; CHECK-NEXT: ld16.w a2, (sp, 4) 4261; CHECK-NEXT: btsti16 a2, 0 4262; CHECK-NEXT: ld16.w a2, (sp, 0) 4263; CHECK-NEXT: movf32 a1, a0 4264; CHECK-NEXT: btsti16 a1, 0 4265; CHECK-NEXT: movt32 a2, t1 4266; CHECK-NEXT: movt32 a3, t0 4267; CHECK-NEXT: mov16 a0, a2 4268; CHECK-NEXT: mov16 a1, a3 4269; CHECK-NEXT: addi16 sp, sp, 8 4270; CHECK-NEXT: rts16 4271; 4272; GENERIC-LABEL: selectRI_ule_i64: 4273; GENERIC: # %bb.0: # %entry 4274; GENERIC-NEXT: .cfi_def_cfa_offset 0 4275; GENERIC-NEXT: subi16 sp, sp, 4 4276; GENERIC-NEXT: .cfi_def_cfa_offset 4 4277; GENERIC-NEXT: cmphsi16 a0, 11 4278; GENERIC-NEXT: mvcv16 a0 4279; GENERIC-NEXT: cmpnei16 a1, 0 4280; GENERIC-NEXT: mvcv16 a1 4281; GENERIC-NEXT: btsti16 a1, 0 4282; GENERIC-NEXT: bf16 .LBB107_5 4283; GENERIC-NEXT: # %bb.1: # %entry 4284; GENERIC-NEXT: btsti16 a0, 0 4285; GENERIC-NEXT: bt16 .LBB107_6 4286; GENERIC-NEXT: .LBB107_2: # %entry 4287; GENERIC-NEXT: btsti16 a0, 0 4288; GENERIC-NEXT: bf16 .LBB107_4 4289; GENERIC-NEXT: .LBB107_3: 4290; GENERIC-NEXT: ld16.w a3, (sp, 8) 4291; GENERIC-NEXT: .LBB107_4: # %entry 4292; GENERIC-NEXT: mov16 a0, a2 4293; GENERIC-NEXT: mov16 a1, a3 4294; GENERIC-NEXT: addi16 sp, sp, 4 4295; GENERIC-NEXT: rts16 4296; GENERIC-NEXT: .LBB107_5: # %entry 4297; GENERIC-NEXT: movi16 a0, 0 4298; GENERIC-NEXT: btsti16 a0, 0 4299; GENERIC-NEXT: bf16 .LBB107_2 4300; GENERIC-NEXT: .LBB107_6: 4301; GENERIC-NEXT: ld16.w a2, (sp, 4) 4302; GENERIC-NEXT: btsti16 a0, 0 4303; GENERIC-NEXT: bt16 .LBB107_3 4304; GENERIC-NEXT: br32 .LBB107_4 4305entry: 4306 %icmp = icmp ule i64 %x, 10 4307 %ret = select i1 %icmp, i64 %m, i64 %n 4308 ret i64 %ret 4309} 4310 4311define i64 @selectRX_ule_i64(i64 %x, i64 %n, i64 %m) { 4312; CHECK-LABEL: selectRX_ule_i64: 4313; CHECK: # %bb.0: # %entry 4314; CHECK-NEXT: subi16 sp, sp, 4 4315; CHECK-NEXT: .cfi_def_cfa_offset 4 4316; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 4317; CHECK-NEXT: .cfi_offset l0, -4 4318; CHECK-NEXT: .cfi_def_cfa_offset 4 4319; CHECK-NEXT: ld32.w t0, (sp, 8) 4320; CHECK-NEXT: ld32.w t1, (sp, 4) 4321; CHECK-NEXT: movih32 l0, 729 4322; CHECK-NEXT: ori32 l0, l0, 2034 4323; CHECK-NEXT: cmphs16 a0, l0 4324; CHECK-NEXT: mvcv16 a0 4325; CHECK-NEXT: cmpnei16 a1, 0 4326; CHECK-NEXT: movi16 a1, 0 4327; CHECK-NEXT: movf32 a1, a0 4328; CHECK-NEXT: btsti16 a1, 0 4329; CHECK-NEXT: movt32 a2, t1 4330; CHECK-NEXT: movt32 a3, t0 4331; CHECK-NEXT: mov16 a0, a2 4332; CHECK-NEXT: mov16 a1, a3 4333; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 4334; CHECK-NEXT: addi16 sp, sp, 4 4335; CHECK-NEXT: rts16 4336; 4337; GENERIC-LABEL: selectRX_ule_i64: 4338; GENERIC: # %bb.0: # %entry 4339; GENERIC-NEXT: subi16 sp, sp, 8 4340; GENERIC-NEXT: .cfi_def_cfa_offset 8 4341; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 4342; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 4343; GENERIC-NEXT: .cfi_offset l1, -4 4344; GENERIC-NEXT: .cfi_offset l0, -8 4345; GENERIC-NEXT: subi16 sp, sp, 4 4346; GENERIC-NEXT: .cfi_def_cfa_offset 12 4347; GENERIC-NEXT: movi16 l0, 2 4348; GENERIC-NEXT: lsli16 l0, l0, 24 4349; GENERIC-NEXT: movi16 l1, 217 4350; GENERIC-NEXT: lsli16 l1, l1, 16 4351; GENERIC-NEXT: or16 l1, l0 4352; GENERIC-NEXT: movi16 l0, 7 4353; GENERIC-NEXT: lsli16 l0, l0, 8 4354; GENERIC-NEXT: or16 l0, l1 4355; GENERIC-NEXT: movi16 l1, 242 4356; GENERIC-NEXT: or16 l1, l0 4357; GENERIC-NEXT: cmphs16 a0, l1 4358; GENERIC-NEXT: mvcv16 a0 4359; GENERIC-NEXT: cmpnei16 a1, 0 4360; GENERIC-NEXT: mvcv16 a1 4361; GENERIC-NEXT: btsti16 a1, 0 4362; GENERIC-NEXT: bf16 .LBB108_5 4363; GENERIC-NEXT: # %bb.1: # %entry 4364; GENERIC-NEXT: btsti16 a0, 0 4365; GENERIC-NEXT: bt16 .LBB108_6 4366; GENERIC-NEXT: .LBB108_2: # %entry 4367; GENERIC-NEXT: btsti16 a0, 0 4368; GENERIC-NEXT: bf16 .LBB108_4 4369; GENERIC-NEXT: .LBB108_3: 4370; GENERIC-NEXT: ld16.w a3, (sp, 16) 4371; GENERIC-NEXT: .LBB108_4: # %entry 4372; GENERIC-NEXT: mov16 a0, a2 4373; GENERIC-NEXT: mov16 a1, a3 4374; GENERIC-NEXT: addi16 sp, sp, 4 4375; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 4376; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 4377; GENERIC-NEXT: addi16 sp, sp, 8 4378; GENERIC-NEXT: rts16 4379; GENERIC-NEXT: .LBB108_5: # %entry 4380; GENERIC-NEXT: movi16 a0, 0 4381; GENERIC-NEXT: btsti16 a0, 0 4382; GENERIC-NEXT: bf16 .LBB108_2 4383; GENERIC-NEXT: .LBB108_6: 4384; GENERIC-NEXT: ld16.w a2, (sp, 12) 4385; GENERIC-NEXT: btsti16 a0, 0 4386; GENERIC-NEXT: bt16 .LBB108_3 4387; GENERIC-NEXT: br32 .LBB108_4 4388entry: 4389 %icmp = icmp ule i64 %x, 47777777 4390 %ret = select i1 %icmp, i64 %m, i64 %n 4391 ret i64 %ret 4392} 4393 4394define i64 @selectC_ule_i64(i1 %c, i64 %n, i64 %m) { 4395; CHECK-LABEL: selectC_ule_i64: 4396; CHECK: # %bb.0: # %entry 4397; CHECK-NEXT: ld32.w t0, (sp, 0) 4398; CHECK-NEXT: btsti16 a0, 0 4399; CHECK-NEXT: movt32 a1, a3 4400; CHECK-NEXT: movt32 a2, t0 4401; CHECK-NEXT: mov16 a0, a1 4402; CHECK-NEXT: mov16 a1, a2 4403; CHECK-NEXT: rts16 4404; 4405; GENERIC-LABEL: selectC_ule_i64: 4406; GENERIC: # %bb.0: # %entry 4407; GENERIC-NEXT: .cfi_def_cfa_offset 0 4408; GENERIC-NEXT: subi16 sp, sp, 4 4409; GENERIC-NEXT: .cfi_def_cfa_offset 4 4410; GENERIC-NEXT: btsti16 a0, 0 4411; GENERIC-NEXT: bt16 .LBB109_2 4412; GENERIC-NEXT: # %bb.1: # %entry 4413; GENERIC-NEXT: mov16 a3, a1 4414; GENERIC-NEXT: .LBB109_2: # %entry 4415; GENERIC-NEXT: btsti16 a0, 0 4416; GENERIC-NEXT: bf16 .LBB109_4 4417; GENERIC-NEXT: # %bb.3: 4418; GENERIC-NEXT: ld16.w a2, (sp, 4) 4419; GENERIC-NEXT: .LBB109_4: # %entry 4420; GENERIC-NEXT: mov16 a0, a3 4421; GENERIC-NEXT: mov16 a1, a2 4422; GENERIC-NEXT: addi16 sp, sp, 4 4423; GENERIC-NEXT: rts16 4424entry: 4425 %ret = select i1 %c, i64 %m, i64 %n 4426 ret i64 %ret 4427} 4428 4429 4430define i16 @selectRR_ule_i16(i16 %x, i16 %y, i16 %n, i16 %m) { 4431; CHECK-LABEL: selectRR_ule_i16: 4432; CHECK: # %bb.0: # %entry 4433; CHECK-NEXT: zexth16 a1, a1 4434; CHECK-NEXT: zexth16 a0, a0 4435; CHECK-NEXT: cmphs16 a0, a1 4436; CHECK-NEXT: movt32 a2, a3 4437; CHECK-NEXT: mov16 a0, a2 4438; CHECK-NEXT: rts16 4439; 4440; GENERIC-LABEL: selectRR_ule_i16: 4441; GENERIC: # %bb.0: # %entry 4442; GENERIC-NEXT: subi16 sp, sp, 12 4443; GENERIC-NEXT: .cfi_def_cfa_offset 12 4444; GENERIC-NEXT: st16.w l2, (sp, 8) # 4-byte Folded Spill 4445; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 4446; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 4447; GENERIC-NEXT: .cfi_offset l2, -4 4448; GENERIC-NEXT: .cfi_offset l1, -8 4449; GENERIC-NEXT: .cfi_offset l0, -12 4450; GENERIC-NEXT: subi16 sp, sp, 4 4451; GENERIC-NEXT: .cfi_def_cfa_offset 16 4452; GENERIC-NEXT: movi16 l0, 0 4453; GENERIC-NEXT: lsli16 l1, l0, 24 4454; GENERIC-NEXT: lsli16 l0, l0, 16 4455; GENERIC-NEXT: or16 l0, l1 4456; GENERIC-NEXT: movi16 l1, 255 4457; GENERIC-NEXT: lsli16 l2, l1, 8 4458; GENERIC-NEXT: or16 l2, l0 4459; GENERIC-NEXT: or16 l2, l1 4460; GENERIC-NEXT: and16 a1, l2 4461; GENERIC-NEXT: and16 l2, a0 4462; GENERIC-NEXT: cmphs16 l2, a1 4463; GENERIC-NEXT: mvcv16 a0 4464; GENERIC-NEXT: movi16 a1, 1 4465; GENERIC-NEXT: subu16 a1, a0 4466; GENERIC-NEXT: btsti16 a1, 0 4467; GENERIC-NEXT: bt16 .LBB110_2 4468; GENERIC-NEXT: # %bb.1: # %entry 4469; GENERIC-NEXT: mov16 a3, a2 4470; GENERIC-NEXT: .LBB110_2: # %entry 4471; GENERIC-NEXT: mov16 a0, a3 4472; GENERIC-NEXT: addi16 sp, sp, 4 4473; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 4474; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 4475; GENERIC-NEXT: ld16.w l2, (sp, 8) # 4-byte Folded Reload 4476; GENERIC-NEXT: addi16 sp, sp, 12 4477; GENERIC-NEXT: rts16 4478entry: 4479 %icmp = icmp ule i16 %y, %x 4480 %ret = select i1 %icmp, i16 %m, i16 %n 4481 ret i16 %ret 4482} 4483 4484define i16 @selectRI_ule_i16(i16 %x, i16 %n, i16 %m) { 4485; CHECK-LABEL: selectRI_ule_i16: 4486; CHECK: # %bb.0: # %entry 4487; CHECK-NEXT: zexth16 a0, a0 4488; CHECK-NEXT: cmphsi16 a0, 11 4489; CHECK-NEXT: movf32 a1, a2 4490; CHECK-NEXT: mov16 a0, a1 4491; CHECK-NEXT: rts16 4492; 4493; GENERIC-LABEL: selectRI_ule_i16: 4494; GENERIC: # %bb.0: # %entry 4495; GENERIC-NEXT: subi16 sp, sp, 8 4496; GENERIC-NEXT: .cfi_def_cfa_offset 8 4497; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 4498; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 4499; GENERIC-NEXT: .cfi_offset l1, -4 4500; GENERIC-NEXT: .cfi_offset l0, -8 4501; GENERIC-NEXT: subi16 sp, sp, 4 4502; GENERIC-NEXT: .cfi_def_cfa_offset 12 4503; GENERIC-NEXT: movi16 a3, 0 4504; GENERIC-NEXT: lsli16 l0, a3, 24 4505; GENERIC-NEXT: lsli16 a3, a3, 16 4506; GENERIC-NEXT: or16 a3, l0 4507; GENERIC-NEXT: movi16 l0, 255 4508; GENERIC-NEXT: lsli16 l1, l0, 8 4509; GENERIC-NEXT: or16 l1, a3 4510; GENERIC-NEXT: or16 l1, l0 4511; GENERIC-NEXT: and16 l1, a0 4512; GENERIC-NEXT: cmphsi16 l1, 11 4513; GENERIC-NEXT: mvcv16 a0 4514; GENERIC-NEXT: btsti16 a0, 0 4515; GENERIC-NEXT: bt16 .LBB111_2 4516; GENERIC-NEXT: # %bb.1: # %entry 4517; GENERIC-NEXT: mov16 a2, a1 4518; GENERIC-NEXT: .LBB111_2: # %entry 4519; GENERIC-NEXT: mov16 a0, a2 4520; GENERIC-NEXT: addi16 sp, sp, 4 4521; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 4522; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 4523; GENERIC-NEXT: addi16 sp, sp, 8 4524; GENERIC-NEXT: rts16 4525entry: 4526 %icmp = icmp ule i16 %x, 10 4527 %ret = select i1 %icmp, i16 %m, i16 %n 4528 ret i16 %ret 4529} 4530 4531define i16 @selectRX_ule_i16(i16 %x, i16 %n, i16 %m) { 4532; CHECK-LABEL: selectRX_ule_i16: 4533; CHECK: # %bb.0: # %entry 4534; CHECK-NEXT: zexth16 a0, a0 4535; CHECK-NEXT: cmphsi32 a0, 2034 4536; CHECK-NEXT: movf32 a1, a2 4537; CHECK-NEXT: mov16 a0, a1 4538; CHECK-NEXT: rts16 4539; 4540; GENERIC-LABEL: selectRX_ule_i16: 4541; GENERIC: # %bb.0: # %entry 4542; GENERIC-NEXT: subi16 sp, sp, 8 4543; GENERIC-NEXT: .cfi_def_cfa_offset 8 4544; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 4545; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 4546; GENERIC-NEXT: .cfi_offset l1, -4 4547; GENERIC-NEXT: .cfi_offset l0, -8 4548; GENERIC-NEXT: subi16 sp, sp, 4 4549; GENERIC-NEXT: .cfi_def_cfa_offset 12 4550; GENERIC-NEXT: movi16 a3, 0 4551; GENERIC-NEXT: lsli16 l0, a3, 24 4552; GENERIC-NEXT: lsli16 a3, a3, 16 4553; GENERIC-NEXT: or16 a3, l0 4554; GENERIC-NEXT: movi16 l0, 255 4555; GENERIC-NEXT: lsli16 l1, l0, 8 4556; GENERIC-NEXT: or16 l1, a3 4557; GENERIC-NEXT: or16 l1, l0 4558; GENERIC-NEXT: and16 l1, a0 4559; GENERIC-NEXT: movi16 a0, 7 4560; GENERIC-NEXT: lsli16 a0, a0, 8 4561; GENERIC-NEXT: or16 a0, a3 4562; GENERIC-NEXT: movi16 a3, 242 4563; GENERIC-NEXT: or16 a3, a0 4564; GENERIC-NEXT: cmphs16 l1, a3 4565; GENERIC-NEXT: mvcv16 a0 4566; GENERIC-NEXT: btsti16 a0, 0 4567; GENERIC-NEXT: bt16 .LBB112_2 4568; GENERIC-NEXT: # %bb.1: # %entry 4569; GENERIC-NEXT: mov16 a2, a1 4570; GENERIC-NEXT: .LBB112_2: # %entry 4571; GENERIC-NEXT: mov16 a0, a2 4572; GENERIC-NEXT: addi16 sp, sp, 4 4573; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 4574; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 4575; GENERIC-NEXT: addi16 sp, sp, 8 4576; GENERIC-NEXT: rts16 4577entry: 4578 %icmp = icmp ule i16 %x, 47777777 4579 %ret = select i1 %icmp, i16 %m, i16 %n 4580 ret i16 %ret 4581} 4582 4583define i16 @selectC_ule_i16(i1 %c, i16 %n, i16 %m) { 4584; CHECK-LABEL: selectC_ule_i16: 4585; CHECK: # %bb.0: # %entry 4586; CHECK-NEXT: btsti16 a0, 0 4587; CHECK-NEXT: movt32 a1, a2 4588; CHECK-NEXT: mov16 a0, a1 4589; CHECK-NEXT: rts16 4590; 4591; GENERIC-LABEL: selectC_ule_i16: 4592; GENERIC: # %bb.0: # %entry 4593; GENERIC-NEXT: .cfi_def_cfa_offset 0 4594; GENERIC-NEXT: subi16 sp, sp, 4 4595; GENERIC-NEXT: .cfi_def_cfa_offset 4 4596; GENERIC-NEXT: btsti16 a0, 0 4597; GENERIC-NEXT: bt16 .LBB113_2 4598; GENERIC-NEXT: # %bb.1: # %entry 4599; GENERIC-NEXT: mov16 a2, a1 4600; GENERIC-NEXT: .LBB113_2: # %entry 4601; GENERIC-NEXT: mov16 a0, a2 4602; GENERIC-NEXT: addi16 sp, sp, 4 4603; GENERIC-NEXT: rts16 4604entry: 4605 %ret = select i1 %c, i16 %m, i16 %n 4606 ret i16 %ret 4607} 4608 4609 4610define i8 @selectRR_ule_i8(i8 %x, i8 %y, i8 %n, i8 %m) { 4611; CHECK-LABEL: selectRR_ule_i8: 4612; CHECK: # %bb.0: # %entry 4613; CHECK-NEXT: zextb16 a1, a1 4614; CHECK-NEXT: zextb16 a0, a0 4615; CHECK-NEXT: cmphs16 a0, a1 4616; CHECK-NEXT: movt32 a2, a3 4617; CHECK-NEXT: mov16 a0, a2 4618; CHECK-NEXT: rts16 4619; 4620; GENERIC-LABEL: selectRR_ule_i8: 4621; GENERIC: # %bb.0: # %entry 4622; GENERIC-NEXT: subi16 sp, sp, 4 4623; GENERIC-NEXT: .cfi_def_cfa_offset 4 4624; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 4625; GENERIC-NEXT: .cfi_offset l0, -4 4626; GENERIC-NEXT: subi16 sp, sp, 4 4627; GENERIC-NEXT: .cfi_def_cfa_offset 8 4628; GENERIC-NEXT: movi16 l0, 255 4629; GENERIC-NEXT: and16 a1, l0 4630; GENERIC-NEXT: and16 a0, l0 4631; GENERIC-NEXT: cmphs16 a0, a1 4632; GENERIC-NEXT: mvcv16 a0 4633; GENERIC-NEXT: movi16 a1, 1 4634; GENERIC-NEXT: subu16 a1, a0 4635; GENERIC-NEXT: btsti16 a1, 0 4636; GENERIC-NEXT: bt16 .LBB114_2 4637; GENERIC-NEXT: # %bb.1: # %entry 4638; GENERIC-NEXT: mov16 a3, a2 4639; GENERIC-NEXT: .LBB114_2: # %entry 4640; GENERIC-NEXT: mov16 a0, a3 4641; GENERIC-NEXT: addi16 sp, sp, 4 4642; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 4643; GENERIC-NEXT: addi16 sp, sp, 4 4644; GENERIC-NEXT: rts16 4645entry: 4646 %icmp = icmp ule i8 %y, %x 4647 %ret = select i1 %icmp, i8 %m, i8 %n 4648 ret i8 %ret 4649} 4650 4651define i8 @selectRI_ule_i8(i8 %x, i8 %n, i8 %m) { 4652; CHECK-LABEL: selectRI_ule_i8: 4653; CHECK: # %bb.0: # %entry 4654; CHECK-NEXT: zextb16 a0, a0 4655; CHECK-NEXT: cmphsi16 a0, 11 4656; CHECK-NEXT: movf32 a1, a2 4657; CHECK-NEXT: mov16 a0, a1 4658; CHECK-NEXT: rts16 4659; 4660; GENERIC-LABEL: selectRI_ule_i8: 4661; GENERIC: # %bb.0: # %entry 4662; GENERIC-NEXT: .cfi_def_cfa_offset 0 4663; GENERIC-NEXT: subi16 sp, sp, 4 4664; GENERIC-NEXT: .cfi_def_cfa_offset 4 4665; GENERIC-NEXT: movi16 a3, 255 4666; GENERIC-NEXT: and16 a3, a0 4667; GENERIC-NEXT: cmphsi16 a3, 11 4668; GENERIC-NEXT: mvcv16 a0 4669; GENERIC-NEXT: btsti16 a0, 0 4670; GENERIC-NEXT: bt16 .LBB115_2 4671; GENERIC-NEXT: # %bb.1: # %entry 4672; GENERIC-NEXT: mov16 a2, a1 4673; GENERIC-NEXT: .LBB115_2: # %entry 4674; GENERIC-NEXT: mov16 a0, a2 4675; GENERIC-NEXT: addi16 sp, sp, 4 4676; GENERIC-NEXT: rts16 4677entry: 4678 %icmp = icmp ule i8 %x, 10 4679 %ret = select i1 %icmp, i8 %m, i8 %n 4680 ret i8 %ret 4681} 4682 4683define i8 @selectRX_ule_i8(i8 %x, i8 %n, i8 %m) { 4684; CHECK-LABEL: selectRX_ule_i8: 4685; CHECK: # %bb.0: # %entry 4686; CHECK-NEXT: zextb16 a0, a0 4687; CHECK-NEXT: cmphsi32 a0, 242 4688; CHECK-NEXT: movf32 a1, a2 4689; CHECK-NEXT: mov16 a0, a1 4690; CHECK-NEXT: rts16 4691; 4692; GENERIC-LABEL: selectRX_ule_i8: 4693; GENERIC: # %bb.0: # %entry 4694; GENERIC-NEXT: .cfi_def_cfa_offset 0 4695; GENERIC-NEXT: subi16 sp, sp, 4 4696; GENERIC-NEXT: .cfi_def_cfa_offset 4 4697; GENERIC-NEXT: movi16 a3, 255 4698; GENERIC-NEXT: and16 a3, a0 4699; GENERIC-NEXT: movi16 a0, 242 4700; GENERIC-NEXT: cmphs16 a3, a0 4701; GENERIC-NEXT: mvcv16 a0 4702; GENERIC-NEXT: btsti16 a0, 0 4703; GENERIC-NEXT: bt16 .LBB116_2 4704; GENERIC-NEXT: # %bb.1: # %entry 4705; GENERIC-NEXT: mov16 a2, a1 4706; GENERIC-NEXT: .LBB116_2: # %entry 4707; GENERIC-NEXT: mov16 a0, a2 4708; GENERIC-NEXT: addi16 sp, sp, 4 4709; GENERIC-NEXT: rts16 4710entry: 4711 %icmp = icmp ule i8 %x, 47777777 4712 %ret = select i1 %icmp, i8 %m, i8 %n 4713 ret i8 %ret 4714} 4715 4716define i8 @selectC_ule_i8(i1 %c, i8 %n, i8 %m) { 4717; CHECK-LABEL: selectC_ule_i8: 4718; CHECK: # %bb.0: # %entry 4719; CHECK-NEXT: btsti16 a0, 0 4720; CHECK-NEXT: movt32 a1, a2 4721; CHECK-NEXT: mov16 a0, a1 4722; CHECK-NEXT: rts16 4723; 4724; GENERIC-LABEL: selectC_ule_i8: 4725; GENERIC: # %bb.0: # %entry 4726; GENERIC-NEXT: .cfi_def_cfa_offset 0 4727; GENERIC-NEXT: subi16 sp, sp, 4 4728; GENERIC-NEXT: .cfi_def_cfa_offset 4 4729; GENERIC-NEXT: btsti16 a0, 0 4730; GENERIC-NEXT: bt16 .LBB117_2 4731; GENERIC-NEXT: # %bb.1: # %entry 4732; GENERIC-NEXT: mov16 a2, a1 4733; GENERIC-NEXT: .LBB117_2: # %entry 4734; GENERIC-NEXT: mov16 a0, a2 4735; GENERIC-NEXT: addi16 sp, sp, 4 4736; GENERIC-NEXT: rts16 4737entry: 4738 %ret = select i1 %c, i8 %m, i8 %n 4739 ret i8 %ret 4740} 4741 4742 4743define i1 @selectRR_ule_i1(i1 %x, i1 %y, i1 %n, i1 %m) { 4744; CHECK-LABEL: selectRR_ule_i1: 4745; CHECK: # %bb.0: # %entry 4746; CHECK-NEXT: btsti16 a1, 0 4747; CHECK-NEXT: mov16 a1, a3 4748; CHECK-NEXT: movt32 a1, a2 4749; CHECK-NEXT: btsti16 a0, 0 4750; CHECK-NEXT: movt32 a1, a3 4751; CHECK-NEXT: mov16 a0, a1 4752; CHECK-NEXT: rts16 4753; 4754; GENERIC-LABEL: selectRR_ule_i1: 4755; GENERIC: # %bb.0: # %entry 4756; GENERIC-NEXT: .cfi_def_cfa_offset 0 4757; GENERIC-NEXT: subi16 sp, sp, 4 4758; GENERIC-NEXT: .cfi_def_cfa_offset 4 4759; GENERIC-NEXT: btsti16 a1, 0 4760; GENERIC-NEXT: bt16 .LBB118_2 4761; GENERIC-NEXT: # %bb.1: # %entry 4762; GENERIC-NEXT: mov16 a2, a3 4763; GENERIC-NEXT: .LBB118_2: # %entry 4764; GENERIC-NEXT: btsti16 a0, 0 4765; GENERIC-NEXT: bt16 .LBB118_4 4766; GENERIC-NEXT: # %bb.3: # %entry 4767; GENERIC-NEXT: mov16 a3, a2 4768; GENERIC-NEXT: .LBB118_4: # %entry 4769; GENERIC-NEXT: mov16 a0, a3 4770; GENERIC-NEXT: addi16 sp, sp, 4 4771; GENERIC-NEXT: rts16 4772entry: 4773 %icmp = icmp ule i1 %y, %x 4774 %ret = select i1 %icmp, i1 %m, i1 %n 4775 ret i1 %ret 4776} 4777 4778define i1 @selectRI_ule_i1(i1 %x, i1 %n, i1 %m) { 4779; CHECK-LABEL: selectRI_ule_i1: 4780; CHECK: # %bb.0: # %entry 4781; CHECK-NEXT: btsti16 a0, 0 4782; CHECK-NEXT: movt32 a2, a1 4783; CHECK-NEXT: mov16 a0, a2 4784; CHECK-NEXT: rts16 4785; 4786; GENERIC-LABEL: selectRI_ule_i1: 4787; GENERIC: # %bb.0: # %entry 4788; GENERIC-NEXT: .cfi_def_cfa_offset 0 4789; GENERIC-NEXT: subi16 sp, sp, 4 4790; GENERIC-NEXT: .cfi_def_cfa_offset 4 4791; GENERIC-NEXT: btsti16 a0, 0 4792; GENERIC-NEXT: bt16 .LBB119_2 4793; GENERIC-NEXT: # %bb.1: # %entry 4794; GENERIC-NEXT: mov16 a1, a2 4795; GENERIC-NEXT: .LBB119_2: # %entry 4796; GENERIC-NEXT: mov16 a0, a1 4797; GENERIC-NEXT: addi16 sp, sp, 4 4798; GENERIC-NEXT: rts16 4799entry: 4800 %icmp = icmp ule i1 %x, 10 4801 %ret = select i1 %icmp, i1 %m, i1 %n 4802 ret i1 %ret 4803} 4804 4805define i1 @selectRX_ule_i1(i1 %x, i1 %n, i1 %m) { 4806; CHECK-LABEL: selectRX_ule_i1: 4807; CHECK: # %bb.0: # %entry 4808; CHECK-NEXT: mov16 a0, a2 4809; CHECK-NEXT: rts16 4810; 4811; GENERIC-LABEL: selectRX_ule_i1: 4812; GENERIC: # %bb.0: # %entry 4813; GENERIC-NEXT: .cfi_def_cfa_offset 0 4814; GENERIC-NEXT: subi16 sp, sp, 4 4815; GENERIC-NEXT: .cfi_def_cfa_offset 4 4816; GENERIC-NEXT: mov16 a0, a2 4817; GENERIC-NEXT: addi16 sp, sp, 4 4818; GENERIC-NEXT: rts16 4819entry: 4820 %icmp = icmp ule i1 %x, 47777777 4821 %ret = select i1 %icmp, i1 %m, i1 %n 4822 ret i1 %ret 4823} 4824 4825define i1 @selectC_ule_i1(i1 %c, i1 %n, i1 %m) { 4826; CHECK-LABEL: selectC_ule_i1: 4827; CHECK: # %bb.0: # %entry 4828; CHECK-NEXT: btsti16 a0, 0 4829; CHECK-NEXT: movt32 a1, a2 4830; CHECK-NEXT: mov16 a0, a1 4831; CHECK-NEXT: rts16 4832; 4833; GENERIC-LABEL: selectC_ule_i1: 4834; GENERIC: # %bb.0: # %entry 4835; GENERIC-NEXT: .cfi_def_cfa_offset 0 4836; GENERIC-NEXT: subi16 sp, sp, 4 4837; GENERIC-NEXT: .cfi_def_cfa_offset 4 4838; GENERIC-NEXT: btsti16 a0, 0 4839; GENERIC-NEXT: bt16 .LBB121_2 4840; GENERIC-NEXT: # %bb.1: # %entry 4841; GENERIC-NEXT: mov16 a2, a1 4842; GENERIC-NEXT: .LBB121_2: # %entry 4843; GENERIC-NEXT: mov16 a0, a2 4844; GENERIC-NEXT: addi16 sp, sp, 4 4845; GENERIC-NEXT: rts16 4846entry: 4847 %ret = select i1 %c, i1 %m, i1 %n 4848 ret i1 %ret 4849} 4850 4851 4852define i32 @selectRR_sgt_i32(i32 %x, i32 %y, i32 %n, i32 %m) { 4853; CHECK-LABEL: selectRR_sgt_i32: 4854; CHECK: # %bb.0: # %entry 4855; CHECK-NEXT: cmplt16 a0, a1 4856; CHECK-NEXT: movt32 a2, a3 4857; CHECK-NEXT: mov16 a0, a2 4858; CHECK-NEXT: rts16 4859; 4860; GENERIC-LABEL: selectRR_sgt_i32: 4861; GENERIC: # %bb.0: # %entry 4862; GENERIC-NEXT: .cfi_def_cfa_offset 0 4863; GENERIC-NEXT: subi16 sp, sp, 4 4864; GENERIC-NEXT: .cfi_def_cfa_offset 4 4865; GENERIC-NEXT: cmplt16 a0, a1 4866; GENERIC-NEXT: mvcv16 a0 4867; GENERIC-NEXT: movi16 a1, 1 4868; GENERIC-NEXT: subu16 a1, a0 4869; GENERIC-NEXT: btsti16 a1, 0 4870; GENERIC-NEXT: bt16 .LBB122_2 4871; GENERIC-NEXT: # %bb.1: # %entry 4872; GENERIC-NEXT: mov16 a3, a2 4873; GENERIC-NEXT: .LBB122_2: # %entry 4874; GENERIC-NEXT: mov16 a0, a3 4875; GENERIC-NEXT: addi16 sp, sp, 4 4876; GENERIC-NEXT: rts16 4877entry: 4878 %icmp = icmp sgt i32 %y, %x 4879 %ret = select i1 %icmp, i32 %m, i32 %n 4880 ret i32 %ret 4881} 4882 4883define i32 @selectRI_sgt_i32(i32 %x, i32 %n, i32 %m) { 4884; CHECK-LABEL: selectRI_sgt_i32: 4885; CHECK: # %bb.0: # %entry 4886; CHECK-NEXT: movi16 a3, 10 4887; CHECK-NEXT: cmplt16 a3, a0 4888; CHECK-NEXT: movt32 a1, a2 4889; CHECK-NEXT: mov16 a0, a1 4890; CHECK-NEXT: rts16 4891; 4892; GENERIC-LABEL: selectRI_sgt_i32: 4893; GENERIC: # %bb.0: # %entry 4894; GENERIC-NEXT: .cfi_def_cfa_offset 0 4895; GENERIC-NEXT: subi16 sp, sp, 4 4896; GENERIC-NEXT: .cfi_def_cfa_offset 4 4897; GENERIC-NEXT: movi16 a3, 10 4898; GENERIC-NEXT: cmplt16 a3, a0 4899; GENERIC-NEXT: mvcv16 a0 4900; GENERIC-NEXT: movi16 a3, 1 4901; GENERIC-NEXT: subu16 a3, a0 4902; GENERIC-NEXT: btsti16 a3, 0 4903; GENERIC-NEXT: bt16 .LBB123_2 4904; GENERIC-NEXT: # %bb.1: # %entry 4905; GENERIC-NEXT: mov16 a2, a1 4906; GENERIC-NEXT: .LBB123_2: # %entry 4907; GENERIC-NEXT: mov16 a0, a2 4908; GENERIC-NEXT: addi16 sp, sp, 4 4909; GENERIC-NEXT: rts16 4910entry: 4911 %icmp = icmp sgt i32 %x, 10 4912 %ret = select i1 %icmp, i32 %m, i32 %n 4913 ret i32 %ret 4914} 4915 4916define i32 @selectRX_sgt_i32(i32 %x, i32 %n, i32 %m) { 4917; CHECK-LABEL: selectRX_sgt_i32: 4918; CHECK: # %bb.0: # %entry 4919; CHECK-NEXT: movih32 a3, 729 4920; CHECK-NEXT: ori32 a3, a3, 2033 4921; CHECK-NEXT: cmplt16 a3, a0 4922; CHECK-NEXT: movt32 a1, a2 4923; CHECK-NEXT: mov16 a0, a1 4924; CHECK-NEXT: rts16 4925; 4926; GENERIC-LABEL: selectRX_sgt_i32: 4927; GENERIC: # %bb.0: # %entry 4928; GENERIC-NEXT: subi16 sp, sp, 4 4929; GENERIC-NEXT: .cfi_def_cfa_offset 4 4930; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 4931; GENERIC-NEXT: .cfi_offset l0, -4 4932; GENERIC-NEXT: subi16 sp, sp, 4 4933; GENERIC-NEXT: .cfi_def_cfa_offset 8 4934; GENERIC-NEXT: movi16 a3, 2 4935; GENERIC-NEXT: lsli16 a3, a3, 24 4936; GENERIC-NEXT: movi16 l0, 217 4937; GENERIC-NEXT: lsli16 l0, l0, 16 4938; GENERIC-NEXT: or16 l0, a3 4939; GENERIC-NEXT: movi16 a3, 7 4940; GENERIC-NEXT: lsli16 a3, a3, 8 4941; GENERIC-NEXT: or16 a3, l0 4942; GENERIC-NEXT: movi16 l0, 241 4943; GENERIC-NEXT: or16 l0, a3 4944; GENERIC-NEXT: cmplt16 l0, a0 4945; GENERIC-NEXT: mvcv16 a0 4946; GENERIC-NEXT: movi16 a3, 1 4947; GENERIC-NEXT: subu16 a3, a0 4948; GENERIC-NEXT: btsti16 a3, 0 4949; GENERIC-NEXT: bt16 .LBB124_2 4950; GENERIC-NEXT: # %bb.1: # %entry 4951; GENERIC-NEXT: mov16 a2, a1 4952; GENERIC-NEXT: .LBB124_2: # %entry 4953; GENERIC-NEXT: mov16 a0, a2 4954; GENERIC-NEXT: addi16 sp, sp, 4 4955; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 4956; GENERIC-NEXT: addi16 sp, sp, 4 4957; GENERIC-NEXT: rts16 4958entry: 4959 %icmp = icmp sgt i32 %x, 47777777 4960 %ret = select i1 %icmp, i32 %m, i32 %n 4961 ret i32 %ret 4962} 4963 4964define i32 @selectC_sgt_i32(i1 %c, i32 %n, i32 %m) { 4965; CHECK-LABEL: selectC_sgt_i32: 4966; CHECK: # %bb.0: # %entry 4967; CHECK-NEXT: btsti16 a0, 0 4968; CHECK-NEXT: movt32 a1, a2 4969; CHECK-NEXT: mov16 a0, a1 4970; CHECK-NEXT: rts16 4971; 4972; GENERIC-LABEL: selectC_sgt_i32: 4973; GENERIC: # %bb.0: # %entry 4974; GENERIC-NEXT: .cfi_def_cfa_offset 0 4975; GENERIC-NEXT: subi16 sp, sp, 4 4976; GENERIC-NEXT: .cfi_def_cfa_offset 4 4977; GENERIC-NEXT: btsti16 a0, 0 4978; GENERIC-NEXT: bt16 .LBB125_2 4979; GENERIC-NEXT: # %bb.1: # %entry 4980; GENERIC-NEXT: mov16 a2, a1 4981; GENERIC-NEXT: .LBB125_2: # %entry 4982; GENERIC-NEXT: mov16 a0, a2 4983; GENERIC-NEXT: addi16 sp, sp, 4 4984; GENERIC-NEXT: rts16 4985entry: 4986 %ret = select i1 %c, i32 %m, i32 %n 4987 ret i32 %ret 4988} 4989 4990define i64 @selectRR_sgt_i64(i64 %x, i64 %y, i64 %n, i64 %m) { 4991; CHECK-LABEL: selectRR_sgt_i64: 4992; CHECK: # %bb.0: # %entry 4993; CHECK-NEXT: .cfi_def_cfa_offset 0 4994; CHECK-NEXT: subi16 sp, sp, 12 4995; CHECK-NEXT: .cfi_def_cfa_offset 12 4996; CHECK-NEXT: cmplt16 a1, a3 4997; CHECK-NEXT: mvc32 t0 4998; CHECK-NEXT: st32.w t0, (sp, 4) 4999; CHECK-NEXT: cmpne16 a3, a1 5000; CHECK-NEXT: mvc32 a1 5001; CHECK-NEXT: st16.w a1, (sp, 8) 5002; CHECK-NEXT: cmphs16 a0, a2 5003; CHECK-NEXT: mvcv16 a0 5004; CHECK-NEXT: ld16.w a1, (sp, 4) 5005; CHECK-NEXT: btsti16 a1, 0 5006; CHECK-NEXT: mvc32 a1 5007; CHECK-NEXT: ld16.w a2, (sp, 8) 5008; CHECK-NEXT: btsti16 a2, 0 5009; CHECK-NEXT: movf32 a1, a0 5010; CHECK-NEXT: addi16 a2, sp, 12 5011; CHECK-NEXT: addi16 a0, sp, 20 5012; CHECK-NEXT: btsti16 a1, 0 5013; CHECK-NEXT: movt32 a2, a0 5014; CHECK-NEXT: ld16.w a0, (a2, 0) 5015; CHECK-NEXT: ld16.w a1, (a2, 4) 5016; CHECK-NEXT: addi16 sp, sp, 12 5017; CHECK-NEXT: rts16 5018; 5019; GENERIC-LABEL: selectRR_sgt_i64: 5020; GENERIC: # %bb.0: # %entry 5021; GENERIC-NEXT: subi16 sp, sp, 4 5022; GENERIC-NEXT: .cfi_def_cfa_offset 4 5023; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 5024; GENERIC-NEXT: .cfi_offset l0, -4 5025; GENERIC-NEXT: subi16 sp, sp, 4 5026; GENERIC-NEXT: .cfi_def_cfa_offset 8 5027; GENERIC-NEXT: cmplt16 a1, a3 5028; GENERIC-NEXT: mvcv16 l0 5029; GENERIC-NEXT: cmphs16 a0, a2 5030; GENERIC-NEXT: mvcv16 a0 5031; GENERIC-NEXT: cmpne16 a3, a1 5032; GENERIC-NEXT: mvcv16 a1 5033; GENERIC-NEXT: btsti16 a1, 0 5034; GENERIC-NEXT: bt16 .LBB126_2 5035; GENERIC-NEXT: # %bb.1: # %entry 5036; GENERIC-NEXT: movi16 a0, 1 5037; GENERIC-NEXT: subu16 a0, l0 5038; GENERIC-NEXT: .LBB126_2: # %entry 5039; GENERIC-NEXT: btsti16 a0, 0 5040; GENERIC-NEXT: bt16 .LBB126_4 5041; GENERIC-NEXT: # %bb.3: # %entry 5042; GENERIC-NEXT: movi16 a0, 8 5043; GENERIC-NEXT: br32 .LBB126_5 5044; GENERIC-NEXT: .LBB126_4: 5045; GENERIC-NEXT: movi16 a0, 16 5046; GENERIC-NEXT: .LBB126_5: # %entry 5047; GENERIC-NEXT: addu16 a0, sp 5048; GENERIC-NEXT: mov16 a1, a0 5049; GENERIC-NEXT: ld16.w a0, (a0, 0) 5050; GENERIC-NEXT: ld16.w a1, (a1, 4) 5051; GENERIC-NEXT: addi16 sp, sp, 4 5052; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 5053; GENERIC-NEXT: addi16 sp, sp, 4 5054; GENERIC-NEXT: rts16 5055entry: 5056 %icmp = icmp sgt i64 %y, %x 5057 %ret = select i1 %icmp, i64 %m, i64 %n 5058 ret i64 %ret 5059} 5060 5061define i64 @selectRI_sgt_i64(i64 %x, i64 %n, i64 %m) { 5062; CHECK-LABEL: selectRI_sgt_i64: 5063; CHECK: # %bb.0: # %entry 5064; CHECK-NEXT: subi16 sp, sp, 4 5065; CHECK-NEXT: .cfi_def_cfa_offset 4 5066; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 5067; CHECK-NEXT: .cfi_offset l0, -4 5068; CHECK-NEXT: subi16 sp, sp, 12 5069; CHECK-NEXT: .cfi_def_cfa_offset 16 5070; CHECK-NEXT: ld32.w t0, (sp, 20) 5071; CHECK-NEXT: ld32.w t1, (sp, 16) 5072; CHECK-NEXT: movi16 l0, 0 5073; CHECK-NEXT: cmplt16 l0, a1 5074; CHECK-NEXT: mvc32 l0 5075; CHECK-NEXT: st16.w l0, (sp, 8) 5076; CHECK-NEXT: movi16 l0, 10 5077; CHECK-NEXT: cmphs16 l0, a0 5078; CHECK-NEXT: mvcv16 a0 5079; CHECK-NEXT: cmpnei16 a1, 0 5080; CHECK-NEXT: mvc32 a1 5081; CHECK-NEXT: st16.w a1, (sp, 4) 5082; CHECK-NEXT: ld16.w a1, (sp, 8) 5083; CHECK-NEXT: btsti16 a1, 0 5084; CHECK-NEXT: mvc32 a1 5085; CHECK-NEXT: ld16.w l0, (sp, 4) 5086; CHECK-NEXT: btsti16 l0, 0 5087; CHECK-NEXT: movf32 a1, a0 5088; CHECK-NEXT: btsti16 a1, 0 5089; CHECK-NEXT: movt32 a2, t1 5090; CHECK-NEXT: movt32 a3, t0 5091; CHECK-NEXT: mov16 a0, a2 5092; CHECK-NEXT: mov16 a1, a3 5093; CHECK-NEXT: addi16 sp, sp, 12 5094; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 5095; CHECK-NEXT: addi16 sp, sp, 4 5096; CHECK-NEXT: rts16 5097; 5098; GENERIC-LABEL: selectRI_sgt_i64: 5099; GENERIC: # %bb.0: # %entry 5100; GENERIC-NEXT: subi16 sp, sp, 8 5101; GENERIC-NEXT: .cfi_def_cfa_offset 8 5102; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 5103; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 5104; GENERIC-NEXT: .cfi_offset l1, -4 5105; GENERIC-NEXT: .cfi_offset l0, -8 5106; GENERIC-NEXT: subi16 sp, sp, 4 5107; GENERIC-NEXT: .cfi_def_cfa_offset 12 5108; GENERIC-NEXT: movi16 l0, 0 5109; GENERIC-NEXT: cmplt16 l0, a1 5110; GENERIC-NEXT: mvcv16 l0 5111; GENERIC-NEXT: movi16 l1, 10 5112; GENERIC-NEXT: cmphs16 l1, a0 5113; GENERIC-NEXT: mvcv16 a0 5114; GENERIC-NEXT: cmpnei16 a1, 0 5115; GENERIC-NEXT: mvcv16 a1 5116; GENERIC-NEXT: btsti16 a1, 0 5117; GENERIC-NEXT: bf16 .LBB127_5 5118; GENERIC-NEXT: # %bb.1: # %entry 5119; GENERIC-NEXT: btsti16 a0, 0 5120; GENERIC-NEXT: bt16 .LBB127_6 5121; GENERIC-NEXT: .LBB127_2: # %entry 5122; GENERIC-NEXT: btsti16 a0, 0 5123; GENERIC-NEXT: bf16 .LBB127_4 5124; GENERIC-NEXT: .LBB127_3: 5125; GENERIC-NEXT: ld16.w a3, (sp, 16) 5126; GENERIC-NEXT: .LBB127_4: # %entry 5127; GENERIC-NEXT: mov16 a0, a2 5128; GENERIC-NEXT: mov16 a1, a3 5129; GENERIC-NEXT: addi16 sp, sp, 4 5130; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 5131; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 5132; GENERIC-NEXT: addi16 sp, sp, 8 5133; GENERIC-NEXT: rts16 5134; GENERIC-NEXT: .LBB127_5: # %entry 5135; GENERIC-NEXT: movi16 a0, 1 5136; GENERIC-NEXT: subu16 a0, l0 5137; GENERIC-NEXT: btsti16 a0, 0 5138; GENERIC-NEXT: bf16 .LBB127_2 5139; GENERIC-NEXT: .LBB127_6: 5140; GENERIC-NEXT: ld16.w a2, (sp, 12) 5141; GENERIC-NEXT: btsti16 a0, 0 5142; GENERIC-NEXT: bt16 .LBB127_3 5143; GENERIC-NEXT: br32 .LBB127_4 5144entry: 5145 %icmp = icmp sgt i64 %x, 10 5146 %ret = select i1 %icmp, i64 %m, i64 %n 5147 ret i64 %ret 5148} 5149 5150define i64 @selectRX_sgt_i64(i64 %x, i64 %n, i64 %m) { 5151; CHECK-LABEL: selectRX_sgt_i64: 5152; CHECK: # %bb.0: # %entry 5153; CHECK-NEXT: subi16 sp, sp, 4 5154; CHECK-NEXT: .cfi_def_cfa_offset 4 5155; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 5156; CHECK-NEXT: .cfi_offset l0, -4 5157; CHECK-NEXT: subi16 sp, sp, 12 5158; CHECK-NEXT: .cfi_def_cfa_offset 16 5159; CHECK-NEXT: ld32.w t0, (sp, 20) 5160; CHECK-NEXT: ld32.w t1, (sp, 16) 5161; CHECK-NEXT: movi16 l0, 0 5162; CHECK-NEXT: cmplt16 l0, a1 5163; CHECK-NEXT: mvc32 l0 5164; CHECK-NEXT: st16.w l0, (sp, 8) 5165; CHECK-NEXT: movih32 l0, 729 5166; CHECK-NEXT: ori32 l0, l0, 2033 5167; CHECK-NEXT: cmphs16 l0, a0 5168; CHECK-NEXT: mvcv16 a0 5169; CHECK-NEXT: cmpnei16 a1, 0 5170; CHECK-NEXT: mvc32 a1 5171; CHECK-NEXT: st16.w a1, (sp, 4) 5172; CHECK-NEXT: ld16.w a1, (sp, 8) 5173; CHECK-NEXT: btsti16 a1, 0 5174; CHECK-NEXT: mvc32 a1 5175; CHECK-NEXT: ld16.w l0, (sp, 4) 5176; CHECK-NEXT: btsti16 l0, 0 5177; CHECK-NEXT: movf32 a1, a0 5178; CHECK-NEXT: btsti16 a1, 0 5179; CHECK-NEXT: movt32 a2, t1 5180; CHECK-NEXT: movt32 a3, t0 5181; CHECK-NEXT: mov16 a0, a2 5182; CHECK-NEXT: mov16 a1, a3 5183; CHECK-NEXT: addi16 sp, sp, 12 5184; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 5185; CHECK-NEXT: addi16 sp, sp, 4 5186; CHECK-NEXT: rts16 5187; 5188; GENERIC-LABEL: selectRX_sgt_i64: 5189; GENERIC: # %bb.0: # %entry 5190; GENERIC-NEXT: subi16 sp, sp, 12 5191; GENERIC-NEXT: .cfi_def_cfa_offset 12 5192; GENERIC-NEXT: st16.w l2, (sp, 8) # 4-byte Folded Spill 5193; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 5194; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 5195; GENERIC-NEXT: .cfi_offset l2, -4 5196; GENERIC-NEXT: .cfi_offset l1, -8 5197; GENERIC-NEXT: .cfi_offset l0, -12 5198; GENERIC-NEXT: subi16 sp, sp, 4 5199; GENERIC-NEXT: .cfi_def_cfa_offset 16 5200; GENERIC-NEXT: movi16 l0, 0 5201; GENERIC-NEXT: cmplt16 l0, a1 5202; GENERIC-NEXT: mvcv16 l0 5203; GENERIC-NEXT: movi16 l1, 2 5204; GENERIC-NEXT: lsli16 l1, l1, 24 5205; GENERIC-NEXT: movi16 l2, 217 5206; GENERIC-NEXT: lsli16 l2, l2, 16 5207; GENERIC-NEXT: or16 l2, l1 5208; GENERIC-NEXT: movi16 l1, 7 5209; GENERIC-NEXT: lsli16 l1, l1, 8 5210; GENERIC-NEXT: or16 l1, l2 5211; GENERIC-NEXT: movi16 l2, 241 5212; GENERIC-NEXT: or16 l2, l1 5213; GENERIC-NEXT: cmphs16 l2, a0 5214; GENERIC-NEXT: mvcv16 a0 5215; GENERIC-NEXT: cmpnei16 a1, 0 5216; GENERIC-NEXT: mvcv16 a1 5217; GENERIC-NEXT: btsti16 a1, 0 5218; GENERIC-NEXT: bf16 .LBB128_5 5219; GENERIC-NEXT: # %bb.1: # %entry 5220; GENERIC-NEXT: btsti16 a0, 0 5221; GENERIC-NEXT: bt16 .LBB128_6 5222; GENERIC-NEXT: .LBB128_2: # %entry 5223; GENERIC-NEXT: btsti16 a0, 0 5224; GENERIC-NEXT: bf16 .LBB128_4 5225; GENERIC-NEXT: .LBB128_3: 5226; GENERIC-NEXT: ld16.w a3, (sp, 20) 5227; GENERIC-NEXT: .LBB128_4: # %entry 5228; GENERIC-NEXT: mov16 a0, a2 5229; GENERIC-NEXT: mov16 a1, a3 5230; GENERIC-NEXT: addi16 sp, sp, 4 5231; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 5232; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 5233; GENERIC-NEXT: ld16.w l2, (sp, 8) # 4-byte Folded Reload 5234; GENERIC-NEXT: addi16 sp, sp, 12 5235; GENERIC-NEXT: rts16 5236; GENERIC-NEXT: .LBB128_5: # %entry 5237; GENERIC-NEXT: movi16 a0, 1 5238; GENERIC-NEXT: subu16 a0, l0 5239; GENERIC-NEXT: btsti16 a0, 0 5240; GENERIC-NEXT: bf16 .LBB128_2 5241; GENERIC-NEXT: .LBB128_6: 5242; GENERIC-NEXT: ld16.w a2, (sp, 16) 5243; GENERIC-NEXT: btsti16 a0, 0 5244; GENERIC-NEXT: bt16 .LBB128_3 5245; GENERIC-NEXT: br32 .LBB128_4 5246entry: 5247 %icmp = icmp sgt i64 %x, 47777777 5248 %ret = select i1 %icmp, i64 %m, i64 %n 5249 ret i64 %ret 5250} 5251 5252define i64 @selectC_sgt_i64(i1 %c, i64 %n, i64 %m) { 5253; CHECK-LABEL: selectC_sgt_i64: 5254; CHECK: # %bb.0: # %entry 5255; CHECK-NEXT: ld32.w t0, (sp, 0) 5256; CHECK-NEXT: btsti16 a0, 0 5257; CHECK-NEXT: movt32 a1, a3 5258; CHECK-NEXT: movt32 a2, t0 5259; CHECK-NEXT: mov16 a0, a1 5260; CHECK-NEXT: mov16 a1, a2 5261; CHECK-NEXT: rts16 5262; 5263; GENERIC-LABEL: selectC_sgt_i64: 5264; GENERIC: # %bb.0: # %entry 5265; GENERIC-NEXT: .cfi_def_cfa_offset 0 5266; GENERIC-NEXT: subi16 sp, sp, 4 5267; GENERIC-NEXT: .cfi_def_cfa_offset 4 5268; GENERIC-NEXT: btsti16 a0, 0 5269; GENERIC-NEXT: bt16 .LBB129_2 5270; GENERIC-NEXT: # %bb.1: # %entry 5271; GENERIC-NEXT: mov16 a3, a1 5272; GENERIC-NEXT: .LBB129_2: # %entry 5273; GENERIC-NEXT: btsti16 a0, 0 5274; GENERIC-NEXT: bf16 .LBB129_4 5275; GENERIC-NEXT: # %bb.3: 5276; GENERIC-NEXT: ld16.w a2, (sp, 4) 5277; GENERIC-NEXT: .LBB129_4: # %entry 5278; GENERIC-NEXT: mov16 a0, a3 5279; GENERIC-NEXT: mov16 a1, a2 5280; GENERIC-NEXT: addi16 sp, sp, 4 5281; GENERIC-NEXT: rts16 5282entry: 5283 %ret = select i1 %c, i64 %m, i64 %n 5284 ret i64 %ret 5285} 5286 5287 5288define i16 @selectRR_sgt_i16(i16 %x, i16 %y, i16 %n, i16 %m) { 5289; CHECK-LABEL: selectRR_sgt_i16: 5290; CHECK: # %bb.0: # %entry 5291; CHECK-NEXT: sexth16 a1, a1 5292; CHECK-NEXT: sexth16 a0, a0 5293; CHECK-NEXT: cmplt16 a0, a1 5294; CHECK-NEXT: movt32 a2, a3 5295; CHECK-NEXT: mov16 a0, a2 5296; CHECK-NEXT: rts16 5297; 5298; GENERIC-LABEL: selectRR_sgt_i16: 5299; GENERIC: # %bb.0: # %entry 5300; GENERIC-NEXT: .cfi_def_cfa_offset 0 5301; GENERIC-NEXT: subi16 sp, sp, 4 5302; GENERIC-NEXT: .cfi_def_cfa_offset 4 5303; GENERIC-NEXT: sexth16 a1, a1 5304; GENERIC-NEXT: sexth16 a0, a0 5305; GENERIC-NEXT: cmplt16 a0, a1 5306; GENERIC-NEXT: mvcv16 a0 5307; GENERIC-NEXT: movi16 a1, 1 5308; GENERIC-NEXT: subu16 a1, a0 5309; GENERIC-NEXT: btsti16 a1, 0 5310; GENERIC-NEXT: bt16 .LBB130_2 5311; GENERIC-NEXT: # %bb.1: # %entry 5312; GENERIC-NEXT: mov16 a3, a2 5313; GENERIC-NEXT: .LBB130_2: # %entry 5314; GENERIC-NEXT: mov16 a0, a3 5315; GENERIC-NEXT: addi16 sp, sp, 4 5316; GENERIC-NEXT: rts16 5317entry: 5318 %icmp = icmp sgt i16 %y, %x 5319 %ret = select i1 %icmp, i16 %m, i16 %n 5320 ret i16 %ret 5321} 5322 5323define i16 @selectRI_sgt_i16(i16 %x, i16 %n, i16 %m) { 5324; CHECK-LABEL: selectRI_sgt_i16: 5325; CHECK: # %bb.0: # %entry 5326; CHECK-NEXT: sexth16 a0, a0 5327; CHECK-NEXT: movi16 a3, 10 5328; CHECK-NEXT: cmplt16 a3, a0 5329; CHECK-NEXT: movt32 a1, a2 5330; CHECK-NEXT: mov16 a0, a1 5331; CHECK-NEXT: rts16 5332; 5333; GENERIC-LABEL: selectRI_sgt_i16: 5334; GENERIC: # %bb.0: # %entry 5335; GENERIC-NEXT: .cfi_def_cfa_offset 0 5336; GENERIC-NEXT: subi16 sp, sp, 4 5337; GENERIC-NEXT: .cfi_def_cfa_offset 4 5338; GENERIC-NEXT: sexth16 a0, a0 5339; GENERIC-NEXT: movi16 a3, 10 5340; GENERIC-NEXT: cmplt16 a3, a0 5341; GENERIC-NEXT: mvcv16 a0 5342; GENERIC-NEXT: movi16 a3, 1 5343; GENERIC-NEXT: subu16 a3, a0 5344; GENERIC-NEXT: btsti16 a3, 0 5345; GENERIC-NEXT: bt16 .LBB131_2 5346; GENERIC-NEXT: # %bb.1: # %entry 5347; GENERIC-NEXT: mov16 a2, a1 5348; GENERIC-NEXT: .LBB131_2: # %entry 5349; GENERIC-NEXT: mov16 a0, a2 5350; GENERIC-NEXT: addi16 sp, sp, 4 5351; GENERIC-NEXT: rts16 5352entry: 5353 %icmp = icmp sgt i16 %x, 10 5354 %ret = select i1 %icmp, i16 %m, i16 %n 5355 ret i16 %ret 5356} 5357 5358define i16 @selectRX_sgt_i16(i16 %x, i16 %n, i16 %m) { 5359; CHECK-LABEL: selectRX_sgt_i16: 5360; CHECK: # %bb.0: # %entry 5361; CHECK-NEXT: sexth16 a0, a0 5362; CHECK-NEXT: movi32 a3, 2033 5363; CHECK-NEXT: cmplt16 a3, a0 5364; CHECK-NEXT: movt32 a1, a2 5365; CHECK-NEXT: mov16 a0, a1 5366; CHECK-NEXT: rts16 5367; 5368; GENERIC-LABEL: selectRX_sgt_i16: 5369; GENERIC: # %bb.0: # %entry 5370; GENERIC-NEXT: subi16 sp, sp, 4 5371; GENERIC-NEXT: .cfi_def_cfa_offset 4 5372; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 5373; GENERIC-NEXT: .cfi_offset l0, -4 5374; GENERIC-NEXT: subi16 sp, sp, 4 5375; GENERIC-NEXT: .cfi_def_cfa_offset 8 5376; GENERIC-NEXT: sexth16 a0, a0 5377; GENERIC-NEXT: movi16 a3, 0 5378; GENERIC-NEXT: lsli16 l0, a3, 24 5379; GENERIC-NEXT: lsli16 a3, a3, 16 5380; GENERIC-NEXT: or16 a3, l0 5381; GENERIC-NEXT: movi16 l0, 7 5382; GENERIC-NEXT: lsli16 l0, l0, 8 5383; GENERIC-NEXT: or16 l0, a3 5384; GENERIC-NEXT: movi16 a3, 241 5385; GENERIC-NEXT: or16 a3, l0 5386; GENERIC-NEXT: cmplt16 a3, a0 5387; GENERIC-NEXT: mvcv16 a0 5388; GENERIC-NEXT: movi16 a3, 1 5389; GENERIC-NEXT: subu16 a3, a0 5390; GENERIC-NEXT: btsti16 a3, 0 5391; GENERIC-NEXT: bt16 .LBB132_2 5392; GENERIC-NEXT: # %bb.1: # %entry 5393; GENERIC-NEXT: mov16 a2, a1 5394; GENERIC-NEXT: .LBB132_2: # %entry 5395; GENERIC-NEXT: mov16 a0, a2 5396; GENERIC-NEXT: addi16 sp, sp, 4 5397; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 5398; GENERIC-NEXT: addi16 sp, sp, 4 5399; GENERIC-NEXT: rts16 5400entry: 5401 %icmp = icmp sgt i16 %x, 47777777 5402 %ret = select i1 %icmp, i16 %m, i16 %n 5403 ret i16 %ret 5404} 5405 5406define i16 @selectC_sgt_i16(i1 %c, i16 %n, i16 %m) { 5407; CHECK-LABEL: selectC_sgt_i16: 5408; CHECK: # %bb.0: # %entry 5409; CHECK-NEXT: btsti16 a0, 0 5410; CHECK-NEXT: movt32 a1, a2 5411; CHECK-NEXT: mov16 a0, a1 5412; CHECK-NEXT: rts16 5413; 5414; GENERIC-LABEL: selectC_sgt_i16: 5415; GENERIC: # %bb.0: # %entry 5416; GENERIC-NEXT: .cfi_def_cfa_offset 0 5417; GENERIC-NEXT: subi16 sp, sp, 4 5418; GENERIC-NEXT: .cfi_def_cfa_offset 4 5419; GENERIC-NEXT: btsti16 a0, 0 5420; GENERIC-NEXT: bt16 .LBB133_2 5421; GENERIC-NEXT: # %bb.1: # %entry 5422; GENERIC-NEXT: mov16 a2, a1 5423; GENERIC-NEXT: .LBB133_2: # %entry 5424; GENERIC-NEXT: mov16 a0, a2 5425; GENERIC-NEXT: addi16 sp, sp, 4 5426; GENERIC-NEXT: rts16 5427entry: 5428 %ret = select i1 %c, i16 %m, i16 %n 5429 ret i16 %ret 5430} 5431 5432 5433define i8 @selectRR_sgt_i8(i8 %x, i8 %y, i8 %n, i8 %m) { 5434; CHECK-LABEL: selectRR_sgt_i8: 5435; CHECK: # %bb.0: # %entry 5436; CHECK-NEXT: sextb16 a1, a1 5437; CHECK-NEXT: sextb16 a0, a0 5438; CHECK-NEXT: cmplt16 a0, a1 5439; CHECK-NEXT: movt32 a2, a3 5440; CHECK-NEXT: mov16 a0, a2 5441; CHECK-NEXT: rts16 5442; 5443; GENERIC-LABEL: selectRR_sgt_i8: 5444; GENERIC: # %bb.0: # %entry 5445; GENERIC-NEXT: .cfi_def_cfa_offset 0 5446; GENERIC-NEXT: subi16 sp, sp, 4 5447; GENERIC-NEXT: .cfi_def_cfa_offset 4 5448; GENERIC-NEXT: sextb16 a1, a1 5449; GENERIC-NEXT: sextb16 a0, a0 5450; GENERIC-NEXT: cmplt16 a0, a1 5451; GENERIC-NEXT: mvcv16 a0 5452; GENERIC-NEXT: movi16 a1, 1 5453; GENERIC-NEXT: subu16 a1, a0 5454; GENERIC-NEXT: btsti16 a1, 0 5455; GENERIC-NEXT: bt16 .LBB134_2 5456; GENERIC-NEXT: # %bb.1: # %entry 5457; GENERIC-NEXT: mov16 a3, a2 5458; GENERIC-NEXT: .LBB134_2: # %entry 5459; GENERIC-NEXT: mov16 a0, a3 5460; GENERIC-NEXT: addi16 sp, sp, 4 5461; GENERIC-NEXT: rts16 5462entry: 5463 %icmp = icmp sgt i8 %y, %x 5464 %ret = select i1 %icmp, i8 %m, i8 %n 5465 ret i8 %ret 5466} 5467 5468define i8 @selectRI_sgt_i8(i8 %x, i8 %n, i8 %m) { 5469; CHECK-LABEL: selectRI_sgt_i8: 5470; CHECK: # %bb.0: # %entry 5471; CHECK-NEXT: sextb16 a0, a0 5472; CHECK-NEXT: movi16 a3, 10 5473; CHECK-NEXT: cmplt16 a3, a0 5474; CHECK-NEXT: movt32 a1, a2 5475; CHECK-NEXT: mov16 a0, a1 5476; CHECK-NEXT: rts16 5477; 5478; GENERIC-LABEL: selectRI_sgt_i8: 5479; GENERIC: # %bb.0: # %entry 5480; GENERIC-NEXT: .cfi_def_cfa_offset 0 5481; GENERIC-NEXT: subi16 sp, sp, 4 5482; GENERIC-NEXT: .cfi_def_cfa_offset 4 5483; GENERIC-NEXT: sextb16 a0, a0 5484; GENERIC-NEXT: movi16 a3, 10 5485; GENERIC-NEXT: cmplt16 a3, a0 5486; GENERIC-NEXT: mvcv16 a0 5487; GENERIC-NEXT: movi16 a3, 1 5488; GENERIC-NEXT: subu16 a3, a0 5489; GENERIC-NEXT: btsti16 a3, 0 5490; GENERIC-NEXT: bt16 .LBB135_2 5491; GENERIC-NEXT: # %bb.1: # %entry 5492; GENERIC-NEXT: mov16 a2, a1 5493; GENERIC-NEXT: .LBB135_2: # %entry 5494; GENERIC-NEXT: mov16 a0, a2 5495; GENERIC-NEXT: addi16 sp, sp, 4 5496; GENERIC-NEXT: rts16 5497entry: 5498 %icmp = icmp sgt i8 %x, 10 5499 %ret = select i1 %icmp, i8 %m, i8 %n 5500 ret i8 %ret 5501} 5502 5503define i8 @selectRX_sgt_i8(i8 %x, i8 %n, i8 %m) { 5504; CHECK-LABEL: selectRX_sgt_i8: 5505; CHECK: # %bb.0: # %entry 5506; CHECK-NEXT: sextb16 a0, a0 5507; CHECK-NEXT: movih32 a3, 65535 5508; CHECK-NEXT: ori32 a3, a3, 65521 5509; CHECK-NEXT: cmplt16 a3, a0 5510; CHECK-NEXT: movt32 a1, a2 5511; CHECK-NEXT: mov16 a0, a1 5512; CHECK-NEXT: rts16 5513; 5514; GENERIC-LABEL: selectRX_sgt_i8: 5515; GENERIC: # %bb.0: # %entry 5516; GENERIC-NEXT: subi16 sp, sp, 8 5517; GENERIC-NEXT: .cfi_def_cfa_offset 8 5518; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 5519; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 5520; GENERIC-NEXT: .cfi_offset l1, -4 5521; GENERIC-NEXT: .cfi_offset l0, -8 5522; GENERIC-NEXT: subi16 sp, sp, 4 5523; GENERIC-NEXT: .cfi_def_cfa_offset 12 5524; GENERIC-NEXT: sextb16 a0, a0 5525; GENERIC-NEXT: movi16 a3, 255 5526; GENERIC-NEXT: lsli16 l0, a3, 24 5527; GENERIC-NEXT: lsli16 l1, a3, 16 5528; GENERIC-NEXT: or16 l1, l0 5529; GENERIC-NEXT: lsli16 a3, a3, 8 5530; GENERIC-NEXT: or16 a3, l1 5531; GENERIC-NEXT: movi16 l0, 241 5532; GENERIC-NEXT: or16 l0, a3 5533; GENERIC-NEXT: cmplt16 l0, a0 5534; GENERIC-NEXT: mvcv16 a0 5535; GENERIC-NEXT: movi16 a3, 1 5536; GENERIC-NEXT: subu16 a3, a0 5537; GENERIC-NEXT: btsti16 a3, 0 5538; GENERIC-NEXT: bt16 .LBB136_2 5539; GENERIC-NEXT: # %bb.1: # %entry 5540; GENERIC-NEXT: mov16 a2, a1 5541; GENERIC-NEXT: .LBB136_2: # %entry 5542; GENERIC-NEXT: mov16 a0, a2 5543; GENERIC-NEXT: addi16 sp, sp, 4 5544; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 5545; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 5546; GENERIC-NEXT: addi16 sp, sp, 8 5547; GENERIC-NEXT: rts16 5548entry: 5549 %icmp = icmp sgt i8 %x, 47777777 5550 %ret = select i1 %icmp, i8 %m, i8 %n 5551 ret i8 %ret 5552} 5553 5554define i8 @selectC_sgt_i8(i1 %c, i8 %n, i8 %m) { 5555; CHECK-LABEL: selectC_sgt_i8: 5556; CHECK: # %bb.0: # %entry 5557; CHECK-NEXT: btsti16 a0, 0 5558; CHECK-NEXT: movt32 a1, a2 5559; CHECK-NEXT: mov16 a0, a1 5560; CHECK-NEXT: rts16 5561; 5562; GENERIC-LABEL: selectC_sgt_i8: 5563; GENERIC: # %bb.0: # %entry 5564; GENERIC-NEXT: .cfi_def_cfa_offset 0 5565; GENERIC-NEXT: subi16 sp, sp, 4 5566; GENERIC-NEXT: .cfi_def_cfa_offset 4 5567; GENERIC-NEXT: btsti16 a0, 0 5568; GENERIC-NEXT: bt16 .LBB137_2 5569; GENERIC-NEXT: # %bb.1: # %entry 5570; GENERIC-NEXT: mov16 a2, a1 5571; GENERIC-NEXT: .LBB137_2: # %entry 5572; GENERIC-NEXT: mov16 a0, a2 5573; GENERIC-NEXT: addi16 sp, sp, 4 5574; GENERIC-NEXT: rts16 5575entry: 5576 %ret = select i1 %c, i8 %m, i8 %n 5577 ret i8 %ret 5578} 5579 5580 5581define i1 @selectRR_sgt_i1(i1 %x, i1 %y, i1 %n, i1 %m) { 5582; CHECK-LABEL: selectRR_sgt_i1: 5583; CHECK: # %bb.0: # %entry 5584; CHECK-NEXT: btsti16 a1, 0 5585; CHECK-NEXT: movt32 a3, a2 5586; CHECK-NEXT: btsti16 a0, 0 5587; CHECK-NEXT: movt32 a2, a3 5588; CHECK-NEXT: mov16 a0, a2 5589; CHECK-NEXT: rts16 5590; 5591; GENERIC-LABEL: selectRR_sgt_i1: 5592; GENERIC: # %bb.0: # %entry 5593; GENERIC-NEXT: subi16 sp, sp, 4 5594; GENERIC-NEXT: .cfi_def_cfa_offset 4 5595; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 5596; GENERIC-NEXT: .cfi_offset l0, -4 5597; GENERIC-NEXT: subi16 sp, sp, 4 5598; GENERIC-NEXT: .cfi_def_cfa_offset 8 5599; GENERIC-NEXT: mov16 l0, a0 5600; GENERIC-NEXT: btsti16 a1, 0 5601; GENERIC-NEXT: mov16 a0, a2 5602; GENERIC-NEXT: bt16 .LBB138_2 5603; GENERIC-NEXT: # %bb.1: # %entry 5604; GENERIC-NEXT: mov16 a0, a3 5605; GENERIC-NEXT: .LBB138_2: # %entry 5606; GENERIC-NEXT: btsti16 l0, 0 5607; GENERIC-NEXT: bt16 .LBB138_4 5608; GENERIC-NEXT: # %bb.3: # %entry 5609; GENERIC-NEXT: mov16 a0, a2 5610; GENERIC-NEXT: .LBB138_4: # %entry 5611; GENERIC-NEXT: addi16 sp, sp, 4 5612; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 5613; GENERIC-NEXT: addi16 sp, sp, 4 5614; GENERIC-NEXT: rts16 5615entry: 5616 %icmp = icmp sgt i1 %y, %x 5617 %ret = select i1 %icmp, i1 %m, i1 %n 5618 ret i1 %ret 5619} 5620 5621define i1 @selectRI_sgt_i1(i1 %x, i1 %n, i1 %m) { 5622; CHECK-LABEL: selectRI_sgt_i1: 5623; CHECK: # %bb.0: # %entry 5624; CHECK-NEXT: mov16 a0, a1 5625; CHECK-NEXT: rts16 5626; 5627; GENERIC-LABEL: selectRI_sgt_i1: 5628; GENERIC: # %bb.0: # %entry 5629; GENERIC-NEXT: .cfi_def_cfa_offset 0 5630; GENERIC-NEXT: subi16 sp, sp, 4 5631; GENERIC-NEXT: .cfi_def_cfa_offset 4 5632; GENERIC-NEXT: mov16 a0, a1 5633; GENERIC-NEXT: addi16 sp, sp, 4 5634; GENERIC-NEXT: rts16 5635entry: 5636 %icmp = icmp sgt i1 %x, 10 5637 %ret = select i1 %icmp, i1 %m, i1 %n 5638 ret i1 %ret 5639} 5640 5641define i1 @selectRX_sgt_i1(i1 %x, i1 %n, i1 %m) { 5642; CHECK-LABEL: selectRX_sgt_i1: 5643; CHECK: # %bb.0: # %entry 5644; CHECK-NEXT: btsti16 a0, 0 5645; CHECK-NEXT: movt32 a2, a1 5646; CHECK-NEXT: mov16 a0, a2 5647; CHECK-NEXT: rts16 5648; 5649; GENERIC-LABEL: selectRX_sgt_i1: 5650; GENERIC: # %bb.0: # %entry 5651; GENERIC-NEXT: .cfi_def_cfa_offset 0 5652; GENERIC-NEXT: subi16 sp, sp, 4 5653; GENERIC-NEXT: .cfi_def_cfa_offset 4 5654; GENERIC-NEXT: btsti16 a0, 0 5655; GENERIC-NEXT: bt16 .LBB140_2 5656; GENERIC-NEXT: # %bb.1: # %entry 5657; GENERIC-NEXT: mov16 a1, a2 5658; GENERIC-NEXT: .LBB140_2: # %entry 5659; GENERIC-NEXT: mov16 a0, a1 5660; GENERIC-NEXT: addi16 sp, sp, 4 5661; GENERIC-NEXT: rts16 5662entry: 5663 %icmp = icmp sgt i1 %x, 47777777 5664 %ret = select i1 %icmp, i1 %m, i1 %n 5665 ret i1 %ret 5666} 5667 5668define i1 @selectC_sgt_i1(i1 %c, i1 %n, i1 %m) { 5669; CHECK-LABEL: selectC_sgt_i1: 5670; CHECK: # %bb.0: # %entry 5671; CHECK-NEXT: btsti16 a0, 0 5672; CHECK-NEXT: movt32 a1, a2 5673; CHECK-NEXT: mov16 a0, a1 5674; CHECK-NEXT: rts16 5675; 5676; GENERIC-LABEL: selectC_sgt_i1: 5677; GENERIC: # %bb.0: # %entry 5678; GENERIC-NEXT: .cfi_def_cfa_offset 0 5679; GENERIC-NEXT: subi16 sp, sp, 4 5680; GENERIC-NEXT: .cfi_def_cfa_offset 4 5681; GENERIC-NEXT: btsti16 a0, 0 5682; GENERIC-NEXT: bt16 .LBB141_2 5683; GENERIC-NEXT: # %bb.1: # %entry 5684; GENERIC-NEXT: mov16 a2, a1 5685; GENERIC-NEXT: .LBB141_2: # %entry 5686; GENERIC-NEXT: mov16 a0, a2 5687; GENERIC-NEXT: addi16 sp, sp, 4 5688; GENERIC-NEXT: rts16 5689entry: 5690 %ret = select i1 %c, i1 %m, i1 %n 5691 ret i1 %ret 5692} 5693 5694 5695define i32 @selectRR_sge_i32(i32 %x, i32 %y, i32 %n, i32 %m) { 5696; CHECK-LABEL: selectRR_sge_i32: 5697; CHECK: # %bb.0: # %entry 5698; CHECK-NEXT: cmplt16 a1, a0 5699; CHECK-NEXT: movf32 a2, a3 5700; CHECK-NEXT: mov16 a0, a2 5701; CHECK-NEXT: rts16 5702; 5703; GENERIC-LABEL: selectRR_sge_i32: 5704; GENERIC: # %bb.0: # %entry 5705; GENERIC-NEXT: .cfi_def_cfa_offset 0 5706; GENERIC-NEXT: subi16 sp, sp, 4 5707; GENERIC-NEXT: .cfi_def_cfa_offset 4 5708; GENERIC-NEXT: cmplt16 a1, a0 5709; GENERIC-NEXT: mvcv16 a0 5710; GENERIC-NEXT: btsti16 a0, 0 5711; GENERIC-NEXT: bt16 .LBB142_2 5712; GENERIC-NEXT: # %bb.1: # %entry 5713; GENERIC-NEXT: mov16 a3, a2 5714; GENERIC-NEXT: .LBB142_2: # %entry 5715; GENERIC-NEXT: mov16 a0, a3 5716; GENERIC-NEXT: addi16 sp, sp, 4 5717; GENERIC-NEXT: rts16 5718entry: 5719 %icmp = icmp sge i32 %y, %x 5720 %ret = select i1 %icmp, i32 %m, i32 %n 5721 ret i32 %ret 5722} 5723 5724define i32 @selectRI_sge_i32(i32 %x, i32 %n, i32 %m) { 5725; CHECK-LABEL: selectRI_sge_i32: 5726; CHECK: # %bb.0: # %entry 5727; CHECK-NEXT: movi16 a3, 9 5728; CHECK-NEXT: cmplt16 a3, a0 5729; CHECK-NEXT: movt32 a1, a2 5730; CHECK-NEXT: mov16 a0, a1 5731; CHECK-NEXT: rts16 5732; 5733; GENERIC-LABEL: selectRI_sge_i32: 5734; GENERIC: # %bb.0: # %entry 5735; GENERIC-NEXT: .cfi_def_cfa_offset 0 5736; GENERIC-NEXT: subi16 sp, sp, 4 5737; GENERIC-NEXT: .cfi_def_cfa_offset 4 5738; GENERIC-NEXT: movi16 a3, 9 5739; GENERIC-NEXT: cmplt16 a3, a0 5740; GENERIC-NEXT: mvcv16 a0 5741; GENERIC-NEXT: movi16 a3, 1 5742; GENERIC-NEXT: subu16 a3, a0 5743; GENERIC-NEXT: btsti16 a3, 0 5744; GENERIC-NEXT: bt16 .LBB143_2 5745; GENERIC-NEXT: # %bb.1: # %entry 5746; GENERIC-NEXT: mov16 a2, a1 5747; GENERIC-NEXT: .LBB143_2: # %entry 5748; GENERIC-NEXT: mov16 a0, a2 5749; GENERIC-NEXT: addi16 sp, sp, 4 5750; GENERIC-NEXT: rts16 5751entry: 5752 %icmp = icmp sge i32 %x, 10 5753 %ret = select i1 %icmp, i32 %m, i32 %n 5754 ret i32 %ret 5755} 5756 5757define i32 @selectRX_sge_i32(i32 %x, i32 %n, i32 %m) { 5758; CHECK-LABEL: selectRX_sge_i32: 5759; CHECK: # %bb.0: # %entry 5760; CHECK-NEXT: movih32 a3, 729 5761; CHECK-NEXT: ori32 a3, a3, 2032 5762; CHECK-NEXT: cmplt16 a3, a0 5763; CHECK-NEXT: movt32 a1, a2 5764; CHECK-NEXT: mov16 a0, a1 5765; CHECK-NEXT: rts16 5766; 5767; GENERIC-LABEL: selectRX_sge_i32: 5768; GENERIC: # %bb.0: # %entry 5769; GENERIC-NEXT: subi16 sp, sp, 4 5770; GENERIC-NEXT: .cfi_def_cfa_offset 4 5771; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 5772; GENERIC-NEXT: .cfi_offset l0, -4 5773; GENERIC-NEXT: subi16 sp, sp, 4 5774; GENERIC-NEXT: .cfi_def_cfa_offset 8 5775; GENERIC-NEXT: movi16 a3, 2 5776; GENERIC-NEXT: lsli16 a3, a3, 24 5777; GENERIC-NEXT: movi16 l0, 217 5778; GENERIC-NEXT: lsli16 l0, l0, 16 5779; GENERIC-NEXT: or16 l0, a3 5780; GENERIC-NEXT: movi16 a3, 7 5781; GENERIC-NEXT: lsli16 a3, a3, 8 5782; GENERIC-NEXT: or16 a3, l0 5783; GENERIC-NEXT: movi16 l0, 240 5784; GENERIC-NEXT: or16 l0, a3 5785; GENERIC-NEXT: cmplt16 l0, a0 5786; GENERIC-NEXT: mvcv16 a0 5787; GENERIC-NEXT: movi16 a3, 1 5788; GENERIC-NEXT: subu16 a3, a0 5789; GENERIC-NEXT: btsti16 a3, 0 5790; GENERIC-NEXT: bt16 .LBB144_2 5791; GENERIC-NEXT: # %bb.1: # %entry 5792; GENERIC-NEXT: mov16 a2, a1 5793; GENERIC-NEXT: .LBB144_2: # %entry 5794; GENERIC-NEXT: mov16 a0, a2 5795; GENERIC-NEXT: addi16 sp, sp, 4 5796; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 5797; GENERIC-NEXT: addi16 sp, sp, 4 5798; GENERIC-NEXT: rts16 5799entry: 5800 %icmp = icmp sge i32 %x, 47777777 5801 %ret = select i1 %icmp, i32 %m, i32 %n 5802 ret i32 %ret 5803} 5804 5805define i32 @selectC_sge_i32(i1 %c, i32 %n, i32 %m) { 5806; CHECK-LABEL: selectC_sge_i32: 5807; CHECK: # %bb.0: # %entry 5808; CHECK-NEXT: btsti16 a0, 0 5809; CHECK-NEXT: movt32 a1, a2 5810; CHECK-NEXT: mov16 a0, a1 5811; CHECK-NEXT: rts16 5812; 5813; GENERIC-LABEL: selectC_sge_i32: 5814; GENERIC: # %bb.0: # %entry 5815; GENERIC-NEXT: .cfi_def_cfa_offset 0 5816; GENERIC-NEXT: subi16 sp, sp, 4 5817; GENERIC-NEXT: .cfi_def_cfa_offset 4 5818; GENERIC-NEXT: btsti16 a0, 0 5819; GENERIC-NEXT: bt16 .LBB145_2 5820; GENERIC-NEXT: # %bb.1: # %entry 5821; GENERIC-NEXT: mov16 a2, a1 5822; GENERIC-NEXT: .LBB145_2: # %entry 5823; GENERIC-NEXT: mov16 a0, a2 5824; GENERIC-NEXT: addi16 sp, sp, 4 5825; GENERIC-NEXT: rts16 5826entry: 5827 %ret = select i1 %c, i32 %m, i32 %n 5828 ret i32 %ret 5829} 5830 5831define i64 @selectRR_sge_i64(i64 %x, i64 %y, i64 %n, i64 %m) { 5832; CHECK-LABEL: selectRR_sge_i64: 5833; CHECK: # %bb.0: # %entry 5834; CHECK-NEXT: .cfi_def_cfa_offset 0 5835; CHECK-NEXT: subi16 sp, sp, 12 5836; CHECK-NEXT: .cfi_def_cfa_offset 12 5837; CHECK-NEXT: cmphs16 a2, a0 5838; CHECK-NEXT: mvc32 a0 5839; CHECK-NEXT: st16.w a0, (sp, 4) 5840; CHECK-NEXT: cmpne16 a3, a1 5841; CHECK-NEXT: mvc32 a0 5842; CHECK-NEXT: st16.w a0, (sp, 8) 5843; CHECK-NEXT: cmplt16 a3, a1 5844; CHECK-NEXT: mvcv16 a0 5845; CHECK-NEXT: ld16.w a1, (sp, 4) 5846; CHECK-NEXT: btsti16 a1, 0 5847; CHECK-NEXT: mvc32 a1 5848; CHECK-NEXT: ld16.w a2, (sp, 8) 5849; CHECK-NEXT: btsti16 a2, 0 5850; CHECK-NEXT: movf32 a0, a1 5851; CHECK-NEXT: addi16 a1, sp, 12 5852; CHECK-NEXT: addi16 a2, sp, 20 5853; CHECK-NEXT: btsti16 a0, 0 5854; CHECK-NEXT: movt32 a1, a2 5855; CHECK-NEXT: ld16.w a0, (a1, 0) 5856; CHECK-NEXT: ld16.w a1, (a1, 4) 5857; CHECK-NEXT: addi16 sp, sp, 12 5858; CHECK-NEXT: rts16 5859; 5860; GENERIC-LABEL: selectRR_sge_i64: 5861; GENERIC: # %bb.0: # %entry 5862; GENERIC-NEXT: .cfi_def_cfa_offset 0 5863; GENERIC-NEXT: subi16 sp, sp, 4 5864; GENERIC-NEXT: .cfi_def_cfa_offset 4 5865; GENERIC-NEXT: cmphs16 a2, a0 5866; GENERIC-NEXT: mvcv16 a2 5867; GENERIC-NEXT: cmplt16 a3, a1 5868; GENERIC-NEXT: mvcv16 a0 5869; GENERIC-NEXT: cmpne16 a3, a1 5870; GENERIC-NEXT: mvcv16 a1 5871; GENERIC-NEXT: btsti16 a1, 0 5872; GENERIC-NEXT: bf16 .LBB146_2 5873; GENERIC-NEXT: # %bb.1: 5874; GENERIC-NEXT: movi16 a0, 1 5875; GENERIC-NEXT: subu16 a0, a2 5876; GENERIC-NEXT: .LBB146_2: # %entry 5877; GENERIC-NEXT: btsti16 a0, 0 5878; GENERIC-NEXT: bt16 .LBB146_4 5879; GENERIC-NEXT: # %bb.3: # %entry 5880; GENERIC-NEXT: movi16 a0, 4 5881; GENERIC-NEXT: br32 .LBB146_5 5882; GENERIC-NEXT: .LBB146_4: 5883; GENERIC-NEXT: movi16 a0, 12 5884; GENERIC-NEXT: .LBB146_5: # %entry 5885; GENERIC-NEXT: addu16 a0, sp 5886; GENERIC-NEXT: mov16 a1, a0 5887; GENERIC-NEXT: ld16.w a0, (a0, 0) 5888; GENERIC-NEXT: ld16.w a1, (a1, 4) 5889; GENERIC-NEXT: addi16 sp, sp, 4 5890; GENERIC-NEXT: rts16 5891entry: 5892 %icmp = icmp sge i64 %y, %x 5893 %ret = select i1 %icmp, i64 %m, i64 %n 5894 ret i64 %ret 5895} 5896 5897define i64 @selectRI_sge_i64(i64 %x, i64 %n, i64 %m) { 5898; CHECK-LABEL: selectRI_sge_i64: 5899; CHECK: # %bb.0: # %entry 5900; CHECK-NEXT: subi16 sp, sp, 4 5901; CHECK-NEXT: .cfi_def_cfa_offset 4 5902; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 5903; CHECK-NEXT: .cfi_offset l0, -4 5904; CHECK-NEXT: subi16 sp, sp, 12 5905; CHECK-NEXT: .cfi_def_cfa_offset 16 5906; CHECK-NEXT: ld32.w t0, (sp, 20) 5907; CHECK-NEXT: ld32.w t1, (sp, 16) 5908; CHECK-NEXT: movi16 l0, 0 5909; CHECK-NEXT: cmplt16 l0, a1 5910; CHECK-NEXT: mvc32 l0 5911; CHECK-NEXT: st16.w l0, (sp, 8) 5912; CHECK-NEXT: movi16 l0, 9 5913; CHECK-NEXT: cmphs16 l0, a0 5914; CHECK-NEXT: mvcv16 a0 5915; CHECK-NEXT: cmpnei16 a1, 0 5916; CHECK-NEXT: mvc32 a1 5917; CHECK-NEXT: st16.w a1, (sp, 4) 5918; CHECK-NEXT: ld16.w a1, (sp, 8) 5919; CHECK-NEXT: btsti16 a1, 0 5920; CHECK-NEXT: mvc32 a1 5921; CHECK-NEXT: ld16.w l0, (sp, 4) 5922; CHECK-NEXT: btsti16 l0, 0 5923; CHECK-NEXT: movf32 a1, a0 5924; CHECK-NEXT: btsti16 a1, 0 5925; CHECK-NEXT: movt32 a2, t1 5926; CHECK-NEXT: movt32 a3, t0 5927; CHECK-NEXT: mov16 a0, a2 5928; CHECK-NEXT: mov16 a1, a3 5929; CHECK-NEXT: addi16 sp, sp, 12 5930; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 5931; CHECK-NEXT: addi16 sp, sp, 4 5932; CHECK-NEXT: rts16 5933; 5934; GENERIC-LABEL: selectRI_sge_i64: 5935; GENERIC: # %bb.0: # %entry 5936; GENERIC-NEXT: subi16 sp, sp, 8 5937; GENERIC-NEXT: .cfi_def_cfa_offset 8 5938; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 5939; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 5940; GENERIC-NEXT: .cfi_offset l1, -4 5941; GENERIC-NEXT: .cfi_offset l0, -8 5942; GENERIC-NEXT: subi16 sp, sp, 4 5943; GENERIC-NEXT: .cfi_def_cfa_offset 12 5944; GENERIC-NEXT: movi16 l0, 0 5945; GENERIC-NEXT: cmplt16 l0, a1 5946; GENERIC-NEXT: mvcv16 l0 5947; GENERIC-NEXT: movi16 l1, 9 5948; GENERIC-NEXT: cmphs16 l1, a0 5949; GENERIC-NEXT: mvcv16 a0 5950; GENERIC-NEXT: cmpnei16 a1, 0 5951; GENERIC-NEXT: mvcv16 a1 5952; GENERIC-NEXT: btsti16 a1, 0 5953; GENERIC-NEXT: bf16 .LBB147_5 5954; GENERIC-NEXT: # %bb.1: # %entry 5955; GENERIC-NEXT: btsti16 a0, 0 5956; GENERIC-NEXT: bt16 .LBB147_6 5957; GENERIC-NEXT: .LBB147_2: # %entry 5958; GENERIC-NEXT: btsti16 a0, 0 5959; GENERIC-NEXT: bf16 .LBB147_4 5960; GENERIC-NEXT: .LBB147_3: 5961; GENERIC-NEXT: ld16.w a3, (sp, 16) 5962; GENERIC-NEXT: .LBB147_4: # %entry 5963; GENERIC-NEXT: mov16 a0, a2 5964; GENERIC-NEXT: mov16 a1, a3 5965; GENERIC-NEXT: addi16 sp, sp, 4 5966; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 5967; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 5968; GENERIC-NEXT: addi16 sp, sp, 8 5969; GENERIC-NEXT: rts16 5970; GENERIC-NEXT: .LBB147_5: # %entry 5971; GENERIC-NEXT: movi16 a0, 1 5972; GENERIC-NEXT: subu16 a0, l0 5973; GENERIC-NEXT: btsti16 a0, 0 5974; GENERIC-NEXT: bf16 .LBB147_2 5975; GENERIC-NEXT: .LBB147_6: 5976; GENERIC-NEXT: ld16.w a2, (sp, 12) 5977; GENERIC-NEXT: btsti16 a0, 0 5978; GENERIC-NEXT: bt16 .LBB147_3 5979; GENERIC-NEXT: br32 .LBB147_4 5980entry: 5981 %icmp = icmp sge i64 %x, 10 5982 %ret = select i1 %icmp, i64 %m, i64 %n 5983 ret i64 %ret 5984} 5985 5986define i64 @selectRX_sge_i64(i64 %x, i64 %n, i64 %m) { 5987; CHECK-LABEL: selectRX_sge_i64: 5988; CHECK: # %bb.0: # %entry 5989; CHECK-NEXT: subi16 sp, sp, 4 5990; CHECK-NEXT: .cfi_def_cfa_offset 4 5991; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 5992; CHECK-NEXT: .cfi_offset l0, -4 5993; CHECK-NEXT: subi16 sp, sp, 12 5994; CHECK-NEXT: .cfi_def_cfa_offset 16 5995; CHECK-NEXT: ld32.w t0, (sp, 20) 5996; CHECK-NEXT: ld32.w t1, (sp, 16) 5997; CHECK-NEXT: movi16 l0, 0 5998; CHECK-NEXT: cmplt16 l0, a1 5999; CHECK-NEXT: mvc32 l0 6000; CHECK-NEXT: st16.w l0, (sp, 8) 6001; CHECK-NEXT: movih32 l0, 729 6002; CHECK-NEXT: ori32 l0, l0, 2032 6003; CHECK-NEXT: cmphs16 l0, a0 6004; CHECK-NEXT: mvcv16 a0 6005; CHECK-NEXT: cmpnei16 a1, 0 6006; CHECK-NEXT: mvc32 a1 6007; CHECK-NEXT: st16.w a1, (sp, 4) 6008; CHECK-NEXT: ld16.w a1, (sp, 8) 6009; CHECK-NEXT: btsti16 a1, 0 6010; CHECK-NEXT: mvc32 a1 6011; CHECK-NEXT: ld16.w l0, (sp, 4) 6012; CHECK-NEXT: btsti16 l0, 0 6013; CHECK-NEXT: movf32 a1, a0 6014; CHECK-NEXT: btsti16 a1, 0 6015; CHECK-NEXT: movt32 a2, t1 6016; CHECK-NEXT: movt32 a3, t0 6017; CHECK-NEXT: mov16 a0, a2 6018; CHECK-NEXT: mov16 a1, a3 6019; CHECK-NEXT: addi16 sp, sp, 12 6020; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 6021; CHECK-NEXT: addi16 sp, sp, 4 6022; CHECK-NEXT: rts16 6023; 6024; GENERIC-LABEL: selectRX_sge_i64: 6025; GENERIC: # %bb.0: # %entry 6026; GENERIC-NEXT: subi16 sp, sp, 12 6027; GENERIC-NEXT: .cfi_def_cfa_offset 12 6028; GENERIC-NEXT: st16.w l2, (sp, 8) # 4-byte Folded Spill 6029; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 6030; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 6031; GENERIC-NEXT: .cfi_offset l2, -4 6032; GENERIC-NEXT: .cfi_offset l1, -8 6033; GENERIC-NEXT: .cfi_offset l0, -12 6034; GENERIC-NEXT: subi16 sp, sp, 4 6035; GENERIC-NEXT: .cfi_def_cfa_offset 16 6036; GENERIC-NEXT: movi16 l0, 0 6037; GENERIC-NEXT: cmplt16 l0, a1 6038; GENERIC-NEXT: mvcv16 l0 6039; GENERIC-NEXT: movi16 l1, 2 6040; GENERIC-NEXT: lsli16 l1, l1, 24 6041; GENERIC-NEXT: movi16 l2, 217 6042; GENERIC-NEXT: lsli16 l2, l2, 16 6043; GENERIC-NEXT: or16 l2, l1 6044; GENERIC-NEXT: movi16 l1, 7 6045; GENERIC-NEXT: lsli16 l1, l1, 8 6046; GENERIC-NEXT: or16 l1, l2 6047; GENERIC-NEXT: movi16 l2, 240 6048; GENERIC-NEXT: or16 l2, l1 6049; GENERIC-NEXT: cmphs16 l2, a0 6050; GENERIC-NEXT: mvcv16 a0 6051; GENERIC-NEXT: cmpnei16 a1, 0 6052; GENERIC-NEXT: mvcv16 a1 6053; GENERIC-NEXT: btsti16 a1, 0 6054; GENERIC-NEXT: bf16 .LBB148_5 6055; GENERIC-NEXT: # %bb.1: # %entry 6056; GENERIC-NEXT: btsti16 a0, 0 6057; GENERIC-NEXT: bt16 .LBB148_6 6058; GENERIC-NEXT: .LBB148_2: # %entry 6059; GENERIC-NEXT: btsti16 a0, 0 6060; GENERIC-NEXT: bf16 .LBB148_4 6061; GENERIC-NEXT: .LBB148_3: 6062; GENERIC-NEXT: ld16.w a3, (sp, 20) 6063; GENERIC-NEXT: .LBB148_4: # %entry 6064; GENERIC-NEXT: mov16 a0, a2 6065; GENERIC-NEXT: mov16 a1, a3 6066; GENERIC-NEXT: addi16 sp, sp, 4 6067; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 6068; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 6069; GENERIC-NEXT: ld16.w l2, (sp, 8) # 4-byte Folded Reload 6070; GENERIC-NEXT: addi16 sp, sp, 12 6071; GENERIC-NEXT: rts16 6072; GENERIC-NEXT: .LBB148_5: # %entry 6073; GENERIC-NEXT: movi16 a0, 1 6074; GENERIC-NEXT: subu16 a0, l0 6075; GENERIC-NEXT: btsti16 a0, 0 6076; GENERIC-NEXT: bf16 .LBB148_2 6077; GENERIC-NEXT: .LBB148_6: 6078; GENERIC-NEXT: ld16.w a2, (sp, 16) 6079; GENERIC-NEXT: btsti16 a0, 0 6080; GENERIC-NEXT: bt16 .LBB148_3 6081; GENERIC-NEXT: br32 .LBB148_4 6082entry: 6083 %icmp = icmp sge i64 %x, 47777777 6084 %ret = select i1 %icmp, i64 %m, i64 %n 6085 ret i64 %ret 6086} 6087 6088define i64 @selectC_sge_i64(i1 %c, i64 %n, i64 %m) { 6089; CHECK-LABEL: selectC_sge_i64: 6090; CHECK: # %bb.0: # %entry 6091; CHECK-NEXT: ld32.w t0, (sp, 0) 6092; CHECK-NEXT: btsti16 a0, 0 6093; CHECK-NEXT: movt32 a1, a3 6094; CHECK-NEXT: movt32 a2, t0 6095; CHECK-NEXT: mov16 a0, a1 6096; CHECK-NEXT: mov16 a1, a2 6097; CHECK-NEXT: rts16 6098; 6099; GENERIC-LABEL: selectC_sge_i64: 6100; GENERIC: # %bb.0: # %entry 6101; GENERIC-NEXT: .cfi_def_cfa_offset 0 6102; GENERIC-NEXT: subi16 sp, sp, 4 6103; GENERIC-NEXT: .cfi_def_cfa_offset 4 6104; GENERIC-NEXT: btsti16 a0, 0 6105; GENERIC-NEXT: bt16 .LBB149_2 6106; GENERIC-NEXT: # %bb.1: # %entry 6107; GENERIC-NEXT: mov16 a3, a1 6108; GENERIC-NEXT: .LBB149_2: # %entry 6109; GENERIC-NEXT: btsti16 a0, 0 6110; GENERIC-NEXT: bf16 .LBB149_4 6111; GENERIC-NEXT: # %bb.3: 6112; GENERIC-NEXT: ld16.w a2, (sp, 4) 6113; GENERIC-NEXT: .LBB149_4: # %entry 6114; GENERIC-NEXT: mov16 a0, a3 6115; GENERIC-NEXT: mov16 a1, a2 6116; GENERIC-NEXT: addi16 sp, sp, 4 6117; GENERIC-NEXT: rts16 6118entry: 6119 %ret = select i1 %c, i64 %m, i64 %n 6120 ret i64 %ret 6121} 6122 6123 6124define i16 @selectRR_sge_i16(i16 %x, i16 %y, i16 %n, i16 %m) { 6125; CHECK-LABEL: selectRR_sge_i16: 6126; CHECK: # %bb.0: # %entry 6127; CHECK-NEXT: sexth16 a0, a0 6128; CHECK-NEXT: sexth16 a1, a1 6129; CHECK-NEXT: cmplt16 a1, a0 6130; CHECK-NEXT: movf32 a2, a3 6131; CHECK-NEXT: mov16 a0, a2 6132; CHECK-NEXT: rts16 6133; 6134; GENERIC-LABEL: selectRR_sge_i16: 6135; GENERIC: # %bb.0: # %entry 6136; GENERIC-NEXT: .cfi_def_cfa_offset 0 6137; GENERIC-NEXT: subi16 sp, sp, 4 6138; GENERIC-NEXT: .cfi_def_cfa_offset 4 6139; GENERIC-NEXT: sexth16 a0, a0 6140; GENERIC-NEXT: sexth16 a1, a1 6141; GENERIC-NEXT: cmplt16 a1, a0 6142; GENERIC-NEXT: mvcv16 a0 6143; GENERIC-NEXT: btsti16 a0, 0 6144; GENERIC-NEXT: bt16 .LBB150_2 6145; GENERIC-NEXT: # %bb.1: # %entry 6146; GENERIC-NEXT: mov16 a3, a2 6147; GENERIC-NEXT: .LBB150_2: # %entry 6148; GENERIC-NEXT: mov16 a0, a3 6149; GENERIC-NEXT: addi16 sp, sp, 4 6150; GENERIC-NEXT: rts16 6151entry: 6152 %icmp = icmp sge i16 %y, %x 6153 %ret = select i1 %icmp, i16 %m, i16 %n 6154 ret i16 %ret 6155} 6156 6157define i16 @selectRI_sge_i16(i16 %x, i16 %n, i16 %m) { 6158; CHECK-LABEL: selectRI_sge_i16: 6159; CHECK: # %bb.0: # %entry 6160; CHECK-NEXT: sexth16 a0, a0 6161; CHECK-NEXT: movi16 a3, 9 6162; CHECK-NEXT: cmplt16 a3, a0 6163; CHECK-NEXT: movt32 a1, a2 6164; CHECK-NEXT: mov16 a0, a1 6165; CHECK-NEXT: rts16 6166; 6167; GENERIC-LABEL: selectRI_sge_i16: 6168; GENERIC: # %bb.0: # %entry 6169; GENERIC-NEXT: .cfi_def_cfa_offset 0 6170; GENERIC-NEXT: subi16 sp, sp, 4 6171; GENERIC-NEXT: .cfi_def_cfa_offset 4 6172; GENERIC-NEXT: sexth16 a0, a0 6173; GENERIC-NEXT: movi16 a3, 9 6174; GENERIC-NEXT: cmplt16 a3, a0 6175; GENERIC-NEXT: mvcv16 a0 6176; GENERIC-NEXT: movi16 a3, 1 6177; GENERIC-NEXT: subu16 a3, a0 6178; GENERIC-NEXT: btsti16 a3, 0 6179; GENERIC-NEXT: bt16 .LBB151_2 6180; GENERIC-NEXT: # %bb.1: # %entry 6181; GENERIC-NEXT: mov16 a2, a1 6182; GENERIC-NEXT: .LBB151_2: # %entry 6183; GENERIC-NEXT: mov16 a0, a2 6184; GENERIC-NEXT: addi16 sp, sp, 4 6185; GENERIC-NEXT: rts16 6186entry: 6187 %icmp = icmp sge i16 %x, 10 6188 %ret = select i1 %icmp, i16 %m, i16 %n 6189 ret i16 %ret 6190} 6191 6192define i16 @selectRX_sge_i16(i16 %x, i16 %n, i16 %m) { 6193; CHECK-LABEL: selectRX_sge_i16: 6194; CHECK: # %bb.0: # %entry 6195; CHECK-NEXT: sexth16 a0, a0 6196; CHECK-NEXT: movi32 a3, 2032 6197; CHECK-NEXT: cmplt16 a3, a0 6198; CHECK-NEXT: movt32 a1, a2 6199; CHECK-NEXT: mov16 a0, a1 6200; CHECK-NEXT: rts16 6201; 6202; GENERIC-LABEL: selectRX_sge_i16: 6203; GENERIC: # %bb.0: # %entry 6204; GENERIC-NEXT: subi16 sp, sp, 4 6205; GENERIC-NEXT: .cfi_def_cfa_offset 4 6206; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 6207; GENERIC-NEXT: .cfi_offset l0, -4 6208; GENERIC-NEXT: subi16 sp, sp, 4 6209; GENERIC-NEXT: .cfi_def_cfa_offset 8 6210; GENERIC-NEXT: sexth16 a0, a0 6211; GENERIC-NEXT: movi16 a3, 0 6212; GENERIC-NEXT: lsli16 l0, a3, 24 6213; GENERIC-NEXT: lsli16 a3, a3, 16 6214; GENERIC-NEXT: or16 a3, l0 6215; GENERIC-NEXT: movi16 l0, 7 6216; GENERIC-NEXT: lsli16 l0, l0, 8 6217; GENERIC-NEXT: or16 l0, a3 6218; GENERIC-NEXT: movi16 a3, 240 6219; GENERIC-NEXT: or16 a3, l0 6220; GENERIC-NEXT: cmplt16 a3, a0 6221; GENERIC-NEXT: mvcv16 a0 6222; GENERIC-NEXT: movi16 a3, 1 6223; GENERIC-NEXT: subu16 a3, a0 6224; GENERIC-NEXT: btsti16 a3, 0 6225; GENERIC-NEXT: bt16 .LBB152_2 6226; GENERIC-NEXT: # %bb.1: # %entry 6227; GENERIC-NEXT: mov16 a2, a1 6228; GENERIC-NEXT: .LBB152_2: # %entry 6229; GENERIC-NEXT: mov16 a0, a2 6230; GENERIC-NEXT: addi16 sp, sp, 4 6231; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 6232; GENERIC-NEXT: addi16 sp, sp, 4 6233; GENERIC-NEXT: rts16 6234entry: 6235 %icmp = icmp sge i16 %x, 47777777 6236 %ret = select i1 %icmp, i16 %m, i16 %n 6237 ret i16 %ret 6238} 6239 6240define i16 @selectC_sge_i16(i1 %c, i16 %n, i16 %m) { 6241; CHECK-LABEL: selectC_sge_i16: 6242; CHECK: # %bb.0: # %entry 6243; CHECK-NEXT: btsti16 a0, 0 6244; CHECK-NEXT: movt32 a1, a2 6245; CHECK-NEXT: mov16 a0, a1 6246; CHECK-NEXT: rts16 6247; 6248; GENERIC-LABEL: selectC_sge_i16: 6249; GENERIC: # %bb.0: # %entry 6250; GENERIC-NEXT: .cfi_def_cfa_offset 0 6251; GENERIC-NEXT: subi16 sp, sp, 4 6252; GENERIC-NEXT: .cfi_def_cfa_offset 4 6253; GENERIC-NEXT: btsti16 a0, 0 6254; GENERIC-NEXT: bt16 .LBB153_2 6255; GENERIC-NEXT: # %bb.1: # %entry 6256; GENERIC-NEXT: mov16 a2, a1 6257; GENERIC-NEXT: .LBB153_2: # %entry 6258; GENERIC-NEXT: mov16 a0, a2 6259; GENERIC-NEXT: addi16 sp, sp, 4 6260; GENERIC-NEXT: rts16 6261entry: 6262 %ret = select i1 %c, i16 %m, i16 %n 6263 ret i16 %ret 6264} 6265 6266 6267define i8 @selectRR_sge_i8(i8 %x, i8 %y, i8 %n, i8 %m) { 6268; CHECK-LABEL: selectRR_sge_i8: 6269; CHECK: # %bb.0: # %entry 6270; CHECK-NEXT: sextb16 a0, a0 6271; CHECK-NEXT: sextb16 a1, a1 6272; CHECK-NEXT: cmplt16 a1, a0 6273; CHECK-NEXT: movf32 a2, a3 6274; CHECK-NEXT: mov16 a0, a2 6275; CHECK-NEXT: rts16 6276; 6277; GENERIC-LABEL: selectRR_sge_i8: 6278; GENERIC: # %bb.0: # %entry 6279; GENERIC-NEXT: .cfi_def_cfa_offset 0 6280; GENERIC-NEXT: subi16 sp, sp, 4 6281; GENERIC-NEXT: .cfi_def_cfa_offset 4 6282; GENERIC-NEXT: sextb16 a0, a0 6283; GENERIC-NEXT: sextb16 a1, a1 6284; GENERIC-NEXT: cmplt16 a1, a0 6285; GENERIC-NEXT: mvcv16 a0 6286; GENERIC-NEXT: btsti16 a0, 0 6287; GENERIC-NEXT: bt16 .LBB154_2 6288; GENERIC-NEXT: # %bb.1: # %entry 6289; GENERIC-NEXT: mov16 a3, a2 6290; GENERIC-NEXT: .LBB154_2: # %entry 6291; GENERIC-NEXT: mov16 a0, a3 6292; GENERIC-NEXT: addi16 sp, sp, 4 6293; GENERIC-NEXT: rts16 6294entry: 6295 %icmp = icmp sge i8 %y, %x 6296 %ret = select i1 %icmp, i8 %m, i8 %n 6297 ret i8 %ret 6298} 6299 6300define i8 @selectRI_sge_i8(i8 %x, i8 %n, i8 %m) { 6301; CHECK-LABEL: selectRI_sge_i8: 6302; CHECK: # %bb.0: # %entry 6303; CHECK-NEXT: sextb16 a0, a0 6304; CHECK-NEXT: movi16 a3, 9 6305; CHECK-NEXT: cmplt16 a3, a0 6306; CHECK-NEXT: movt32 a1, a2 6307; CHECK-NEXT: mov16 a0, a1 6308; CHECK-NEXT: rts16 6309; 6310; GENERIC-LABEL: selectRI_sge_i8: 6311; GENERIC: # %bb.0: # %entry 6312; GENERIC-NEXT: .cfi_def_cfa_offset 0 6313; GENERIC-NEXT: subi16 sp, sp, 4 6314; GENERIC-NEXT: .cfi_def_cfa_offset 4 6315; GENERIC-NEXT: sextb16 a0, a0 6316; GENERIC-NEXT: movi16 a3, 9 6317; GENERIC-NEXT: cmplt16 a3, a0 6318; GENERIC-NEXT: mvcv16 a0 6319; GENERIC-NEXT: movi16 a3, 1 6320; GENERIC-NEXT: subu16 a3, a0 6321; GENERIC-NEXT: btsti16 a3, 0 6322; GENERIC-NEXT: bt16 .LBB155_2 6323; GENERIC-NEXT: # %bb.1: # %entry 6324; GENERIC-NEXT: mov16 a2, a1 6325; GENERIC-NEXT: .LBB155_2: # %entry 6326; GENERIC-NEXT: mov16 a0, a2 6327; GENERIC-NEXT: addi16 sp, sp, 4 6328; GENERIC-NEXT: rts16 6329entry: 6330 %icmp = icmp sge i8 %x, 10 6331 %ret = select i1 %icmp, i8 %m, i8 %n 6332 ret i8 %ret 6333} 6334 6335define i8 @selectRX_sge_i8(i8 %x, i8 %n, i8 %m) { 6336; CHECK-LABEL: selectRX_sge_i8: 6337; CHECK: # %bb.0: # %entry 6338; CHECK-NEXT: sextb16 a0, a0 6339; CHECK-NEXT: movih32 a3, 65535 6340; CHECK-NEXT: ori32 a3, a3, 65520 6341; CHECK-NEXT: cmplt16 a3, a0 6342; CHECK-NEXT: movt32 a1, a2 6343; CHECK-NEXT: mov16 a0, a1 6344; CHECK-NEXT: rts16 6345; 6346; GENERIC-LABEL: selectRX_sge_i8: 6347; GENERIC: # %bb.0: # %entry 6348; GENERIC-NEXT: subi16 sp, sp, 8 6349; GENERIC-NEXT: .cfi_def_cfa_offset 8 6350; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 6351; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 6352; GENERIC-NEXT: .cfi_offset l1, -4 6353; GENERIC-NEXT: .cfi_offset l0, -8 6354; GENERIC-NEXT: subi16 sp, sp, 4 6355; GENERIC-NEXT: .cfi_def_cfa_offset 12 6356; GENERIC-NEXT: sextb16 a0, a0 6357; GENERIC-NEXT: movi16 a3, 255 6358; GENERIC-NEXT: lsli16 l0, a3, 24 6359; GENERIC-NEXT: lsli16 l1, a3, 16 6360; GENERIC-NEXT: or16 l1, l0 6361; GENERIC-NEXT: lsli16 a3, a3, 8 6362; GENERIC-NEXT: or16 a3, l1 6363; GENERIC-NEXT: movi16 l0, 240 6364; GENERIC-NEXT: or16 l0, a3 6365; GENERIC-NEXT: cmplt16 l0, a0 6366; GENERIC-NEXT: mvcv16 a0 6367; GENERIC-NEXT: movi16 a3, 1 6368; GENERIC-NEXT: subu16 a3, a0 6369; GENERIC-NEXT: btsti16 a3, 0 6370; GENERIC-NEXT: bt16 .LBB156_2 6371; GENERIC-NEXT: # %bb.1: # %entry 6372; GENERIC-NEXT: mov16 a2, a1 6373; GENERIC-NEXT: .LBB156_2: # %entry 6374; GENERIC-NEXT: mov16 a0, a2 6375; GENERIC-NEXT: addi16 sp, sp, 4 6376; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 6377; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 6378; GENERIC-NEXT: addi16 sp, sp, 8 6379; GENERIC-NEXT: rts16 6380entry: 6381 %icmp = icmp sge i8 %x, 47777777 6382 %ret = select i1 %icmp, i8 %m, i8 %n 6383 ret i8 %ret 6384} 6385 6386define i8 @selectC_sge_i8(i1 %c, i8 %n, i8 %m) { 6387; CHECK-LABEL: selectC_sge_i8: 6388; CHECK: # %bb.0: # %entry 6389; CHECK-NEXT: btsti16 a0, 0 6390; CHECK-NEXT: movt32 a1, a2 6391; CHECK-NEXT: mov16 a0, a1 6392; CHECK-NEXT: rts16 6393; 6394; GENERIC-LABEL: selectC_sge_i8: 6395; GENERIC: # %bb.0: # %entry 6396; GENERIC-NEXT: .cfi_def_cfa_offset 0 6397; GENERIC-NEXT: subi16 sp, sp, 4 6398; GENERIC-NEXT: .cfi_def_cfa_offset 4 6399; GENERIC-NEXT: btsti16 a0, 0 6400; GENERIC-NEXT: bt16 .LBB157_2 6401; GENERIC-NEXT: # %bb.1: # %entry 6402; GENERIC-NEXT: mov16 a2, a1 6403; GENERIC-NEXT: .LBB157_2: # %entry 6404; GENERIC-NEXT: mov16 a0, a2 6405; GENERIC-NEXT: addi16 sp, sp, 4 6406; GENERIC-NEXT: rts16 6407entry: 6408 %ret = select i1 %c, i8 %m, i8 %n 6409 ret i8 %ret 6410} 6411 6412 6413define i1 @selectRR_sge_i1(i1 %x, i1 %y, i1 %n, i1 %m) { 6414; CHECK-LABEL: selectRR_sge_i1: 6415; CHECK: # %bb.0: # %entry 6416; CHECK-NEXT: btsti16 a1, 0 6417; CHECK-NEXT: mov16 a1, a3 6418; CHECK-NEXT: movt32 a1, a2 6419; CHECK-NEXT: btsti16 a0, 0 6420; CHECK-NEXT: movt32 a1, a3 6421; CHECK-NEXT: mov16 a0, a1 6422; CHECK-NEXT: rts16 6423; 6424; GENERIC-LABEL: selectRR_sge_i1: 6425; GENERIC: # %bb.0: # %entry 6426; GENERIC-NEXT: .cfi_def_cfa_offset 0 6427; GENERIC-NEXT: subi16 sp, sp, 4 6428; GENERIC-NEXT: .cfi_def_cfa_offset 4 6429; GENERIC-NEXT: btsti16 a1, 0 6430; GENERIC-NEXT: bt16 .LBB158_2 6431; GENERIC-NEXT: # %bb.1: # %entry 6432; GENERIC-NEXT: mov16 a2, a3 6433; GENERIC-NEXT: .LBB158_2: # %entry 6434; GENERIC-NEXT: btsti16 a0, 0 6435; GENERIC-NEXT: bt16 .LBB158_4 6436; GENERIC-NEXT: # %bb.3: # %entry 6437; GENERIC-NEXT: mov16 a3, a2 6438; GENERIC-NEXT: .LBB158_4: # %entry 6439; GENERIC-NEXT: mov16 a0, a3 6440; GENERIC-NEXT: addi16 sp, sp, 4 6441; GENERIC-NEXT: rts16 6442entry: 6443 %icmp = icmp sge i1 %y, %x 6444 %ret = select i1 %icmp, i1 %m, i1 %n 6445 ret i1 %ret 6446} 6447 6448define i1 @selectRI_sge_i1(i1 %x, i1 %n, i1 %m) { 6449; CHECK-LABEL: selectRI_sge_i1: 6450; CHECK: # %bb.0: # %entry 6451; CHECK-NEXT: btsti16 a0, 0 6452; CHECK-NEXT: movt32 a2, a1 6453; CHECK-NEXT: mov16 a0, a2 6454; CHECK-NEXT: rts16 6455; 6456; GENERIC-LABEL: selectRI_sge_i1: 6457; GENERIC: # %bb.0: # %entry 6458; GENERIC-NEXT: .cfi_def_cfa_offset 0 6459; GENERIC-NEXT: subi16 sp, sp, 4 6460; GENERIC-NEXT: .cfi_def_cfa_offset 4 6461; GENERIC-NEXT: btsti16 a0, 0 6462; GENERIC-NEXT: bt16 .LBB159_2 6463; GENERIC-NEXT: # %bb.1: # %entry 6464; GENERIC-NEXT: mov16 a1, a2 6465; GENERIC-NEXT: .LBB159_2: # %entry 6466; GENERIC-NEXT: mov16 a0, a1 6467; GENERIC-NEXT: addi16 sp, sp, 4 6468; GENERIC-NEXT: rts16 6469entry: 6470 %icmp = icmp sge i1 %x, 10 6471 %ret = select i1 %icmp, i1 %m, i1 %n 6472 ret i1 %ret 6473} 6474 6475define i1 @selectRX_sge_i1(i1 %x, i1 %n, i1 %m) { 6476; CHECK-LABEL: selectRX_sge_i1: 6477; CHECK: # %bb.0: # %entry 6478; CHECK-NEXT: mov16 a0, a2 6479; CHECK-NEXT: rts16 6480; 6481; GENERIC-LABEL: selectRX_sge_i1: 6482; GENERIC: # %bb.0: # %entry 6483; GENERIC-NEXT: .cfi_def_cfa_offset 0 6484; GENERIC-NEXT: subi16 sp, sp, 4 6485; GENERIC-NEXT: .cfi_def_cfa_offset 4 6486; GENERIC-NEXT: mov16 a0, a2 6487; GENERIC-NEXT: addi16 sp, sp, 4 6488; GENERIC-NEXT: rts16 6489entry: 6490 %icmp = icmp sge i1 %x, 47777777 6491 %ret = select i1 %icmp, i1 %m, i1 %n 6492 ret i1 %ret 6493} 6494 6495define i1 @selectC_sge_i1(i1 %c, i1 %n, i1 %m) { 6496; CHECK-LABEL: selectC_sge_i1: 6497; CHECK: # %bb.0: # %entry 6498; CHECK-NEXT: btsti16 a0, 0 6499; CHECK-NEXT: movt32 a1, a2 6500; CHECK-NEXT: mov16 a0, a1 6501; CHECK-NEXT: rts16 6502; 6503; GENERIC-LABEL: selectC_sge_i1: 6504; GENERIC: # %bb.0: # %entry 6505; GENERIC-NEXT: .cfi_def_cfa_offset 0 6506; GENERIC-NEXT: subi16 sp, sp, 4 6507; GENERIC-NEXT: .cfi_def_cfa_offset 4 6508; GENERIC-NEXT: btsti16 a0, 0 6509; GENERIC-NEXT: bt16 .LBB161_2 6510; GENERIC-NEXT: # %bb.1: # %entry 6511; GENERIC-NEXT: mov16 a2, a1 6512; GENERIC-NEXT: .LBB161_2: # %entry 6513; GENERIC-NEXT: mov16 a0, a2 6514; GENERIC-NEXT: addi16 sp, sp, 4 6515; GENERIC-NEXT: rts16 6516entry: 6517 %ret = select i1 %c, i1 %m, i1 %n 6518 ret i1 %ret 6519} 6520 6521 6522define i32 @selectRR_slt_i32(i32 %x, i32 %y, i32 %n, i32 %m) { 6523; CHECK-LABEL: selectRR_slt_i32: 6524; CHECK: # %bb.0: # %entry 6525; CHECK-NEXT: cmplt16 a1, a0 6526; CHECK-NEXT: movt32 a2, a3 6527; CHECK-NEXT: mov16 a0, a2 6528; CHECK-NEXT: rts16 6529; 6530; GENERIC-LABEL: selectRR_slt_i32: 6531; GENERIC: # %bb.0: # %entry 6532; GENERIC-NEXT: .cfi_def_cfa_offset 0 6533; GENERIC-NEXT: subi16 sp, sp, 4 6534; GENERIC-NEXT: .cfi_def_cfa_offset 4 6535; GENERIC-NEXT: cmplt16 a1, a0 6536; GENERIC-NEXT: mvcv16 a0 6537; GENERIC-NEXT: movi16 a1, 1 6538; GENERIC-NEXT: subu16 a1, a0 6539; GENERIC-NEXT: btsti16 a1, 0 6540; GENERIC-NEXT: bt16 .LBB162_2 6541; GENERIC-NEXT: # %bb.1: # %entry 6542; GENERIC-NEXT: mov16 a3, a2 6543; GENERIC-NEXT: .LBB162_2: # %entry 6544; GENERIC-NEXT: mov16 a0, a3 6545; GENERIC-NEXT: addi16 sp, sp, 4 6546; GENERIC-NEXT: rts16 6547entry: 6548 %icmp = icmp slt i32 %y, %x 6549 %ret = select i1 %icmp, i32 %m, i32 %n 6550 ret i32 %ret 6551} 6552 6553define i32 @selectRI_slt_i32(i32 %x, i32 %n, i32 %m) { 6554; CHECK-LABEL: selectRI_slt_i32: 6555; CHECK: # %bb.0: # %entry 6556; CHECK-NEXT: cmplti16 a0, 10 6557; CHECK-NEXT: movt32 a1, a2 6558; CHECK-NEXT: mov16 a0, a1 6559; CHECK-NEXT: rts16 6560; 6561; GENERIC-LABEL: selectRI_slt_i32: 6562; GENERIC: # %bb.0: # %entry 6563; GENERIC-NEXT: .cfi_def_cfa_offset 0 6564; GENERIC-NEXT: subi16 sp, sp, 4 6565; GENERIC-NEXT: .cfi_def_cfa_offset 4 6566; GENERIC-NEXT: cmplti16 a0, 10 6567; GENERIC-NEXT: mvcv16 a0 6568; GENERIC-NEXT: movi16 a3, 1 6569; GENERIC-NEXT: subu16 a3, a0 6570; GENERIC-NEXT: btsti16 a3, 0 6571; GENERIC-NEXT: bt16 .LBB163_2 6572; GENERIC-NEXT: # %bb.1: # %entry 6573; GENERIC-NEXT: mov16 a2, a1 6574; GENERIC-NEXT: .LBB163_2: # %entry 6575; GENERIC-NEXT: mov16 a0, a2 6576; GENERIC-NEXT: addi16 sp, sp, 4 6577; GENERIC-NEXT: rts16 6578entry: 6579 %icmp = icmp slt i32 %x, 10 6580 %ret = select i1 %icmp, i32 %m, i32 %n 6581 ret i32 %ret 6582} 6583 6584define i32 @selectRX_slt_i32(i32 %x, i32 %n, i32 %m) { 6585; CHECK-LABEL: selectRX_slt_i32: 6586; CHECK: # %bb.0: # %entry 6587; CHECK-NEXT: movih32 a3, 729 6588; CHECK-NEXT: ori32 a3, a3, 2033 6589; CHECK-NEXT: cmplt16 a0, a3 6590; CHECK-NEXT: movt32 a1, a2 6591; CHECK-NEXT: mov16 a0, a1 6592; CHECK-NEXT: rts16 6593; 6594; GENERIC-LABEL: selectRX_slt_i32: 6595; GENERIC: # %bb.0: # %entry 6596; GENERIC-NEXT: subi16 sp, sp, 4 6597; GENERIC-NEXT: .cfi_def_cfa_offset 4 6598; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 6599; GENERIC-NEXT: .cfi_offset l0, -4 6600; GENERIC-NEXT: subi16 sp, sp, 4 6601; GENERIC-NEXT: .cfi_def_cfa_offset 8 6602; GENERIC-NEXT: movi16 a3, 2 6603; GENERIC-NEXT: lsli16 a3, a3, 24 6604; GENERIC-NEXT: movi16 l0, 217 6605; GENERIC-NEXT: lsli16 l0, l0, 16 6606; GENERIC-NEXT: or16 l0, a3 6607; GENERIC-NEXT: movi16 a3, 7 6608; GENERIC-NEXT: lsli16 a3, a3, 8 6609; GENERIC-NEXT: or16 a3, l0 6610; GENERIC-NEXT: movi16 l0, 241 6611; GENERIC-NEXT: or16 l0, a3 6612; GENERIC-NEXT: cmplt16 a0, l0 6613; GENERIC-NEXT: mvcv16 a0 6614; GENERIC-NEXT: movi16 a3, 1 6615; GENERIC-NEXT: subu16 a3, a0 6616; GENERIC-NEXT: btsti16 a3, 0 6617; GENERIC-NEXT: bt16 .LBB164_2 6618; GENERIC-NEXT: # %bb.1: # %entry 6619; GENERIC-NEXT: mov16 a2, a1 6620; GENERIC-NEXT: .LBB164_2: # %entry 6621; GENERIC-NEXT: mov16 a0, a2 6622; GENERIC-NEXT: addi16 sp, sp, 4 6623; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 6624; GENERIC-NEXT: addi16 sp, sp, 4 6625; GENERIC-NEXT: rts16 6626entry: 6627 %icmp = icmp slt i32 %x, 47777777 6628 %ret = select i1 %icmp, i32 %m, i32 %n 6629 ret i32 %ret 6630} 6631 6632define i32 @selectC_slt_i32(i1 %c, i32 %n, i32 %m) { 6633; CHECK-LABEL: selectC_slt_i32: 6634; CHECK: # %bb.0: # %entry 6635; CHECK-NEXT: btsti16 a0, 0 6636; CHECK-NEXT: movt32 a1, a2 6637; CHECK-NEXT: mov16 a0, a1 6638; CHECK-NEXT: rts16 6639; 6640; GENERIC-LABEL: selectC_slt_i32: 6641; GENERIC: # %bb.0: # %entry 6642; GENERIC-NEXT: .cfi_def_cfa_offset 0 6643; GENERIC-NEXT: subi16 sp, sp, 4 6644; GENERIC-NEXT: .cfi_def_cfa_offset 4 6645; GENERIC-NEXT: btsti16 a0, 0 6646; GENERIC-NEXT: bt16 .LBB165_2 6647; GENERIC-NEXT: # %bb.1: # %entry 6648; GENERIC-NEXT: mov16 a2, a1 6649; GENERIC-NEXT: .LBB165_2: # %entry 6650; GENERIC-NEXT: mov16 a0, a2 6651; GENERIC-NEXT: addi16 sp, sp, 4 6652; GENERIC-NEXT: rts16 6653entry: 6654 %ret = select i1 %c, i32 %m, i32 %n 6655 ret i32 %ret 6656} 6657 6658define i64 @selectRR_slt_i64(i64 %x, i64 %y, i64 %n, i64 %m) { 6659; CHECK-LABEL: selectRR_slt_i64: 6660; CHECK: # %bb.0: # %entry 6661; CHECK-NEXT: .cfi_def_cfa_offset 0 6662; CHECK-NEXT: subi16 sp, sp, 12 6663; CHECK-NEXT: .cfi_def_cfa_offset 12 6664; CHECK-NEXT: cmplt16 a3, a1 6665; CHECK-NEXT: mvc32 t0 6666; CHECK-NEXT: st32.w t0, (sp, 4) 6667; CHECK-NEXT: cmpne16 a3, a1 6668; CHECK-NEXT: mvc32 a1 6669; CHECK-NEXT: st16.w a1, (sp, 8) 6670; CHECK-NEXT: cmphs16 a2, a0 6671; CHECK-NEXT: mvcv16 a0 6672; CHECK-NEXT: ld16.w a1, (sp, 4) 6673; CHECK-NEXT: btsti16 a1, 0 6674; CHECK-NEXT: mvc32 a1 6675; CHECK-NEXT: ld16.w a2, (sp, 8) 6676; CHECK-NEXT: btsti16 a2, 0 6677; CHECK-NEXT: movf32 a1, a0 6678; CHECK-NEXT: addi16 a2, sp, 12 6679; CHECK-NEXT: addi16 a0, sp, 20 6680; CHECK-NEXT: btsti16 a1, 0 6681; CHECK-NEXT: movt32 a2, a0 6682; CHECK-NEXT: ld16.w a0, (a2, 0) 6683; CHECK-NEXT: ld16.w a1, (a2, 4) 6684; CHECK-NEXT: addi16 sp, sp, 12 6685; CHECK-NEXT: rts16 6686; 6687; GENERIC-LABEL: selectRR_slt_i64: 6688; GENERIC: # %bb.0: # %entry 6689; GENERIC-NEXT: subi16 sp, sp, 4 6690; GENERIC-NEXT: .cfi_def_cfa_offset 4 6691; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 6692; GENERIC-NEXT: .cfi_offset l0, -4 6693; GENERIC-NEXT: subi16 sp, sp, 4 6694; GENERIC-NEXT: .cfi_def_cfa_offset 8 6695; GENERIC-NEXT: cmplt16 a3, a1 6696; GENERIC-NEXT: mvcv16 l0 6697; GENERIC-NEXT: cmphs16 a2, a0 6698; GENERIC-NEXT: mvcv16 a0 6699; GENERIC-NEXT: cmpne16 a3, a1 6700; GENERIC-NEXT: mvcv16 a1 6701; GENERIC-NEXT: btsti16 a1, 0 6702; GENERIC-NEXT: bt16 .LBB166_2 6703; GENERIC-NEXT: # %bb.1: # %entry 6704; GENERIC-NEXT: movi16 a0, 1 6705; GENERIC-NEXT: subu16 a0, l0 6706; GENERIC-NEXT: .LBB166_2: # %entry 6707; GENERIC-NEXT: btsti16 a0, 0 6708; GENERIC-NEXT: bt16 .LBB166_4 6709; GENERIC-NEXT: # %bb.3: # %entry 6710; GENERIC-NEXT: movi16 a0, 8 6711; GENERIC-NEXT: br32 .LBB166_5 6712; GENERIC-NEXT: .LBB166_4: 6713; GENERIC-NEXT: movi16 a0, 16 6714; GENERIC-NEXT: .LBB166_5: # %entry 6715; GENERIC-NEXT: addu16 a0, sp 6716; GENERIC-NEXT: mov16 a1, a0 6717; GENERIC-NEXT: ld16.w a0, (a0, 0) 6718; GENERIC-NEXT: ld16.w a1, (a1, 4) 6719; GENERIC-NEXT: addi16 sp, sp, 4 6720; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 6721; GENERIC-NEXT: addi16 sp, sp, 4 6722; GENERIC-NEXT: rts16 6723entry: 6724 %icmp = icmp slt i64 %y, %x 6725 %ret = select i1 %icmp, i64 %m, i64 %n 6726 ret i64 %ret 6727} 6728 6729define i64 @selectRI_slt_i64(i64 %x, i64 %n, i64 %m) { 6730; CHECK-LABEL: selectRI_slt_i64: 6731; CHECK: # %bb.0: # %entry 6732; CHECK-NEXT: subi16 sp, sp, 4 6733; CHECK-NEXT: .cfi_def_cfa_offset 4 6734; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 6735; CHECK-NEXT: .cfi_offset l0, -4 6736; CHECK-NEXT: subi16 sp, sp, 12 6737; CHECK-NEXT: .cfi_def_cfa_offset 16 6738; CHECK-NEXT: ld32.w t0, (sp, 20) 6739; CHECK-NEXT: ld32.w t1, (sp, 16) 6740; CHECK-NEXT: movi16 l0, 0 6741; CHECK-NEXT: cmplt16 a1, l0 6742; CHECK-NEXT: mvc32 l0 6743; CHECK-NEXT: st16.w l0, (sp, 4) 6744; CHECK-NEXT: cmpnei16 a1, 0 6745; CHECK-NEXT: mvc32 a1 6746; CHECK-NEXT: st16.w a1, (sp, 8) 6747; CHECK-NEXT: cmphsi16 a0, 10 6748; CHECK-NEXT: mvcv16 a0 6749; CHECK-NEXT: ld16.w a1, (sp, 4) 6750; CHECK-NEXT: btsti16 a1, 0 6751; CHECK-NEXT: mvc32 a1 6752; CHECK-NEXT: ld16.w l0, (sp, 8) 6753; CHECK-NEXT: btsti16 l0, 0 6754; CHECK-NEXT: movf32 a1, a0 6755; CHECK-NEXT: btsti16 a1, 0 6756; CHECK-NEXT: movt32 a2, t1 6757; CHECK-NEXT: movt32 a3, t0 6758; CHECK-NEXT: mov16 a0, a2 6759; CHECK-NEXT: mov16 a1, a3 6760; CHECK-NEXT: addi16 sp, sp, 12 6761; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 6762; CHECK-NEXT: addi16 sp, sp, 4 6763; CHECK-NEXT: rts16 6764; 6765; GENERIC-LABEL: selectRI_slt_i64: 6766; GENERIC: # %bb.0: # %entry 6767; GENERIC-NEXT: subi16 sp, sp, 4 6768; GENERIC-NEXT: .cfi_def_cfa_offset 4 6769; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 6770; GENERIC-NEXT: .cfi_offset l0, -4 6771; GENERIC-NEXT: subi16 sp, sp, 4 6772; GENERIC-NEXT: .cfi_def_cfa_offset 8 6773; GENERIC-NEXT: movi16 l0, 0 6774; GENERIC-NEXT: cmplt16 a1, l0 6775; GENERIC-NEXT: mvcv16 l0 6776; GENERIC-NEXT: cmphsi16 a0, 10 6777; GENERIC-NEXT: mvcv16 a0 6778; GENERIC-NEXT: cmpnei16 a1, 0 6779; GENERIC-NEXT: mvcv16 a1 6780; GENERIC-NEXT: btsti16 a1, 0 6781; GENERIC-NEXT: bf16 .LBB167_5 6782; GENERIC-NEXT: # %bb.1: # %entry 6783; GENERIC-NEXT: btsti16 a0, 0 6784; GENERIC-NEXT: bt16 .LBB167_6 6785; GENERIC-NEXT: .LBB167_2: # %entry 6786; GENERIC-NEXT: btsti16 a0, 0 6787; GENERIC-NEXT: bf16 .LBB167_4 6788; GENERIC-NEXT: .LBB167_3: 6789; GENERIC-NEXT: ld16.w a3, (sp, 12) 6790; GENERIC-NEXT: .LBB167_4: # %entry 6791; GENERIC-NEXT: mov16 a0, a2 6792; GENERIC-NEXT: mov16 a1, a3 6793; GENERIC-NEXT: addi16 sp, sp, 4 6794; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 6795; GENERIC-NEXT: addi16 sp, sp, 4 6796; GENERIC-NEXT: rts16 6797; GENERIC-NEXT: .LBB167_5: # %entry 6798; GENERIC-NEXT: movi16 a0, 1 6799; GENERIC-NEXT: subu16 a0, l0 6800; GENERIC-NEXT: btsti16 a0, 0 6801; GENERIC-NEXT: bf16 .LBB167_2 6802; GENERIC-NEXT: .LBB167_6: 6803; GENERIC-NEXT: ld16.w a2, (sp, 8) 6804; GENERIC-NEXT: btsti16 a0, 0 6805; GENERIC-NEXT: bt16 .LBB167_3 6806; GENERIC-NEXT: br32 .LBB167_4 6807entry: 6808 %icmp = icmp slt i64 %x, 10 6809 %ret = select i1 %icmp, i64 %m, i64 %n 6810 ret i64 %ret 6811} 6812 6813define i64 @selectRX_slt_i64(i64 %x, i64 %n, i64 %m) { 6814; CHECK-LABEL: selectRX_slt_i64: 6815; CHECK: # %bb.0: # %entry 6816; CHECK-NEXT: subi16 sp, sp, 4 6817; CHECK-NEXT: .cfi_def_cfa_offset 4 6818; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 6819; CHECK-NEXT: .cfi_offset l0, -4 6820; CHECK-NEXT: subi16 sp, sp, 12 6821; CHECK-NEXT: .cfi_def_cfa_offset 16 6822; CHECK-NEXT: ld32.w t0, (sp, 20) 6823; CHECK-NEXT: ld32.w t1, (sp, 16) 6824; CHECK-NEXT: movi16 l0, 0 6825; CHECK-NEXT: cmplt16 a1, l0 6826; CHECK-NEXT: mvc32 l0 6827; CHECK-NEXT: st16.w l0, (sp, 8) 6828; CHECK-NEXT: movih32 l0, 729 6829; CHECK-NEXT: ori32 l0, l0, 2033 6830; CHECK-NEXT: cmphs16 a0, l0 6831; CHECK-NEXT: mvcv16 a0 6832; CHECK-NEXT: cmpnei16 a1, 0 6833; CHECK-NEXT: mvc32 a1 6834; CHECK-NEXT: st16.w a1, (sp, 4) 6835; CHECK-NEXT: ld16.w a1, (sp, 8) 6836; CHECK-NEXT: btsti16 a1, 0 6837; CHECK-NEXT: mvc32 a1 6838; CHECK-NEXT: ld16.w l0, (sp, 4) 6839; CHECK-NEXT: btsti16 l0, 0 6840; CHECK-NEXT: movf32 a1, a0 6841; CHECK-NEXT: btsti16 a1, 0 6842; CHECK-NEXT: movt32 a2, t1 6843; CHECK-NEXT: movt32 a3, t0 6844; CHECK-NEXT: mov16 a0, a2 6845; CHECK-NEXT: mov16 a1, a3 6846; CHECK-NEXT: addi16 sp, sp, 12 6847; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 6848; CHECK-NEXT: addi16 sp, sp, 4 6849; CHECK-NEXT: rts16 6850; 6851; GENERIC-LABEL: selectRX_slt_i64: 6852; GENERIC: # %bb.0: # %entry 6853; GENERIC-NEXT: subi16 sp, sp, 12 6854; GENERIC-NEXT: .cfi_def_cfa_offset 12 6855; GENERIC-NEXT: st16.w l2, (sp, 8) # 4-byte Folded Spill 6856; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 6857; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 6858; GENERIC-NEXT: .cfi_offset l2, -4 6859; GENERIC-NEXT: .cfi_offset l1, -8 6860; GENERIC-NEXT: .cfi_offset l0, -12 6861; GENERIC-NEXT: subi16 sp, sp, 4 6862; GENERIC-NEXT: .cfi_def_cfa_offset 16 6863; GENERIC-NEXT: movi16 l0, 0 6864; GENERIC-NEXT: cmplt16 a1, l0 6865; GENERIC-NEXT: mvcv16 l0 6866; GENERIC-NEXT: movi16 l1, 2 6867; GENERIC-NEXT: lsli16 l1, l1, 24 6868; GENERIC-NEXT: movi16 l2, 217 6869; GENERIC-NEXT: lsli16 l2, l2, 16 6870; GENERIC-NEXT: or16 l2, l1 6871; GENERIC-NEXT: movi16 l1, 7 6872; GENERIC-NEXT: lsli16 l1, l1, 8 6873; GENERIC-NEXT: or16 l1, l2 6874; GENERIC-NEXT: movi16 l2, 241 6875; GENERIC-NEXT: or16 l2, l1 6876; GENERIC-NEXT: cmphs16 a0, l2 6877; GENERIC-NEXT: mvcv16 a0 6878; GENERIC-NEXT: cmpnei16 a1, 0 6879; GENERIC-NEXT: mvcv16 a1 6880; GENERIC-NEXT: btsti16 a1, 0 6881; GENERIC-NEXT: bf16 .LBB168_5 6882; GENERIC-NEXT: # %bb.1: # %entry 6883; GENERIC-NEXT: btsti16 a0, 0 6884; GENERIC-NEXT: bt16 .LBB168_6 6885; GENERIC-NEXT: .LBB168_2: # %entry 6886; GENERIC-NEXT: btsti16 a0, 0 6887; GENERIC-NEXT: bf16 .LBB168_4 6888; GENERIC-NEXT: .LBB168_3: 6889; GENERIC-NEXT: ld16.w a3, (sp, 20) 6890; GENERIC-NEXT: .LBB168_4: # %entry 6891; GENERIC-NEXT: mov16 a0, a2 6892; GENERIC-NEXT: mov16 a1, a3 6893; GENERIC-NEXT: addi16 sp, sp, 4 6894; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 6895; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 6896; GENERIC-NEXT: ld16.w l2, (sp, 8) # 4-byte Folded Reload 6897; GENERIC-NEXT: addi16 sp, sp, 12 6898; GENERIC-NEXT: rts16 6899; GENERIC-NEXT: .LBB168_5: # %entry 6900; GENERIC-NEXT: movi16 a0, 1 6901; GENERIC-NEXT: subu16 a0, l0 6902; GENERIC-NEXT: btsti16 a0, 0 6903; GENERIC-NEXT: bf16 .LBB168_2 6904; GENERIC-NEXT: .LBB168_6: 6905; GENERIC-NEXT: ld16.w a2, (sp, 16) 6906; GENERIC-NEXT: btsti16 a0, 0 6907; GENERIC-NEXT: bt16 .LBB168_3 6908; GENERIC-NEXT: br32 .LBB168_4 6909entry: 6910 %icmp = icmp slt i64 %x, 47777777 6911 %ret = select i1 %icmp, i64 %m, i64 %n 6912 ret i64 %ret 6913} 6914 6915define i64 @selectC_slt_i64(i1 %c, i64 %n, i64 %m) { 6916; CHECK-LABEL: selectC_slt_i64: 6917; CHECK: # %bb.0: # %entry 6918; CHECK-NEXT: ld32.w t0, (sp, 0) 6919; CHECK-NEXT: btsti16 a0, 0 6920; CHECK-NEXT: movt32 a1, a3 6921; CHECK-NEXT: movt32 a2, t0 6922; CHECK-NEXT: mov16 a0, a1 6923; CHECK-NEXT: mov16 a1, a2 6924; CHECK-NEXT: rts16 6925; 6926; GENERIC-LABEL: selectC_slt_i64: 6927; GENERIC: # %bb.0: # %entry 6928; GENERIC-NEXT: .cfi_def_cfa_offset 0 6929; GENERIC-NEXT: subi16 sp, sp, 4 6930; GENERIC-NEXT: .cfi_def_cfa_offset 4 6931; GENERIC-NEXT: btsti16 a0, 0 6932; GENERIC-NEXT: bt16 .LBB169_2 6933; GENERIC-NEXT: # %bb.1: # %entry 6934; GENERIC-NEXT: mov16 a3, a1 6935; GENERIC-NEXT: .LBB169_2: # %entry 6936; GENERIC-NEXT: btsti16 a0, 0 6937; GENERIC-NEXT: bf16 .LBB169_4 6938; GENERIC-NEXT: # %bb.3: 6939; GENERIC-NEXT: ld16.w a2, (sp, 4) 6940; GENERIC-NEXT: .LBB169_4: # %entry 6941; GENERIC-NEXT: mov16 a0, a3 6942; GENERIC-NEXT: mov16 a1, a2 6943; GENERIC-NEXT: addi16 sp, sp, 4 6944; GENERIC-NEXT: rts16 6945entry: 6946 %ret = select i1 %c, i64 %m, i64 %n 6947 ret i64 %ret 6948} 6949 6950 6951define i16 @selectRR_slt_i16(i16 %x, i16 %y, i16 %n, i16 %m) { 6952; CHECK-LABEL: selectRR_slt_i16: 6953; CHECK: # %bb.0: # %entry 6954; CHECK-NEXT: sexth16 a0, a0 6955; CHECK-NEXT: sexth16 a1, a1 6956; CHECK-NEXT: cmplt16 a1, a0 6957; CHECK-NEXT: movt32 a2, a3 6958; CHECK-NEXT: mov16 a0, a2 6959; CHECK-NEXT: rts16 6960; 6961; GENERIC-LABEL: selectRR_slt_i16: 6962; GENERIC: # %bb.0: # %entry 6963; GENERIC-NEXT: .cfi_def_cfa_offset 0 6964; GENERIC-NEXT: subi16 sp, sp, 4 6965; GENERIC-NEXT: .cfi_def_cfa_offset 4 6966; GENERIC-NEXT: sexth16 a0, a0 6967; GENERIC-NEXT: sexth16 a1, a1 6968; GENERIC-NEXT: cmplt16 a1, a0 6969; GENERIC-NEXT: mvcv16 a0 6970; GENERIC-NEXT: movi16 a1, 1 6971; GENERIC-NEXT: subu16 a1, a0 6972; GENERIC-NEXT: btsti16 a1, 0 6973; GENERIC-NEXT: bt16 .LBB170_2 6974; GENERIC-NEXT: # %bb.1: # %entry 6975; GENERIC-NEXT: mov16 a3, a2 6976; GENERIC-NEXT: .LBB170_2: # %entry 6977; GENERIC-NEXT: mov16 a0, a3 6978; GENERIC-NEXT: addi16 sp, sp, 4 6979; GENERIC-NEXT: rts16 6980entry: 6981 %icmp = icmp slt i16 %y, %x 6982 %ret = select i1 %icmp, i16 %m, i16 %n 6983 ret i16 %ret 6984} 6985 6986define i16 @selectRI_slt_i16(i16 %x, i16 %n, i16 %m) { 6987; CHECK-LABEL: selectRI_slt_i16: 6988; CHECK: # %bb.0: # %entry 6989; CHECK-NEXT: sexth16 a0, a0 6990; CHECK-NEXT: cmplti16 a0, 10 6991; CHECK-NEXT: movt32 a1, a2 6992; CHECK-NEXT: mov16 a0, a1 6993; CHECK-NEXT: rts16 6994; 6995; GENERIC-LABEL: selectRI_slt_i16: 6996; GENERIC: # %bb.0: # %entry 6997; GENERIC-NEXT: .cfi_def_cfa_offset 0 6998; GENERIC-NEXT: subi16 sp, sp, 4 6999; GENERIC-NEXT: .cfi_def_cfa_offset 4 7000; GENERIC-NEXT: sexth16 a0, a0 7001; GENERIC-NEXT: cmplti16 a0, 10 7002; GENERIC-NEXT: mvcv16 a0 7003; GENERIC-NEXT: movi16 a3, 1 7004; GENERIC-NEXT: subu16 a3, a0 7005; GENERIC-NEXT: btsti16 a3, 0 7006; GENERIC-NEXT: bt16 .LBB171_2 7007; GENERIC-NEXT: # %bb.1: # %entry 7008; GENERIC-NEXT: mov16 a2, a1 7009; GENERIC-NEXT: .LBB171_2: # %entry 7010; GENERIC-NEXT: mov16 a0, a2 7011; GENERIC-NEXT: addi16 sp, sp, 4 7012; GENERIC-NEXT: rts16 7013entry: 7014 %icmp = icmp slt i16 %x, 10 7015 %ret = select i1 %icmp, i16 %m, i16 %n 7016 ret i16 %ret 7017} 7018 7019define i16 @selectRX_slt_i16(i16 %x, i16 %n, i16 %m) { 7020; CHECK-LABEL: selectRX_slt_i16: 7021; CHECK: # %bb.0: # %entry 7022; CHECK-NEXT: sexth16 a0, a0 7023; CHECK-NEXT: cmplti32 a0, 2033 7024; CHECK-NEXT: movt32 a1, a2 7025; CHECK-NEXT: mov16 a0, a1 7026; CHECK-NEXT: rts16 7027; 7028; GENERIC-LABEL: selectRX_slt_i16: 7029; GENERIC: # %bb.0: # %entry 7030; GENERIC-NEXT: subi16 sp, sp, 4 7031; GENERIC-NEXT: .cfi_def_cfa_offset 4 7032; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 7033; GENERIC-NEXT: .cfi_offset l0, -4 7034; GENERIC-NEXT: subi16 sp, sp, 4 7035; GENERIC-NEXT: .cfi_def_cfa_offset 8 7036; GENERIC-NEXT: sexth16 a0, a0 7037; GENERIC-NEXT: movi16 a3, 0 7038; GENERIC-NEXT: lsli16 l0, a3, 24 7039; GENERIC-NEXT: lsli16 a3, a3, 16 7040; GENERIC-NEXT: or16 a3, l0 7041; GENERIC-NEXT: movi16 l0, 7 7042; GENERIC-NEXT: lsli16 l0, l0, 8 7043; GENERIC-NEXT: or16 l0, a3 7044; GENERIC-NEXT: movi16 a3, 241 7045; GENERIC-NEXT: or16 a3, l0 7046; GENERIC-NEXT: cmplt16 a0, a3 7047; GENERIC-NEXT: mvcv16 a0 7048; GENERIC-NEXT: movi16 a3, 1 7049; GENERIC-NEXT: subu16 a3, a0 7050; GENERIC-NEXT: btsti16 a3, 0 7051; GENERIC-NEXT: bt16 .LBB172_2 7052; GENERIC-NEXT: # %bb.1: # %entry 7053; GENERIC-NEXT: mov16 a2, a1 7054; GENERIC-NEXT: .LBB172_2: # %entry 7055; GENERIC-NEXT: mov16 a0, a2 7056; GENERIC-NEXT: addi16 sp, sp, 4 7057; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 7058; GENERIC-NEXT: addi16 sp, sp, 4 7059; GENERIC-NEXT: rts16 7060entry: 7061 %icmp = icmp slt i16 %x, 47777777 7062 %ret = select i1 %icmp, i16 %m, i16 %n 7063 ret i16 %ret 7064} 7065 7066define i16 @selectC_slt_i16(i1 %c, i16 %n, i16 %m) { 7067; CHECK-LABEL: selectC_slt_i16: 7068; CHECK: # %bb.0: # %entry 7069; CHECK-NEXT: btsti16 a0, 0 7070; CHECK-NEXT: movt32 a1, a2 7071; CHECK-NEXT: mov16 a0, a1 7072; CHECK-NEXT: rts16 7073; 7074; GENERIC-LABEL: selectC_slt_i16: 7075; GENERIC: # %bb.0: # %entry 7076; GENERIC-NEXT: .cfi_def_cfa_offset 0 7077; GENERIC-NEXT: subi16 sp, sp, 4 7078; GENERIC-NEXT: .cfi_def_cfa_offset 4 7079; GENERIC-NEXT: btsti16 a0, 0 7080; GENERIC-NEXT: bt16 .LBB173_2 7081; GENERIC-NEXT: # %bb.1: # %entry 7082; GENERIC-NEXT: mov16 a2, a1 7083; GENERIC-NEXT: .LBB173_2: # %entry 7084; GENERIC-NEXT: mov16 a0, a2 7085; GENERIC-NEXT: addi16 sp, sp, 4 7086; GENERIC-NEXT: rts16 7087entry: 7088 %ret = select i1 %c, i16 %m, i16 %n 7089 ret i16 %ret 7090} 7091 7092 7093define i8 @selectRR_slt_i8(i8 %x, i8 %y, i8 %n, i8 %m) { 7094; CHECK-LABEL: selectRR_slt_i8: 7095; CHECK: # %bb.0: # %entry 7096; CHECK-NEXT: sextb16 a0, a0 7097; CHECK-NEXT: sextb16 a1, a1 7098; CHECK-NEXT: cmplt16 a1, a0 7099; CHECK-NEXT: movt32 a2, a3 7100; CHECK-NEXT: mov16 a0, a2 7101; CHECK-NEXT: rts16 7102; 7103; GENERIC-LABEL: selectRR_slt_i8: 7104; GENERIC: # %bb.0: # %entry 7105; GENERIC-NEXT: .cfi_def_cfa_offset 0 7106; GENERIC-NEXT: subi16 sp, sp, 4 7107; GENERIC-NEXT: .cfi_def_cfa_offset 4 7108; GENERIC-NEXT: sextb16 a0, a0 7109; GENERIC-NEXT: sextb16 a1, a1 7110; GENERIC-NEXT: cmplt16 a1, a0 7111; GENERIC-NEXT: mvcv16 a0 7112; GENERIC-NEXT: movi16 a1, 1 7113; GENERIC-NEXT: subu16 a1, a0 7114; GENERIC-NEXT: btsti16 a1, 0 7115; GENERIC-NEXT: bt16 .LBB174_2 7116; GENERIC-NEXT: # %bb.1: # %entry 7117; GENERIC-NEXT: mov16 a3, a2 7118; GENERIC-NEXT: .LBB174_2: # %entry 7119; GENERIC-NEXT: mov16 a0, a3 7120; GENERIC-NEXT: addi16 sp, sp, 4 7121; GENERIC-NEXT: rts16 7122entry: 7123 %icmp = icmp slt i8 %y, %x 7124 %ret = select i1 %icmp, i8 %m, i8 %n 7125 ret i8 %ret 7126} 7127 7128define i8 @selectRI_slt_i8(i8 %x, i8 %n, i8 %m) { 7129; CHECK-LABEL: selectRI_slt_i8: 7130; CHECK: # %bb.0: # %entry 7131; CHECK-NEXT: sextb16 a0, a0 7132; CHECK-NEXT: cmplti16 a0, 10 7133; CHECK-NEXT: movt32 a1, a2 7134; CHECK-NEXT: mov16 a0, a1 7135; CHECK-NEXT: rts16 7136; 7137; GENERIC-LABEL: selectRI_slt_i8: 7138; GENERIC: # %bb.0: # %entry 7139; GENERIC-NEXT: .cfi_def_cfa_offset 0 7140; GENERIC-NEXT: subi16 sp, sp, 4 7141; GENERIC-NEXT: .cfi_def_cfa_offset 4 7142; GENERIC-NEXT: sextb16 a0, a0 7143; GENERIC-NEXT: cmplti16 a0, 10 7144; GENERIC-NEXT: mvcv16 a0 7145; GENERIC-NEXT: movi16 a3, 1 7146; GENERIC-NEXT: subu16 a3, a0 7147; GENERIC-NEXT: btsti16 a3, 0 7148; GENERIC-NEXT: bt16 .LBB175_2 7149; GENERIC-NEXT: # %bb.1: # %entry 7150; GENERIC-NEXT: mov16 a2, a1 7151; GENERIC-NEXT: .LBB175_2: # %entry 7152; GENERIC-NEXT: mov16 a0, a2 7153; GENERIC-NEXT: addi16 sp, sp, 4 7154; GENERIC-NEXT: rts16 7155entry: 7156 %icmp = icmp slt i8 %x, 10 7157 %ret = select i1 %icmp, i8 %m, i8 %n 7158 ret i8 %ret 7159} 7160 7161define i8 @selectRX_slt_i8(i8 %x, i8 %n, i8 %m) { 7162; CHECK-LABEL: selectRX_slt_i8: 7163; CHECK: # %bb.0: # %entry 7164; CHECK-NEXT: sextb16 a0, a0 7165; CHECK-NEXT: movih32 a3, 65535 7166; CHECK-NEXT: ori32 a3, a3, 65521 7167; CHECK-NEXT: cmplt16 a0, a3 7168; CHECK-NEXT: movt32 a1, a2 7169; CHECK-NEXT: mov16 a0, a1 7170; CHECK-NEXT: rts16 7171; 7172; GENERIC-LABEL: selectRX_slt_i8: 7173; GENERIC: # %bb.0: # %entry 7174; GENERIC-NEXT: subi16 sp, sp, 8 7175; GENERIC-NEXT: .cfi_def_cfa_offset 8 7176; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 7177; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 7178; GENERIC-NEXT: .cfi_offset l1, -4 7179; GENERIC-NEXT: .cfi_offset l0, -8 7180; GENERIC-NEXT: subi16 sp, sp, 4 7181; GENERIC-NEXT: .cfi_def_cfa_offset 12 7182; GENERIC-NEXT: sextb16 a0, a0 7183; GENERIC-NEXT: movi16 a3, 255 7184; GENERIC-NEXT: lsli16 l0, a3, 24 7185; GENERIC-NEXT: lsli16 l1, a3, 16 7186; GENERIC-NEXT: or16 l1, l0 7187; GENERIC-NEXT: lsli16 a3, a3, 8 7188; GENERIC-NEXT: or16 a3, l1 7189; GENERIC-NEXT: movi16 l0, 241 7190; GENERIC-NEXT: or16 l0, a3 7191; GENERIC-NEXT: cmplt16 a0, l0 7192; GENERIC-NEXT: mvcv16 a0 7193; GENERIC-NEXT: movi16 a3, 1 7194; GENERIC-NEXT: subu16 a3, a0 7195; GENERIC-NEXT: btsti16 a3, 0 7196; GENERIC-NEXT: bt16 .LBB176_2 7197; GENERIC-NEXT: # %bb.1: # %entry 7198; GENERIC-NEXT: mov16 a2, a1 7199; GENERIC-NEXT: .LBB176_2: # %entry 7200; GENERIC-NEXT: mov16 a0, a2 7201; GENERIC-NEXT: addi16 sp, sp, 4 7202; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 7203; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 7204; GENERIC-NEXT: addi16 sp, sp, 8 7205; GENERIC-NEXT: rts16 7206entry: 7207 %icmp = icmp slt i8 %x, 47777777 7208 %ret = select i1 %icmp, i8 %m, i8 %n 7209 ret i8 %ret 7210} 7211 7212define i8 @selectC_slt_i8(i1 %c, i8 %n, i8 %m) { 7213; CHECK-LABEL: selectC_slt_i8: 7214; CHECK: # %bb.0: # %entry 7215; CHECK-NEXT: btsti16 a0, 0 7216; CHECK-NEXT: movt32 a1, a2 7217; CHECK-NEXT: mov16 a0, a1 7218; CHECK-NEXT: rts16 7219; 7220; GENERIC-LABEL: selectC_slt_i8: 7221; GENERIC: # %bb.0: # %entry 7222; GENERIC-NEXT: .cfi_def_cfa_offset 0 7223; GENERIC-NEXT: subi16 sp, sp, 4 7224; GENERIC-NEXT: .cfi_def_cfa_offset 4 7225; GENERIC-NEXT: btsti16 a0, 0 7226; GENERIC-NEXT: bt16 .LBB177_2 7227; GENERIC-NEXT: # %bb.1: # %entry 7228; GENERIC-NEXT: mov16 a2, a1 7229; GENERIC-NEXT: .LBB177_2: # %entry 7230; GENERIC-NEXT: mov16 a0, a2 7231; GENERIC-NEXT: addi16 sp, sp, 4 7232; GENERIC-NEXT: rts16 7233entry: 7234 %ret = select i1 %c, i8 %m, i8 %n 7235 ret i8 %ret 7236} 7237 7238 7239define i1 @selectRR_slt_i1(i1 %x, i1 %y, i1 %n, i1 %m) { 7240; CHECK-LABEL: selectRR_slt_i1: 7241; CHECK: # %bb.0: # %entry 7242; CHECK-NEXT: btsti16 a0, 0 7243; CHECK-NEXT: movt32 a3, a2 7244; CHECK-NEXT: btsti16 a1, 0 7245; CHECK-NEXT: movt32 a2, a3 7246; CHECK-NEXT: mov16 a0, a2 7247; CHECK-NEXT: rts16 7248; 7249; GENERIC-LABEL: selectRR_slt_i1: 7250; GENERIC: # %bb.0: # %entry 7251; GENERIC-NEXT: .cfi_def_cfa_offset 0 7252; GENERIC-NEXT: subi16 sp, sp, 4 7253; GENERIC-NEXT: .cfi_def_cfa_offset 4 7254; GENERIC-NEXT: btsti16 a0, 0 7255; GENERIC-NEXT: mov16 a0, a2 7256; GENERIC-NEXT: bf16 .LBB178_3 7257; GENERIC-NEXT: # %bb.1: # %entry 7258; GENERIC-NEXT: btsti16 a1, 0 7259; GENERIC-NEXT: bf16 .LBB178_4 7260; GENERIC-NEXT: .LBB178_2: # %entry 7261; GENERIC-NEXT: addi16 sp, sp, 4 7262; GENERIC-NEXT: rts16 7263; GENERIC-NEXT: .LBB178_3: # %entry 7264; GENERIC-NEXT: mov16 a0, a3 7265; GENERIC-NEXT: btsti16 a1, 0 7266; GENERIC-NEXT: bt16 .LBB178_2 7267; GENERIC-NEXT: .LBB178_4: # %entry 7268; GENERIC-NEXT: mov16 a0, a2 7269; GENERIC-NEXT: addi16 sp, sp, 4 7270; GENERIC-NEXT: rts16 7271entry: 7272 %icmp = icmp slt i1 %y, %x 7273 %ret = select i1 %icmp, i1 %m, i1 %n 7274 ret i1 %ret 7275} 7276 7277define i1 @selectRI_slt_i1(i1 %x, i1 %n, i1 %m) { 7278; CHECK-LABEL: selectRI_slt_i1: 7279; CHECK: # %bb.0: # %entry 7280; CHECK-NEXT: btsti16 a0, 0 7281; CHECK-NEXT: movt32 a1, a2 7282; CHECK-NEXT: mov16 a0, a1 7283; CHECK-NEXT: rts16 7284; 7285; GENERIC-LABEL: selectRI_slt_i1: 7286; GENERIC: # %bb.0: # %entry 7287; GENERIC-NEXT: .cfi_def_cfa_offset 0 7288; GENERIC-NEXT: subi16 sp, sp, 4 7289; GENERIC-NEXT: .cfi_def_cfa_offset 4 7290; GENERIC-NEXT: btsti16 a0, 0 7291; GENERIC-NEXT: bt16 .LBB179_2 7292; GENERIC-NEXT: # %bb.1: # %entry 7293; GENERIC-NEXT: mov16 a2, a1 7294; GENERIC-NEXT: .LBB179_2: # %entry 7295; GENERIC-NEXT: mov16 a0, a2 7296; GENERIC-NEXT: addi16 sp, sp, 4 7297; GENERIC-NEXT: rts16 7298entry: 7299 %icmp = icmp slt i1 %x, 10 7300 %ret = select i1 %icmp, i1 %m, i1 %n 7301 ret i1 %ret 7302} 7303 7304define i1 @selectRX_slt_i1(i1 %x, i1 %n, i1 %m) { 7305; CHECK-LABEL: selectRX_slt_i1: 7306; CHECK: # %bb.0: # %entry 7307; CHECK-NEXT: mov16 a0, a1 7308; CHECK-NEXT: rts16 7309; 7310; GENERIC-LABEL: selectRX_slt_i1: 7311; GENERIC: # %bb.0: # %entry 7312; GENERIC-NEXT: .cfi_def_cfa_offset 0 7313; GENERIC-NEXT: subi16 sp, sp, 4 7314; GENERIC-NEXT: .cfi_def_cfa_offset 4 7315; GENERIC-NEXT: mov16 a0, a1 7316; GENERIC-NEXT: addi16 sp, sp, 4 7317; GENERIC-NEXT: rts16 7318entry: 7319 %icmp = icmp slt i1 %x, 47777777 7320 %ret = select i1 %icmp, i1 %m, i1 %n 7321 ret i1 %ret 7322} 7323 7324define i1 @selectC_slt_i1(i1 %c, i1 %n, i1 %m) { 7325; CHECK-LABEL: selectC_slt_i1: 7326; CHECK: # %bb.0: # %entry 7327; CHECK-NEXT: btsti16 a0, 0 7328; CHECK-NEXT: movt32 a1, a2 7329; CHECK-NEXT: mov16 a0, a1 7330; CHECK-NEXT: rts16 7331; 7332; GENERIC-LABEL: selectC_slt_i1: 7333; GENERIC: # %bb.0: # %entry 7334; GENERIC-NEXT: .cfi_def_cfa_offset 0 7335; GENERIC-NEXT: subi16 sp, sp, 4 7336; GENERIC-NEXT: .cfi_def_cfa_offset 4 7337; GENERIC-NEXT: btsti16 a0, 0 7338; GENERIC-NEXT: bt16 .LBB181_2 7339; GENERIC-NEXT: # %bb.1: # %entry 7340; GENERIC-NEXT: mov16 a2, a1 7341; GENERIC-NEXT: .LBB181_2: # %entry 7342; GENERIC-NEXT: mov16 a0, a2 7343; GENERIC-NEXT: addi16 sp, sp, 4 7344; GENERIC-NEXT: rts16 7345entry: 7346 %ret = select i1 %c, i1 %m, i1 %n 7347 ret i1 %ret 7348} 7349 7350define i32 @selectRR_sle_i32(i32 %x, i32 %y, i32 %n, i32 %m) { 7351; CHECK-LABEL: selectRR_sle_i32: 7352; CHECK: # %bb.0: # %entry 7353; CHECK-NEXT: cmplt16 a0, a1 7354; CHECK-NEXT: movf32 a2, a3 7355; CHECK-NEXT: mov16 a0, a2 7356; CHECK-NEXT: rts16 7357; 7358; GENERIC-LABEL: selectRR_sle_i32: 7359; GENERIC: # %bb.0: # %entry 7360; GENERIC-NEXT: .cfi_def_cfa_offset 0 7361; GENERIC-NEXT: subi16 sp, sp, 4 7362; GENERIC-NEXT: .cfi_def_cfa_offset 4 7363; GENERIC-NEXT: cmplt16 a0, a1 7364; GENERIC-NEXT: mvcv16 a0 7365; GENERIC-NEXT: btsti16 a0, 0 7366; GENERIC-NEXT: bt16 .LBB182_2 7367; GENERIC-NEXT: # %bb.1: # %entry 7368; GENERIC-NEXT: mov16 a3, a2 7369; GENERIC-NEXT: .LBB182_2: # %entry 7370; GENERIC-NEXT: mov16 a0, a3 7371; GENERIC-NEXT: addi16 sp, sp, 4 7372; GENERIC-NEXT: rts16 7373entry: 7374 %icmp = icmp sle i32 %y, %x 7375 %ret = select i1 %icmp, i32 %m, i32 %n 7376 ret i32 %ret 7377} 7378 7379define i32 @selectRI_sle_i32(i32 %x, i32 %n, i32 %m) { 7380; CHECK-LABEL: selectRI_sle_i32: 7381; CHECK: # %bb.0: # %entry 7382; CHECK-NEXT: cmplti16 a0, 11 7383; CHECK-NEXT: movt32 a1, a2 7384; CHECK-NEXT: mov16 a0, a1 7385; CHECK-NEXT: rts16 7386; 7387; GENERIC-LABEL: selectRI_sle_i32: 7388; GENERIC: # %bb.0: # %entry 7389; GENERIC-NEXT: .cfi_def_cfa_offset 0 7390; GENERIC-NEXT: subi16 sp, sp, 4 7391; GENERIC-NEXT: .cfi_def_cfa_offset 4 7392; GENERIC-NEXT: cmplti16 a0, 11 7393; GENERIC-NEXT: mvcv16 a0 7394; GENERIC-NEXT: movi16 a3, 1 7395; GENERIC-NEXT: subu16 a3, a0 7396; GENERIC-NEXT: btsti16 a3, 0 7397; GENERIC-NEXT: bt16 .LBB183_2 7398; GENERIC-NEXT: # %bb.1: # %entry 7399; GENERIC-NEXT: mov16 a2, a1 7400; GENERIC-NEXT: .LBB183_2: # %entry 7401; GENERIC-NEXT: mov16 a0, a2 7402; GENERIC-NEXT: addi16 sp, sp, 4 7403; GENERIC-NEXT: rts16 7404entry: 7405 %icmp = icmp sle i32 %x, 10 7406 %ret = select i1 %icmp, i32 %m, i32 %n 7407 ret i32 %ret 7408} 7409 7410define i32 @selectRX_sle_i32(i32 %x, i32 %n, i32 %m) { 7411; CHECK-LABEL: selectRX_sle_i32: 7412; CHECK: # %bb.0: # %entry 7413; CHECK-NEXT: movih32 a3, 729 7414; CHECK-NEXT: ori32 a3, a3, 2034 7415; CHECK-NEXT: cmplt16 a0, a3 7416; CHECK-NEXT: movt32 a1, a2 7417; CHECK-NEXT: mov16 a0, a1 7418; CHECK-NEXT: rts16 7419; 7420; GENERIC-LABEL: selectRX_sle_i32: 7421; GENERIC: # %bb.0: # %entry 7422; GENERIC-NEXT: subi16 sp, sp, 4 7423; GENERIC-NEXT: .cfi_def_cfa_offset 4 7424; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 7425; GENERIC-NEXT: .cfi_offset l0, -4 7426; GENERIC-NEXT: subi16 sp, sp, 4 7427; GENERIC-NEXT: .cfi_def_cfa_offset 8 7428; GENERIC-NEXT: movi16 a3, 2 7429; GENERIC-NEXT: lsli16 a3, a3, 24 7430; GENERIC-NEXT: movi16 l0, 217 7431; GENERIC-NEXT: lsli16 l0, l0, 16 7432; GENERIC-NEXT: or16 l0, a3 7433; GENERIC-NEXT: movi16 a3, 7 7434; GENERIC-NEXT: lsli16 a3, a3, 8 7435; GENERIC-NEXT: or16 a3, l0 7436; GENERIC-NEXT: movi16 l0, 242 7437; GENERIC-NEXT: or16 l0, a3 7438; GENERIC-NEXT: cmplt16 a0, l0 7439; GENERIC-NEXT: mvcv16 a0 7440; GENERIC-NEXT: movi16 a3, 1 7441; GENERIC-NEXT: subu16 a3, a0 7442; GENERIC-NEXT: btsti16 a3, 0 7443; GENERIC-NEXT: bt16 .LBB184_2 7444; GENERIC-NEXT: # %bb.1: # %entry 7445; GENERIC-NEXT: mov16 a2, a1 7446; GENERIC-NEXT: .LBB184_2: # %entry 7447; GENERIC-NEXT: mov16 a0, a2 7448; GENERIC-NEXT: addi16 sp, sp, 4 7449; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 7450; GENERIC-NEXT: addi16 sp, sp, 4 7451; GENERIC-NEXT: rts16 7452entry: 7453 %icmp = icmp sle i32 %x, 47777777 7454 %ret = select i1 %icmp, i32 %m, i32 %n 7455 ret i32 %ret 7456} 7457 7458define i32 @selectC_sle_i32(i1 %c, i32 %n, i32 %m) { 7459; CHECK-LABEL: selectC_sle_i32: 7460; CHECK: # %bb.0: # %entry 7461; CHECK-NEXT: btsti16 a0, 0 7462; CHECK-NEXT: movt32 a1, a2 7463; CHECK-NEXT: mov16 a0, a1 7464; CHECK-NEXT: rts16 7465; 7466; GENERIC-LABEL: selectC_sle_i32: 7467; GENERIC: # %bb.0: # %entry 7468; GENERIC-NEXT: .cfi_def_cfa_offset 0 7469; GENERIC-NEXT: subi16 sp, sp, 4 7470; GENERIC-NEXT: .cfi_def_cfa_offset 4 7471; GENERIC-NEXT: btsti16 a0, 0 7472; GENERIC-NEXT: bt16 .LBB185_2 7473; GENERIC-NEXT: # %bb.1: # %entry 7474; GENERIC-NEXT: mov16 a2, a1 7475; GENERIC-NEXT: .LBB185_2: # %entry 7476; GENERIC-NEXT: mov16 a0, a2 7477; GENERIC-NEXT: addi16 sp, sp, 4 7478; GENERIC-NEXT: rts16 7479entry: 7480 %ret = select i1 %c, i32 %m, i32 %n 7481 ret i32 %ret 7482} 7483 7484define i64 @selectRR_sle_i64(i64 %x, i64 %y, i64 %n, i64 %m) { 7485; CHECK-LABEL: selectRR_sle_i64: 7486; CHECK: # %bb.0: # %entry 7487; CHECK-NEXT: .cfi_def_cfa_offset 0 7488; CHECK-NEXT: subi16 sp, sp, 12 7489; CHECK-NEXT: .cfi_def_cfa_offset 12 7490; CHECK-NEXT: cmphs16 a0, a2 7491; CHECK-NEXT: mvc32 a0 7492; CHECK-NEXT: st16.w a0, (sp, 4) 7493; CHECK-NEXT: cmpne16 a3, a1 7494; CHECK-NEXT: mvc32 a0 7495; CHECK-NEXT: st16.w a0, (sp, 8) 7496; CHECK-NEXT: cmplt16 a1, a3 7497; CHECK-NEXT: mvcv16 a0 7498; CHECK-NEXT: ld16.w a1, (sp, 4) 7499; CHECK-NEXT: btsti16 a1, 0 7500; CHECK-NEXT: mvc32 a1 7501; CHECK-NEXT: ld16.w a2, (sp, 8) 7502; CHECK-NEXT: btsti16 a2, 0 7503; CHECK-NEXT: movf32 a0, a1 7504; CHECK-NEXT: addi16 a1, sp, 12 7505; CHECK-NEXT: addi16 a2, sp, 20 7506; CHECK-NEXT: btsti16 a0, 0 7507; CHECK-NEXT: movt32 a1, a2 7508; CHECK-NEXT: ld16.w a0, (a1, 0) 7509; CHECK-NEXT: ld16.w a1, (a1, 4) 7510; CHECK-NEXT: addi16 sp, sp, 12 7511; CHECK-NEXT: rts16 7512; 7513; GENERIC-LABEL: selectRR_sle_i64: 7514; GENERIC: # %bb.0: # %entry 7515; GENERIC-NEXT: .cfi_def_cfa_offset 0 7516; GENERIC-NEXT: subi16 sp, sp, 4 7517; GENERIC-NEXT: .cfi_def_cfa_offset 4 7518; GENERIC-NEXT: cmphs16 a0, a2 7519; GENERIC-NEXT: mvcv16 a2 7520; GENERIC-NEXT: cmplt16 a1, a3 7521; GENERIC-NEXT: mvcv16 a0 7522; GENERIC-NEXT: cmpne16 a3, a1 7523; GENERIC-NEXT: mvcv16 a1 7524; GENERIC-NEXT: btsti16 a1, 0 7525; GENERIC-NEXT: bf16 .LBB186_2 7526; GENERIC-NEXT: # %bb.1: 7527; GENERIC-NEXT: movi16 a0, 1 7528; GENERIC-NEXT: subu16 a0, a2 7529; GENERIC-NEXT: .LBB186_2: # %entry 7530; GENERIC-NEXT: btsti16 a0, 0 7531; GENERIC-NEXT: bt16 .LBB186_4 7532; GENERIC-NEXT: # %bb.3: # %entry 7533; GENERIC-NEXT: movi16 a0, 4 7534; GENERIC-NEXT: br32 .LBB186_5 7535; GENERIC-NEXT: .LBB186_4: 7536; GENERIC-NEXT: movi16 a0, 12 7537; GENERIC-NEXT: .LBB186_5: # %entry 7538; GENERIC-NEXT: addu16 a0, sp 7539; GENERIC-NEXT: mov16 a1, a0 7540; GENERIC-NEXT: ld16.w a0, (a0, 0) 7541; GENERIC-NEXT: ld16.w a1, (a1, 4) 7542; GENERIC-NEXT: addi16 sp, sp, 4 7543; GENERIC-NEXT: rts16 7544entry: 7545 %icmp = icmp sle i64 %y, %x 7546 %ret = select i1 %icmp, i64 %m, i64 %n 7547 ret i64 %ret 7548} 7549 7550define i64 @selectRI_sle_i64(i64 %x, i64 %n, i64 %m) { 7551; CHECK-LABEL: selectRI_sle_i64: 7552; CHECK: # %bb.0: # %entry 7553; CHECK-NEXT: subi16 sp, sp, 4 7554; CHECK-NEXT: .cfi_def_cfa_offset 4 7555; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 7556; CHECK-NEXT: .cfi_offset l0, -4 7557; CHECK-NEXT: subi16 sp, sp, 12 7558; CHECK-NEXT: .cfi_def_cfa_offset 16 7559; CHECK-NEXT: ld32.w t0, (sp, 20) 7560; CHECK-NEXT: ld32.w t1, (sp, 16) 7561; CHECK-NEXT: movi16 l0, 0 7562; CHECK-NEXT: cmplt16 a1, l0 7563; CHECK-NEXT: mvc32 l0 7564; CHECK-NEXT: st16.w l0, (sp, 4) 7565; CHECK-NEXT: cmpnei16 a1, 0 7566; CHECK-NEXT: mvc32 a1 7567; CHECK-NEXT: st16.w a1, (sp, 8) 7568; CHECK-NEXT: cmphsi16 a0, 11 7569; CHECK-NEXT: mvcv16 a0 7570; CHECK-NEXT: ld16.w a1, (sp, 4) 7571; CHECK-NEXT: btsti16 a1, 0 7572; CHECK-NEXT: mvc32 a1 7573; CHECK-NEXT: ld16.w l0, (sp, 8) 7574; CHECK-NEXT: btsti16 l0, 0 7575; CHECK-NEXT: movf32 a1, a0 7576; CHECK-NEXT: btsti16 a1, 0 7577; CHECK-NEXT: movt32 a2, t1 7578; CHECK-NEXT: movt32 a3, t0 7579; CHECK-NEXT: mov16 a0, a2 7580; CHECK-NEXT: mov16 a1, a3 7581; CHECK-NEXT: addi16 sp, sp, 12 7582; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 7583; CHECK-NEXT: addi16 sp, sp, 4 7584; CHECK-NEXT: rts16 7585; 7586; GENERIC-LABEL: selectRI_sle_i64: 7587; GENERIC: # %bb.0: # %entry 7588; GENERIC-NEXT: subi16 sp, sp, 4 7589; GENERIC-NEXT: .cfi_def_cfa_offset 4 7590; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 7591; GENERIC-NEXT: .cfi_offset l0, -4 7592; GENERIC-NEXT: subi16 sp, sp, 4 7593; GENERIC-NEXT: .cfi_def_cfa_offset 8 7594; GENERIC-NEXT: movi16 l0, 0 7595; GENERIC-NEXT: cmplt16 a1, l0 7596; GENERIC-NEXT: mvcv16 l0 7597; GENERIC-NEXT: cmphsi16 a0, 11 7598; GENERIC-NEXT: mvcv16 a0 7599; GENERIC-NEXT: cmpnei16 a1, 0 7600; GENERIC-NEXT: mvcv16 a1 7601; GENERIC-NEXT: btsti16 a1, 0 7602; GENERIC-NEXT: bf16 .LBB187_5 7603; GENERIC-NEXT: # %bb.1: # %entry 7604; GENERIC-NEXT: btsti16 a0, 0 7605; GENERIC-NEXT: bt16 .LBB187_6 7606; GENERIC-NEXT: .LBB187_2: # %entry 7607; GENERIC-NEXT: btsti16 a0, 0 7608; GENERIC-NEXT: bf16 .LBB187_4 7609; GENERIC-NEXT: .LBB187_3: 7610; GENERIC-NEXT: ld16.w a3, (sp, 12) 7611; GENERIC-NEXT: .LBB187_4: # %entry 7612; GENERIC-NEXT: mov16 a0, a2 7613; GENERIC-NEXT: mov16 a1, a3 7614; GENERIC-NEXT: addi16 sp, sp, 4 7615; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 7616; GENERIC-NEXT: addi16 sp, sp, 4 7617; GENERIC-NEXT: rts16 7618; GENERIC-NEXT: .LBB187_5: # %entry 7619; GENERIC-NEXT: movi16 a0, 1 7620; GENERIC-NEXT: subu16 a0, l0 7621; GENERIC-NEXT: btsti16 a0, 0 7622; GENERIC-NEXT: bf16 .LBB187_2 7623; GENERIC-NEXT: .LBB187_6: 7624; GENERIC-NEXT: ld16.w a2, (sp, 8) 7625; GENERIC-NEXT: btsti16 a0, 0 7626; GENERIC-NEXT: bt16 .LBB187_3 7627; GENERIC-NEXT: br32 .LBB187_4 7628entry: 7629 %icmp = icmp sle i64 %x, 10 7630 %ret = select i1 %icmp, i64 %m, i64 %n 7631 ret i64 %ret 7632} 7633 7634define i64 @selectRX_sle_i64(i64 %x, i64 %n, i64 %m) { 7635; CHECK-LABEL: selectRX_sle_i64: 7636; CHECK: # %bb.0: # %entry 7637; CHECK-NEXT: subi16 sp, sp, 4 7638; CHECK-NEXT: .cfi_def_cfa_offset 4 7639; CHECK-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 7640; CHECK-NEXT: .cfi_offset l0, -4 7641; CHECK-NEXT: subi16 sp, sp, 12 7642; CHECK-NEXT: .cfi_def_cfa_offset 16 7643; CHECK-NEXT: ld32.w t0, (sp, 20) 7644; CHECK-NEXT: ld32.w t1, (sp, 16) 7645; CHECK-NEXT: movi16 l0, 0 7646; CHECK-NEXT: cmplt16 a1, l0 7647; CHECK-NEXT: mvc32 l0 7648; CHECK-NEXT: st16.w l0, (sp, 8) 7649; CHECK-NEXT: movih32 l0, 729 7650; CHECK-NEXT: ori32 l0, l0, 2034 7651; CHECK-NEXT: cmphs16 a0, l0 7652; CHECK-NEXT: mvcv16 a0 7653; CHECK-NEXT: cmpnei16 a1, 0 7654; CHECK-NEXT: mvc32 a1 7655; CHECK-NEXT: st16.w a1, (sp, 4) 7656; CHECK-NEXT: ld16.w a1, (sp, 8) 7657; CHECK-NEXT: btsti16 a1, 0 7658; CHECK-NEXT: mvc32 a1 7659; CHECK-NEXT: ld16.w l0, (sp, 4) 7660; CHECK-NEXT: btsti16 l0, 0 7661; CHECK-NEXT: movf32 a1, a0 7662; CHECK-NEXT: btsti16 a1, 0 7663; CHECK-NEXT: movt32 a2, t1 7664; CHECK-NEXT: movt32 a3, t0 7665; CHECK-NEXT: mov16 a0, a2 7666; CHECK-NEXT: mov16 a1, a3 7667; CHECK-NEXT: addi16 sp, sp, 12 7668; CHECK-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 7669; CHECK-NEXT: addi16 sp, sp, 4 7670; CHECK-NEXT: rts16 7671; 7672; GENERIC-LABEL: selectRX_sle_i64: 7673; GENERIC: # %bb.0: # %entry 7674; GENERIC-NEXT: subi16 sp, sp, 12 7675; GENERIC-NEXT: .cfi_def_cfa_offset 12 7676; GENERIC-NEXT: st16.w l2, (sp, 8) # 4-byte Folded Spill 7677; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 7678; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 7679; GENERIC-NEXT: .cfi_offset l2, -4 7680; GENERIC-NEXT: .cfi_offset l1, -8 7681; GENERIC-NEXT: .cfi_offset l0, -12 7682; GENERIC-NEXT: subi16 sp, sp, 4 7683; GENERIC-NEXT: .cfi_def_cfa_offset 16 7684; GENERIC-NEXT: movi16 l0, 0 7685; GENERIC-NEXT: cmplt16 a1, l0 7686; GENERIC-NEXT: mvcv16 l0 7687; GENERIC-NEXT: movi16 l1, 2 7688; GENERIC-NEXT: lsli16 l1, l1, 24 7689; GENERIC-NEXT: movi16 l2, 217 7690; GENERIC-NEXT: lsli16 l2, l2, 16 7691; GENERIC-NEXT: or16 l2, l1 7692; GENERIC-NEXT: movi16 l1, 7 7693; GENERIC-NEXT: lsli16 l1, l1, 8 7694; GENERIC-NEXT: or16 l1, l2 7695; GENERIC-NEXT: movi16 l2, 242 7696; GENERIC-NEXT: or16 l2, l1 7697; GENERIC-NEXT: cmphs16 a0, l2 7698; GENERIC-NEXT: mvcv16 a0 7699; GENERIC-NEXT: cmpnei16 a1, 0 7700; GENERIC-NEXT: mvcv16 a1 7701; GENERIC-NEXT: btsti16 a1, 0 7702; GENERIC-NEXT: bf16 .LBB188_5 7703; GENERIC-NEXT: # %bb.1: # %entry 7704; GENERIC-NEXT: btsti16 a0, 0 7705; GENERIC-NEXT: bt16 .LBB188_6 7706; GENERIC-NEXT: .LBB188_2: # %entry 7707; GENERIC-NEXT: btsti16 a0, 0 7708; GENERIC-NEXT: bf16 .LBB188_4 7709; GENERIC-NEXT: .LBB188_3: 7710; GENERIC-NEXT: ld16.w a3, (sp, 20) 7711; GENERIC-NEXT: .LBB188_4: # %entry 7712; GENERIC-NEXT: mov16 a0, a2 7713; GENERIC-NEXT: mov16 a1, a3 7714; GENERIC-NEXT: addi16 sp, sp, 4 7715; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 7716; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 7717; GENERIC-NEXT: ld16.w l2, (sp, 8) # 4-byte Folded Reload 7718; GENERIC-NEXT: addi16 sp, sp, 12 7719; GENERIC-NEXT: rts16 7720; GENERIC-NEXT: .LBB188_5: # %entry 7721; GENERIC-NEXT: movi16 a0, 1 7722; GENERIC-NEXT: subu16 a0, l0 7723; GENERIC-NEXT: btsti16 a0, 0 7724; GENERIC-NEXT: bf16 .LBB188_2 7725; GENERIC-NEXT: .LBB188_6: 7726; GENERIC-NEXT: ld16.w a2, (sp, 16) 7727; GENERIC-NEXT: btsti16 a0, 0 7728; GENERIC-NEXT: bt16 .LBB188_3 7729; GENERIC-NEXT: br32 .LBB188_4 7730entry: 7731 %icmp = icmp sle i64 %x, 47777777 7732 %ret = select i1 %icmp, i64 %m, i64 %n 7733 ret i64 %ret 7734} 7735 7736define i64 @selectC_sle_i64(i1 %c, i64 %n, i64 %m) { 7737; CHECK-LABEL: selectC_sle_i64: 7738; CHECK: # %bb.0: # %entry 7739; CHECK-NEXT: ld32.w t0, (sp, 0) 7740; CHECK-NEXT: btsti16 a0, 0 7741; CHECK-NEXT: movt32 a1, a3 7742; CHECK-NEXT: movt32 a2, t0 7743; CHECK-NEXT: mov16 a0, a1 7744; CHECK-NEXT: mov16 a1, a2 7745; CHECK-NEXT: rts16 7746; 7747; GENERIC-LABEL: selectC_sle_i64: 7748; GENERIC: # %bb.0: # %entry 7749; GENERIC-NEXT: .cfi_def_cfa_offset 0 7750; GENERIC-NEXT: subi16 sp, sp, 4 7751; GENERIC-NEXT: .cfi_def_cfa_offset 4 7752; GENERIC-NEXT: btsti16 a0, 0 7753; GENERIC-NEXT: bt16 .LBB189_2 7754; GENERIC-NEXT: # %bb.1: # %entry 7755; GENERIC-NEXT: mov16 a3, a1 7756; GENERIC-NEXT: .LBB189_2: # %entry 7757; GENERIC-NEXT: btsti16 a0, 0 7758; GENERIC-NEXT: bf16 .LBB189_4 7759; GENERIC-NEXT: # %bb.3: 7760; GENERIC-NEXT: ld16.w a2, (sp, 4) 7761; GENERIC-NEXT: .LBB189_4: # %entry 7762; GENERIC-NEXT: mov16 a0, a3 7763; GENERIC-NEXT: mov16 a1, a2 7764; GENERIC-NEXT: addi16 sp, sp, 4 7765; GENERIC-NEXT: rts16 7766entry: 7767 %ret = select i1 %c, i64 %m, i64 %n 7768 ret i64 %ret 7769} 7770 7771 7772define i16 @selectRR_sle_i16(i16 %x, i16 %y, i16 %n, i16 %m) { 7773; CHECK-LABEL: selectRR_sle_i16: 7774; CHECK: # %bb.0: # %entry 7775; CHECK-NEXT: sexth16 a1, a1 7776; CHECK-NEXT: sexth16 a0, a0 7777; CHECK-NEXT: cmplt16 a0, a1 7778; CHECK-NEXT: movf32 a2, a3 7779; CHECK-NEXT: mov16 a0, a2 7780; CHECK-NEXT: rts16 7781; 7782; GENERIC-LABEL: selectRR_sle_i16: 7783; GENERIC: # %bb.0: # %entry 7784; GENERIC-NEXT: .cfi_def_cfa_offset 0 7785; GENERIC-NEXT: subi16 sp, sp, 4 7786; GENERIC-NEXT: .cfi_def_cfa_offset 4 7787; GENERIC-NEXT: sexth16 a1, a1 7788; GENERIC-NEXT: sexth16 a0, a0 7789; GENERIC-NEXT: cmplt16 a0, a1 7790; GENERIC-NEXT: mvcv16 a0 7791; GENERIC-NEXT: btsti16 a0, 0 7792; GENERIC-NEXT: bt16 .LBB190_2 7793; GENERIC-NEXT: # %bb.1: # %entry 7794; GENERIC-NEXT: mov16 a3, a2 7795; GENERIC-NEXT: .LBB190_2: # %entry 7796; GENERIC-NEXT: mov16 a0, a3 7797; GENERIC-NEXT: addi16 sp, sp, 4 7798; GENERIC-NEXT: rts16 7799entry: 7800 %icmp = icmp sle i16 %y, %x 7801 %ret = select i1 %icmp, i16 %m, i16 %n 7802 ret i16 %ret 7803} 7804 7805define i16 @selectRI_sle_i16(i16 %x, i16 %n, i16 %m) { 7806; CHECK-LABEL: selectRI_sle_i16: 7807; CHECK: # %bb.0: # %entry 7808; CHECK-NEXT: sexth16 a0, a0 7809; CHECK-NEXT: cmplti16 a0, 11 7810; CHECK-NEXT: movt32 a1, a2 7811; CHECK-NEXT: mov16 a0, a1 7812; CHECK-NEXT: rts16 7813; 7814; GENERIC-LABEL: selectRI_sle_i16: 7815; GENERIC: # %bb.0: # %entry 7816; GENERIC-NEXT: .cfi_def_cfa_offset 0 7817; GENERIC-NEXT: subi16 sp, sp, 4 7818; GENERIC-NEXT: .cfi_def_cfa_offset 4 7819; GENERIC-NEXT: sexth16 a0, a0 7820; GENERIC-NEXT: cmplti16 a0, 11 7821; GENERIC-NEXT: mvcv16 a0 7822; GENERIC-NEXT: movi16 a3, 1 7823; GENERIC-NEXT: subu16 a3, a0 7824; GENERIC-NEXT: btsti16 a3, 0 7825; GENERIC-NEXT: bt16 .LBB191_2 7826; GENERIC-NEXT: # %bb.1: # %entry 7827; GENERIC-NEXT: mov16 a2, a1 7828; GENERIC-NEXT: .LBB191_2: # %entry 7829; GENERIC-NEXT: mov16 a0, a2 7830; GENERIC-NEXT: addi16 sp, sp, 4 7831; GENERIC-NEXT: rts16 7832entry: 7833 %icmp = icmp sle i16 %x, 10 7834 %ret = select i1 %icmp, i16 %m, i16 %n 7835 ret i16 %ret 7836} 7837 7838define i16 @selectRX_sle_i16(i16 %x, i16 %n, i16 %m) { 7839; CHECK-LABEL: selectRX_sle_i16: 7840; CHECK: # %bb.0: # %entry 7841; CHECK-NEXT: sexth16 a0, a0 7842; CHECK-NEXT: cmplti32 a0, 2034 7843; CHECK-NEXT: movt32 a1, a2 7844; CHECK-NEXT: mov16 a0, a1 7845; CHECK-NEXT: rts16 7846; 7847; GENERIC-LABEL: selectRX_sle_i16: 7848; GENERIC: # %bb.0: # %entry 7849; GENERIC-NEXT: subi16 sp, sp, 4 7850; GENERIC-NEXT: .cfi_def_cfa_offset 4 7851; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 7852; GENERIC-NEXT: .cfi_offset l0, -4 7853; GENERIC-NEXT: subi16 sp, sp, 4 7854; GENERIC-NEXT: .cfi_def_cfa_offset 8 7855; GENERIC-NEXT: sexth16 a0, a0 7856; GENERIC-NEXT: movi16 a3, 0 7857; GENERIC-NEXT: lsli16 l0, a3, 24 7858; GENERIC-NEXT: lsli16 a3, a3, 16 7859; GENERIC-NEXT: or16 a3, l0 7860; GENERIC-NEXT: movi16 l0, 7 7861; GENERIC-NEXT: lsli16 l0, l0, 8 7862; GENERIC-NEXT: or16 l0, a3 7863; GENERIC-NEXT: movi16 a3, 242 7864; GENERIC-NEXT: or16 a3, l0 7865; GENERIC-NEXT: cmplt16 a0, a3 7866; GENERIC-NEXT: mvcv16 a0 7867; GENERIC-NEXT: movi16 a3, 1 7868; GENERIC-NEXT: subu16 a3, a0 7869; GENERIC-NEXT: btsti16 a3, 0 7870; GENERIC-NEXT: bt16 .LBB192_2 7871; GENERIC-NEXT: # %bb.1: # %entry 7872; GENERIC-NEXT: mov16 a2, a1 7873; GENERIC-NEXT: .LBB192_2: # %entry 7874; GENERIC-NEXT: mov16 a0, a2 7875; GENERIC-NEXT: addi16 sp, sp, 4 7876; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 7877; GENERIC-NEXT: addi16 sp, sp, 4 7878; GENERIC-NEXT: rts16 7879entry: 7880 %icmp = icmp sle i16 %x, 47777777 7881 %ret = select i1 %icmp, i16 %m, i16 %n 7882 ret i16 %ret 7883} 7884 7885define i16 @selectC_sle_i16(i1 %c, i16 %n, i16 %m) { 7886; CHECK-LABEL: selectC_sle_i16: 7887; CHECK: # %bb.0: # %entry 7888; CHECK-NEXT: btsti16 a0, 0 7889; CHECK-NEXT: movt32 a1, a2 7890; CHECK-NEXT: mov16 a0, a1 7891; CHECK-NEXT: rts16 7892; 7893; GENERIC-LABEL: selectC_sle_i16: 7894; GENERIC: # %bb.0: # %entry 7895; GENERIC-NEXT: .cfi_def_cfa_offset 0 7896; GENERIC-NEXT: subi16 sp, sp, 4 7897; GENERIC-NEXT: .cfi_def_cfa_offset 4 7898; GENERIC-NEXT: btsti16 a0, 0 7899; GENERIC-NEXT: bt16 .LBB193_2 7900; GENERIC-NEXT: # %bb.1: # %entry 7901; GENERIC-NEXT: mov16 a2, a1 7902; GENERIC-NEXT: .LBB193_2: # %entry 7903; GENERIC-NEXT: mov16 a0, a2 7904; GENERIC-NEXT: addi16 sp, sp, 4 7905; GENERIC-NEXT: rts16 7906entry: 7907 %ret = select i1 %c, i16 %m, i16 %n 7908 ret i16 %ret 7909} 7910 7911 7912define i8 @selectRR_sle_i8(i8 %x, i8 %y, i8 %n, i8 %m) { 7913; CHECK-LABEL: selectRR_sle_i8: 7914; CHECK: # %bb.0: # %entry 7915; CHECK-NEXT: sextb16 a1, a1 7916; CHECK-NEXT: sextb16 a0, a0 7917; CHECK-NEXT: cmplt16 a0, a1 7918; CHECK-NEXT: movf32 a2, a3 7919; CHECK-NEXT: mov16 a0, a2 7920; CHECK-NEXT: rts16 7921; 7922; GENERIC-LABEL: selectRR_sle_i8: 7923; GENERIC: # %bb.0: # %entry 7924; GENERIC-NEXT: .cfi_def_cfa_offset 0 7925; GENERIC-NEXT: subi16 sp, sp, 4 7926; GENERIC-NEXT: .cfi_def_cfa_offset 4 7927; GENERIC-NEXT: sextb16 a1, a1 7928; GENERIC-NEXT: sextb16 a0, a0 7929; GENERIC-NEXT: cmplt16 a0, a1 7930; GENERIC-NEXT: mvcv16 a0 7931; GENERIC-NEXT: btsti16 a0, 0 7932; GENERIC-NEXT: bt16 .LBB194_2 7933; GENERIC-NEXT: # %bb.1: # %entry 7934; GENERIC-NEXT: mov16 a3, a2 7935; GENERIC-NEXT: .LBB194_2: # %entry 7936; GENERIC-NEXT: mov16 a0, a3 7937; GENERIC-NEXT: addi16 sp, sp, 4 7938; GENERIC-NEXT: rts16 7939entry: 7940 %icmp = icmp sle i8 %y, %x 7941 %ret = select i1 %icmp, i8 %m, i8 %n 7942 ret i8 %ret 7943} 7944 7945define i8 @selectRI_sle_i8(i8 %x, i8 %n, i8 %m) { 7946; CHECK-LABEL: selectRI_sle_i8: 7947; CHECK: # %bb.0: # %entry 7948; CHECK-NEXT: sextb16 a0, a0 7949; CHECK-NEXT: cmplti16 a0, 11 7950; CHECK-NEXT: movt32 a1, a2 7951; CHECK-NEXT: mov16 a0, a1 7952; CHECK-NEXT: rts16 7953; 7954; GENERIC-LABEL: selectRI_sle_i8: 7955; GENERIC: # %bb.0: # %entry 7956; GENERIC-NEXT: .cfi_def_cfa_offset 0 7957; GENERIC-NEXT: subi16 sp, sp, 4 7958; GENERIC-NEXT: .cfi_def_cfa_offset 4 7959; GENERIC-NEXT: sextb16 a0, a0 7960; GENERIC-NEXT: cmplti16 a0, 11 7961; GENERIC-NEXT: mvcv16 a0 7962; GENERIC-NEXT: movi16 a3, 1 7963; GENERIC-NEXT: subu16 a3, a0 7964; GENERIC-NEXT: btsti16 a3, 0 7965; GENERIC-NEXT: bt16 .LBB195_2 7966; GENERIC-NEXT: # %bb.1: # %entry 7967; GENERIC-NEXT: mov16 a2, a1 7968; GENERIC-NEXT: .LBB195_2: # %entry 7969; GENERIC-NEXT: mov16 a0, a2 7970; GENERIC-NEXT: addi16 sp, sp, 4 7971; GENERIC-NEXT: rts16 7972entry: 7973 %icmp = icmp sle i8 %x, 10 7974 %ret = select i1 %icmp, i8 %m, i8 %n 7975 ret i8 %ret 7976} 7977 7978define i8 @selectRX_sle_i8(i8 %x, i8 %n, i8 %m) { 7979; CHECK-LABEL: selectRX_sle_i8: 7980; CHECK: # %bb.0: # %entry 7981; CHECK-NEXT: sextb16 a0, a0 7982; CHECK-NEXT: movih32 a3, 65535 7983; CHECK-NEXT: ori32 a3, a3, 65522 7984; CHECK-NEXT: cmplt16 a0, a3 7985; CHECK-NEXT: movt32 a1, a2 7986; CHECK-NEXT: mov16 a0, a1 7987; CHECK-NEXT: rts16 7988; 7989; GENERIC-LABEL: selectRX_sle_i8: 7990; GENERIC: # %bb.0: # %entry 7991; GENERIC-NEXT: subi16 sp, sp, 8 7992; GENERIC-NEXT: .cfi_def_cfa_offset 8 7993; GENERIC-NEXT: st16.w l1, (sp, 4) # 4-byte Folded Spill 7994; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 7995; GENERIC-NEXT: .cfi_offset l1, -4 7996; GENERIC-NEXT: .cfi_offset l0, -8 7997; GENERIC-NEXT: subi16 sp, sp, 4 7998; GENERIC-NEXT: .cfi_def_cfa_offset 12 7999; GENERIC-NEXT: sextb16 a0, a0 8000; GENERIC-NEXT: movi16 a3, 255 8001; GENERIC-NEXT: lsli16 l0, a3, 24 8002; GENERIC-NEXT: lsli16 l1, a3, 16 8003; GENERIC-NEXT: or16 l1, l0 8004; GENERIC-NEXT: lsli16 a3, a3, 8 8005; GENERIC-NEXT: or16 a3, l1 8006; GENERIC-NEXT: movi16 l0, 242 8007; GENERIC-NEXT: or16 l0, a3 8008; GENERIC-NEXT: cmplt16 a0, l0 8009; GENERIC-NEXT: mvcv16 a0 8010; GENERIC-NEXT: movi16 a3, 1 8011; GENERIC-NEXT: subu16 a3, a0 8012; GENERIC-NEXT: btsti16 a3, 0 8013; GENERIC-NEXT: bt16 .LBB196_2 8014; GENERIC-NEXT: # %bb.1: # %entry 8015; GENERIC-NEXT: mov16 a2, a1 8016; GENERIC-NEXT: .LBB196_2: # %entry 8017; GENERIC-NEXT: mov16 a0, a2 8018; GENERIC-NEXT: addi16 sp, sp, 4 8019; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 8020; GENERIC-NEXT: ld16.w l1, (sp, 4) # 4-byte Folded Reload 8021; GENERIC-NEXT: addi16 sp, sp, 8 8022; GENERIC-NEXT: rts16 8023entry: 8024 %icmp = icmp sle i8 %x, 47777777 8025 %ret = select i1 %icmp, i8 %m, i8 %n 8026 ret i8 %ret 8027} 8028 8029define i8 @selectC_sle_i8(i1 %c, i8 %n, i8 %m) { 8030; CHECK-LABEL: selectC_sle_i8: 8031; CHECK: # %bb.0: # %entry 8032; CHECK-NEXT: btsti16 a0, 0 8033; CHECK-NEXT: movt32 a1, a2 8034; CHECK-NEXT: mov16 a0, a1 8035; CHECK-NEXT: rts16 8036; 8037; GENERIC-LABEL: selectC_sle_i8: 8038; GENERIC: # %bb.0: # %entry 8039; GENERIC-NEXT: .cfi_def_cfa_offset 0 8040; GENERIC-NEXT: subi16 sp, sp, 4 8041; GENERIC-NEXT: .cfi_def_cfa_offset 4 8042; GENERIC-NEXT: btsti16 a0, 0 8043; GENERIC-NEXT: bt16 .LBB197_2 8044; GENERIC-NEXT: # %bb.1: # %entry 8045; GENERIC-NEXT: mov16 a2, a1 8046; GENERIC-NEXT: .LBB197_2: # %entry 8047; GENERIC-NEXT: mov16 a0, a2 8048; GENERIC-NEXT: addi16 sp, sp, 4 8049; GENERIC-NEXT: rts16 8050entry: 8051 %ret = select i1 %c, i8 %m, i8 %n 8052 ret i8 %ret 8053} 8054 8055 8056define i1 @selectRR_sle_i1(i1 %x, i1 %y, i1 %n, i1 %m) { 8057; CHECK-LABEL: selectRR_sle_i1: 8058; CHECK: # %bb.0: # %entry 8059; CHECK-NEXT: btsti16 a0, 0 8060; CHECK-NEXT: mov16 a0, a3 8061; CHECK-NEXT: movt32 a0, a2 8062; CHECK-NEXT: btsti16 a1, 0 8063; CHECK-NEXT: movt32 a0, a3 8064; CHECK-NEXT: rts16 8065; 8066; GENERIC-LABEL: selectRR_sle_i1: 8067; GENERIC: # %bb.0: # %entry 8068; GENERIC-NEXT: .cfi_def_cfa_offset 0 8069; GENERIC-NEXT: subi16 sp, sp, 4 8070; GENERIC-NEXT: .cfi_def_cfa_offset 4 8071; GENERIC-NEXT: btsti16 a0, 0 8072; GENERIC-NEXT: bt16 .LBB198_2 8073; GENERIC-NEXT: # %bb.1: # %entry 8074; GENERIC-NEXT: mov16 a2, a3 8075; GENERIC-NEXT: .LBB198_2: # %entry 8076; GENERIC-NEXT: btsti16 a1, 0 8077; GENERIC-NEXT: bt16 .LBB198_4 8078; GENERIC-NEXT: # %bb.3: # %entry 8079; GENERIC-NEXT: mov16 a3, a2 8080; GENERIC-NEXT: .LBB198_4: # %entry 8081; GENERIC-NEXT: mov16 a0, a3 8082; GENERIC-NEXT: addi16 sp, sp, 4 8083; GENERIC-NEXT: rts16 8084entry: 8085 %icmp = icmp sle i1 %y, %x 8086 %ret = select i1 %icmp, i1 %m, i1 %n 8087 ret i1 %ret 8088} 8089 8090define i1 @selectRI_sle_i1(i1 %x, i1 %n, i1 %m) { 8091; CHECK-LABEL: selectRI_sle_i1: 8092; CHECK: # %bb.0: # %entry 8093; CHECK-NEXT: mov16 a0, a2 8094; CHECK-NEXT: rts16 8095; 8096; GENERIC-LABEL: selectRI_sle_i1: 8097; GENERIC: # %bb.0: # %entry 8098; GENERIC-NEXT: .cfi_def_cfa_offset 0 8099; GENERIC-NEXT: subi16 sp, sp, 4 8100; GENERIC-NEXT: .cfi_def_cfa_offset 4 8101; GENERIC-NEXT: mov16 a0, a2 8102; GENERIC-NEXT: addi16 sp, sp, 4 8103; GENERIC-NEXT: rts16 8104entry: 8105 %icmp = icmp sle i1 %x, 10 8106 %ret = select i1 %icmp, i1 %m, i1 %n 8107 ret i1 %ret 8108} 8109 8110define i1 @selectRX_sle_i1(i1 %x, i1 %n, i1 %m) { 8111; CHECK-LABEL: selectRX_sle_i1: 8112; CHECK: # %bb.0: # %entry 8113; CHECK-NEXT: btsti16 a0, 0 8114; CHECK-NEXT: movt32 a1, a2 8115; CHECK-NEXT: mov16 a0, a1 8116; CHECK-NEXT: rts16 8117; 8118; GENERIC-LABEL: selectRX_sle_i1: 8119; GENERIC: # %bb.0: # %entry 8120; GENERIC-NEXT: .cfi_def_cfa_offset 0 8121; GENERIC-NEXT: subi16 sp, sp, 4 8122; GENERIC-NEXT: .cfi_def_cfa_offset 4 8123; GENERIC-NEXT: btsti16 a0, 0 8124; GENERIC-NEXT: bt16 .LBB200_2 8125; GENERIC-NEXT: # %bb.1: # %entry 8126; GENERIC-NEXT: mov16 a2, a1 8127; GENERIC-NEXT: .LBB200_2: # %entry 8128; GENERIC-NEXT: mov16 a0, a2 8129; GENERIC-NEXT: addi16 sp, sp, 4 8130; GENERIC-NEXT: rts16 8131entry: 8132 %icmp = icmp sle i1 %x, 47777777 8133 %ret = select i1 %icmp, i1 %m, i1 %n 8134 ret i1 %ret 8135} 8136 8137define i1 @selectC_sle_i1(i1 %c, i1 %n, i1 %m) { 8138; CHECK-LABEL: selectC_sle_i1: 8139; CHECK: # %bb.0: # %entry 8140; CHECK-NEXT: btsti16 a0, 0 8141; CHECK-NEXT: movt32 a1, a2 8142; CHECK-NEXT: mov16 a0, a1 8143; CHECK-NEXT: rts16 8144; 8145; GENERIC-LABEL: selectC_sle_i1: 8146; GENERIC: # %bb.0: # %entry 8147; GENERIC-NEXT: .cfi_def_cfa_offset 0 8148; GENERIC-NEXT: subi16 sp, sp, 4 8149; GENERIC-NEXT: .cfi_def_cfa_offset 4 8150; GENERIC-NEXT: btsti16 a0, 0 8151; GENERIC-NEXT: bt16 .LBB201_2 8152; GENERIC-NEXT: # %bb.1: # %entry 8153; GENERIC-NEXT: mov16 a2, a1 8154; GENERIC-NEXT: .LBB201_2: # %entry 8155; GENERIC-NEXT: mov16 a0, a2 8156; GENERIC-NEXT: addi16 sp, sp, 4 8157; GENERIC-NEXT: rts16 8158entry: 8159 %ret = select i1 %c, i1 %m, i1 %n 8160 ret i1 %ret 8161} 8162 8163define i32 @select_bit_test_eq_0(i32 %0) { 8164; CHECK-LABEL: select_bit_test_eq_0: 8165; CHECK: # %bb.0: 8166; CHECK-NEXT: btsti16 a0, 17 8167; CHECK-NEXT: movi16 a0, 23 8168; CHECK-NEXT: movi16 a1, 1 8169; CHECK-NEXT: movf32 a0, a1 8170; CHECK-NEXT: rts16 8171; 8172; GENERIC-LABEL: select_bit_test_eq_0: 8173; GENERIC: # %bb.0: 8174; GENERIC-NEXT: .cfi_def_cfa_offset 0 8175; GENERIC-NEXT: subi16 sp, sp, 4 8176; GENERIC-NEXT: .cfi_def_cfa_offset 4 8177; GENERIC-NEXT: movi16 a1, 0 8178; GENERIC-NEXT: lsli16 a2, a1, 24 8179; GENERIC-NEXT: movi16 a3, 2 8180; GENERIC-NEXT: lsli16 a3, a3, 16 8181; GENERIC-NEXT: or16 a3, a2 8182; GENERIC-NEXT: lsli16 a2, a1, 8 8183; GENERIC-NEXT: or16 a2, a3 8184; GENERIC-NEXT: or16 a2, a1 8185; GENERIC-NEXT: and16 a2, a0 8186; GENERIC-NEXT: cmpnei16 a2, 0 8187; GENERIC-NEXT: mvcv16 a1 8188; GENERIC-NEXT: movi16 a0, 1 8189; GENERIC-NEXT: btsti16 a1, 0 8190; GENERIC-NEXT: bt16 .LBB202_2 8191; GENERIC-NEXT: # %bb.1: 8192; GENERIC-NEXT: movi16 a0, 23 8193; GENERIC-NEXT: .LBB202_2: 8194; GENERIC-NEXT: addi16 sp, sp, 4 8195; GENERIC-NEXT: rts16 8196 %2 = and i32 %0, 131072 8197 %3 = icmp eq i32 %2, 0 8198 %4 = select i1 %3, i32 1, i32 23 8199 ret i32 %4 8200} 8201 8202define i32 @select_bit_test_ne_0(i32 %0) { 8203; CHECK-LABEL: select_bit_test_ne_0: 8204; CHECK: # %bb.0: 8205; CHECK-NEXT: btsti16 a0, 17 8206; CHECK-NEXT: movi16 a0, 34 8207; CHECK-NEXT: movi16 a1, 5 8208; CHECK-NEXT: movt32 a0, a1 8209; CHECK-NEXT: rts16 8210; 8211; GENERIC-LABEL: select_bit_test_ne_0: 8212; GENERIC: # %bb.0: 8213; GENERIC-NEXT: .cfi_def_cfa_offset 0 8214; GENERIC-NEXT: subi16 sp, sp, 4 8215; GENERIC-NEXT: .cfi_def_cfa_offset 4 8216; GENERIC-NEXT: movi16 a1, 0 8217; GENERIC-NEXT: lsli16 a2, a1, 24 8218; GENERIC-NEXT: movi16 a3, 2 8219; GENERIC-NEXT: lsli16 a3, a3, 16 8220; GENERIC-NEXT: or16 a3, a2 8221; GENERIC-NEXT: lsli16 a2, a1, 8 8222; GENERIC-NEXT: or16 a2, a3 8223; GENERIC-NEXT: or16 a2, a1 8224; GENERIC-NEXT: and16 a2, a0 8225; GENERIC-NEXT: cmpnei16 a2, 0 8226; GENERIC-NEXT: mvcv16 a0 8227; GENERIC-NEXT: movi16 a1, 1 8228; GENERIC-NEXT: subu16 a1, a0 8229; GENERIC-NEXT: movi16 a0, 5 8230; GENERIC-NEXT: btsti16 a1, 0 8231; GENERIC-NEXT: bt16 .LBB203_2 8232; GENERIC-NEXT: # %bb.1: 8233; GENERIC-NEXT: movi16 a0, 34 8234; GENERIC-NEXT: .LBB203_2: 8235; GENERIC-NEXT: addi16 sp, sp, 4 8236; GENERIC-NEXT: rts16 8237 %2 = and i32 %0, 131072 8238 %3 = icmp ne i32 %2, 0 8239 %4 = select i1 %3, i32 5, i32 34 8240 ret i32 %4 8241} 8242 8243define i32 @select_bit_test_eq_mask(i32 %0) { 8244; CHECK-LABEL: select_bit_test_eq_mask: 8245; CHECK: # %bb.0: 8246; CHECK-NEXT: btsti16 a0, 17 8247; CHECK-NEXT: movi16 a0, 5 8248; CHECK-NEXT: movi16 a1, 34 8249; CHECK-NEXT: movt32 a0, a1 8250; CHECK-NEXT: rts16 8251; 8252; GENERIC-LABEL: select_bit_test_eq_mask: 8253; GENERIC: # %bb.0: 8254; GENERIC-NEXT: .cfi_def_cfa_offset 0 8255; GENERIC-NEXT: subi16 sp, sp, 4 8256; GENERIC-NEXT: .cfi_def_cfa_offset 4 8257; GENERIC-NEXT: movi16 a1, 0 8258; GENERIC-NEXT: lsli16 a2, a1, 24 8259; GENERIC-NEXT: movi16 a3, 2 8260; GENERIC-NEXT: lsli16 a3, a3, 16 8261; GENERIC-NEXT: or16 a3, a2 8262; GENERIC-NEXT: lsli16 a2, a1, 8 8263; GENERIC-NEXT: or16 a2, a3 8264; GENERIC-NEXT: or16 a2, a1 8265; GENERIC-NEXT: and16 a2, a0 8266; GENERIC-NEXT: cmpnei16 a2, 0 8267; GENERIC-NEXT: mvcv16 a0 8268; GENERIC-NEXT: movi16 a1, 1 8269; GENERIC-NEXT: subu16 a1, a0 8270; GENERIC-NEXT: movi16 a0, 34 8271; GENERIC-NEXT: btsti16 a1, 0 8272; GENERIC-NEXT: bt16 .LBB204_2 8273; GENERIC-NEXT: # %bb.1: 8274; GENERIC-NEXT: movi16 a0, 5 8275; GENERIC-NEXT: .LBB204_2: 8276; GENERIC-NEXT: addi16 sp, sp, 4 8277; GENERIC-NEXT: rts16 8278 %2 = and i32 %0, 131072 8279 %3 = icmp eq i32 %2, 131072 8280 %4 = select i1 %3, i32 34, i32 5 8281 ret i32 %4 8282} 8283 8284define i32 @select_bit_test_ne_mask(i32 %0) { 8285; CHECK-LABEL: select_bit_test_ne_mask: 8286; CHECK: # %bb.0: 8287; CHECK-NEXT: btsti16 a0, 17 8288; CHECK-NEXT: movi16 a0, 34 8289; CHECK-NEXT: movi16 a1, 5 8290; CHECK-NEXT: movt32 a0, a1 8291; CHECK-NEXT: rts16 8292; 8293; GENERIC-LABEL: select_bit_test_ne_mask: 8294; GENERIC: # %bb.0: 8295; GENERIC-NEXT: .cfi_def_cfa_offset 0 8296; GENERIC-NEXT: subi16 sp, sp, 4 8297; GENERIC-NEXT: .cfi_def_cfa_offset 4 8298; GENERIC-NEXT: movi16 a1, 0 8299; GENERIC-NEXT: lsli16 a2, a1, 24 8300; GENERIC-NEXT: movi16 a3, 2 8301; GENERIC-NEXT: lsli16 a3, a3, 16 8302; GENERIC-NEXT: or16 a3, a2 8303; GENERIC-NEXT: lsli16 a2, a1, 8 8304; GENERIC-NEXT: or16 a2, a3 8305; GENERIC-NEXT: or16 a2, a1 8306; GENERIC-NEXT: and16 a2, a0 8307; GENERIC-NEXT: cmpnei16 a2, 0 8308; GENERIC-NEXT: mvcv16 a0 8309; GENERIC-NEXT: movi16 a1, 1 8310; GENERIC-NEXT: subu16 a1, a0 8311; GENERIC-NEXT: movi16 a0, 5 8312; GENERIC-NEXT: btsti16 a1, 0 8313; GENERIC-NEXT: bt16 .LBB205_2 8314; GENERIC-NEXT: # %bb.1: 8315; GENERIC-NEXT: movi16 a0, 34 8316; GENERIC-NEXT: .LBB205_2: 8317; GENERIC-NEXT: addi16 sp, sp, 4 8318; GENERIC-NEXT: rts16 8319 %2 = and i32 %0, 131072 8320 %3 = icmp eq i32 %2, 131072 8321 %4 = select i1 %3, i32 5, i32 34 8322 ret i32 %4 8323} 8324 8325define i32 @select_lowbit_test_ne_0(i32 %0) { 8326; CHECK-LABEL: select_lowbit_test_ne_0: 8327; CHECK: # %bb.0: 8328; CHECK-NEXT: andi32 a0, a0, 256 8329; CHECK-NEXT: cmpnei16 a0, 0 8330; CHECK-NEXT: movi16 a0, 34 8331; CHECK-NEXT: movi16 a1, 5 8332; CHECK-NEXT: movt32 a0, a1 8333; CHECK-NEXT: rts16 8334; 8335; GENERIC-LABEL: select_lowbit_test_ne_0: 8336; GENERIC: # %bb.0: 8337; GENERIC-NEXT: subi16 sp, sp, 4 8338; GENERIC-NEXT: .cfi_def_cfa_offset 4 8339; GENERIC-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill 8340; GENERIC-NEXT: .cfi_offset l0, -4 8341; GENERIC-NEXT: subi16 sp, sp, 4 8342; GENERIC-NEXT: .cfi_def_cfa_offset 8 8343; GENERIC-NEXT: movi16 a1, 0 8344; GENERIC-NEXT: lsli16 a2, a1, 24 8345; GENERIC-NEXT: lsli16 a3, a1, 16 8346; GENERIC-NEXT: or16 a3, a2 8347; GENERIC-NEXT: movi16 a2, 1 8348; GENERIC-NEXT: lsli16 l0, a2, 8 8349; GENERIC-NEXT: or16 l0, a3 8350; GENERIC-NEXT: or16 l0, a1 8351; GENERIC-NEXT: and16 l0, a0 8352; GENERIC-NEXT: cmpnei16 l0, 0 8353; GENERIC-NEXT: mvcv16 a0 8354; GENERIC-NEXT: subu16 a2, a0 8355; GENERIC-NEXT: movi16 a0, 5 8356; GENERIC-NEXT: btsti16 a2, 0 8357; GENERIC-NEXT: bt16 .LBB206_2 8358; GENERIC-NEXT: # %bb.1: 8359; GENERIC-NEXT: movi16 a0, 34 8360; GENERIC-NEXT: .LBB206_2: 8361; GENERIC-NEXT: addi16 sp, sp, 4 8362; GENERIC-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload 8363; GENERIC-NEXT: addi16 sp, sp, 4 8364; GENERIC-NEXT: rts16 8365 %2 = and i32 %0, 256 8366 %3 = icmp ne i32 %2, 0 8367 %4 = select i1 %3, i32 5, i32 34 8368 ret i32 %4 8369} 8370