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