2695 lines · plain
1; RUN: llc < %s -mtriple=ve | FileCheck %s2 3;;; Test all combination of input type and output type among following types.4;;;5;;; Types:6;;; i1/i8/u8/i16/u16/i32/u32/i64/u64/i128/u128/float/double/fp1287 8; Function Attrs: norecurse nounwind readnone9define zeroext i1 @select_cc_i1_i1(i1 zeroext %0, i1 zeroext %1, i1 zeroext %2, i1 zeroext %3) {10; CHECK-LABEL: select_cc_i1_i1:11; CHECK: # %bb.0:12; CHECK-NEXT: xor %s0, %s0, %s113; CHECK-NEXT: cmov.w.ne %s2, %s3, %s014; CHECK-NEXT: adds.w.zx %s0, %s2, (0)115; CHECK-NEXT: b.l.t (, %s10)16 %5 = xor i1 %0, %117 %6 = select i1 %5, i1 %3, i1 %218 ret i1 %619}20 21; Function Attrs: norecurse nounwind readnone22define zeroext i1 @select_cc_i8_i1(i8 signext %0, i8 signext %1, i1 zeroext %2, i1 zeroext %3) {23; CHECK-LABEL: select_cc_i8_i1:24; CHECK: # %bb.0:25; CHECK-NEXT: cmpu.w %s0, %s0, %s126; CHECK-NEXT: cmov.w.eq %s3, %s2, %s027; CHECK-NEXT: adds.w.zx %s0, %s3, (0)128; CHECK-NEXT: b.l.t (, %s10)29 %5 = icmp eq i8 %0, %130 %6 = select i1 %5, i1 %2, i1 %331 ret i1 %632}33 34; Function Attrs: norecurse nounwind readnone35define zeroext i1 @select_cc_u8_i1(i8 zeroext %0, i8 zeroext %1, i1 zeroext %2, i1 zeroext %3) {36; CHECK-LABEL: select_cc_u8_i1:37; CHECK: # %bb.0:38; CHECK-NEXT: cmpu.w %s0, %s0, %s139; CHECK-NEXT: cmov.w.eq %s3, %s2, %s040; CHECK-NEXT: adds.w.zx %s0, %s3, (0)141; CHECK-NEXT: b.l.t (, %s10)42 %5 = icmp eq i8 %0, %143 %6 = select i1 %5, i1 %2, i1 %344 ret i1 %645}46 47; Function Attrs: norecurse nounwind readnone48define zeroext i1 @select_cc_i16_i1(i16 signext %0, i16 signext %1, i1 zeroext %2, i1 zeroext %3) {49; CHECK-LABEL: select_cc_i16_i1:50; CHECK: # %bb.0:51; CHECK-NEXT: cmpu.w %s0, %s0, %s152; CHECK-NEXT: cmov.w.eq %s3, %s2, %s053; CHECK-NEXT: adds.w.zx %s0, %s3, (0)154; CHECK-NEXT: b.l.t (, %s10)55 %5 = icmp eq i16 %0, %156 %6 = select i1 %5, i1 %2, i1 %357 ret i1 %658}59 60; Function Attrs: norecurse nounwind readnone61define zeroext i1 @select_cc_u16_i1(i16 zeroext %0, i16 zeroext %1, i1 zeroext %2, i1 zeroext %3) {62; CHECK-LABEL: select_cc_u16_i1:63; CHECK: # %bb.0:64; CHECK-NEXT: cmpu.w %s0, %s0, %s165; CHECK-NEXT: cmov.w.eq %s3, %s2, %s066; CHECK-NEXT: adds.w.zx %s0, %s3, (0)167; CHECK-NEXT: b.l.t (, %s10)68 %5 = icmp eq i16 %0, %169 %6 = select i1 %5, i1 %2, i1 %370 ret i1 %671}72 73; Function Attrs: norecurse nounwind readnone74define zeroext i1 @select_cc_i32_i1(i32 signext %0, i32 signext %1, i1 zeroext %2, i1 zeroext %3) {75; CHECK-LABEL: select_cc_i32_i1:76; CHECK: # %bb.0:77; CHECK-NEXT: cmpu.w %s0, %s0, %s178; CHECK-NEXT: cmov.w.eq %s3, %s2, %s079; CHECK-NEXT: adds.w.zx %s0, %s3, (0)180; CHECK-NEXT: b.l.t (, %s10)81 %5 = icmp eq i32 %0, %182 %6 = select i1 %5, i1 %2, i1 %383 ret i1 %684}85 86; Function Attrs: norecurse nounwind readnone87define zeroext i1 @select_cc_u32_i1(i32 zeroext %0, i32 zeroext %1, i1 zeroext %2, i1 zeroext %3) {88; CHECK-LABEL: select_cc_u32_i1:89; CHECK: # %bb.0:90; CHECK-NEXT: cmpu.w %s0, %s0, %s191; CHECK-NEXT: cmov.w.eq %s3, %s2, %s092; CHECK-NEXT: adds.w.zx %s0, %s3, (0)193; CHECK-NEXT: b.l.t (, %s10)94 %5 = icmp eq i32 %0, %195 %6 = select i1 %5, i1 %2, i1 %396 ret i1 %697}98 99; Function Attrs: norecurse nounwind readnone100define zeroext i1 @select_cc_i64_i1(i64 %0, i64 %1, i1 zeroext %2, i1 zeroext %3) {101; CHECK-LABEL: select_cc_i64_i1:102; CHECK: # %bb.0:103; CHECK-NEXT: cmpu.l %s0, %s0, %s1104; CHECK-NEXT: cmov.l.eq %s3, %s2, %s0105; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1106; CHECK-NEXT: b.l.t (, %s10)107 %5 = icmp eq i64 %0, %1108 %6 = select i1 %5, i1 %2, i1 %3109 ret i1 %6110}111 112; Function Attrs: norecurse nounwind readnone113define zeroext i1 @select_cc_u64_i1(i64 %0, i64 %1, i1 zeroext %2, i1 zeroext %3) {114; CHECK-LABEL: select_cc_u64_i1:115; CHECK: # %bb.0:116; CHECK-NEXT: cmpu.l %s0, %s0, %s1117; CHECK-NEXT: cmov.l.eq %s3, %s2, %s0118; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1119; CHECK-NEXT: b.l.t (, %s10)120 %5 = icmp eq i64 %0, %1121 %6 = select i1 %5, i1 %2, i1 %3122 ret i1 %6123}124 125; Function Attrs: norecurse nounwind readnone126define zeroext i1 @select_cc_i128_i1(i128 %0, i128 %1, i1 zeroext %2, i1 zeroext %3) {127; CHECK-LABEL: select_cc_i128_i1:128; CHECK: # %bb.0:129; CHECK-NEXT: xor %s1, %s1, %s3130; CHECK-NEXT: xor %s0, %s0, %s2131; CHECK-NEXT: or %s0, %s0, %s1132; CHECK-NEXT: cmov.l.eq %s5, %s4, %s0133; CHECK-NEXT: adds.w.zx %s0, %s5, (0)1134; CHECK-NEXT: b.l.t (, %s10)135 %5 = icmp eq i128 %0, %1136 %6 = select i1 %5, i1 %2, i1 %3137 ret i1 %6138}139 140; Function Attrs: norecurse nounwind readnone141define zeroext i1 @select_cc_u128_i1(i128 %0, i128 %1, i1 zeroext %2, i1 zeroext %3) {142; CHECK-LABEL: select_cc_u128_i1:143; CHECK: # %bb.0:144; CHECK-NEXT: xor %s1, %s1, %s3145; CHECK-NEXT: xor %s0, %s0, %s2146; CHECK-NEXT: or %s0, %s0, %s1147; CHECK-NEXT: cmov.l.eq %s5, %s4, %s0148; CHECK-NEXT: adds.w.zx %s0, %s5, (0)1149; CHECK-NEXT: b.l.t (, %s10)150 %5 = icmp eq i128 %0, %1151 %6 = select i1 %5, i1 %2, i1 %3152 ret i1 %6153}154 155; Function Attrs: norecurse nounwind readnone156define zeroext i1 @select_cc_float_i1(float %0, float %1, i1 zeroext %2, i1 zeroext %3) {157; CHECK-LABEL: select_cc_float_i1:158; CHECK: # %bb.0:159; CHECK-NEXT: fcmp.s %s0, %s0, %s1160; CHECK-NEXT: cmov.s.eq %s3, %s2, %s0161; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1162; CHECK-NEXT: b.l.t (, %s10)163 %5 = fcmp fast oeq float %0, %1164 %6 = select i1 %5, i1 %2, i1 %3165 ret i1 %6166}167 168; Function Attrs: norecurse nounwind readnone169define zeroext i1 @select_cc_double_i1(double %0, double %1, i1 zeroext %2, i1 zeroext %3) {170; CHECK-LABEL: select_cc_double_i1:171; CHECK: # %bb.0:172; CHECK-NEXT: fcmp.d %s0, %s0, %s1173; CHECK-NEXT: cmov.d.eq %s3, %s2, %s0174; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1175; CHECK-NEXT: b.l.t (, %s10)176 %5 = fcmp fast oeq double %0, %1177 %6 = select i1 %5, i1 %2, i1 %3178 ret i1 %6179}180 181; Function Attrs: norecurse nounwind readnone182define zeroext i1 @select_cc_quad_i1(fp128 %0, fp128 %1, i1 zeroext %2, i1 zeroext %3) {183; CHECK-LABEL: select_cc_quad_i1:184; CHECK: # %bb.0:185; CHECK-NEXT: fcmp.q %s0, %s0, %s2186; CHECK-NEXT: cmov.d.eq %s5, %s4, %s0187; CHECK-NEXT: adds.w.zx %s0, %s5, (0)1188; CHECK-NEXT: b.l.t (, %s10)189 %5 = fcmp fast oeq fp128 %0, %1190 %6 = select i1 %5, i1 %2, i1 %3191 ret i1 %6192}193 194; Function Attrs: norecurse nounwind readnone195define signext i8 @select_cc_i1_i8(i1 zeroext %0, i1 zeroext %1, i8 signext %2, i8 signext %3) {196; CHECK-LABEL: select_cc_i1_i8:197; CHECK: # %bb.0:198; CHECK-NEXT: xor %s0, %s0, %s1199; CHECK-NEXT: cmov.w.ne %s2, %s3, %s0200; CHECK-NEXT: adds.w.sx %s0, %s2, (0)1201; CHECK-NEXT: b.l.t (, %s10)202 %5 = xor i1 %0, %1203 %6 = select i1 %5, i8 %3, i8 %2204 ret i8 %6205}206 207; Function Attrs: norecurse nounwind readnone208define signext i8 @select_cc_i8_i8(i8 signext %0, i8 signext %1, i8 signext %2, i8 signext %3) {209; CHECK-LABEL: select_cc_i8_i8:210; CHECK: # %bb.0:211; CHECK-NEXT: cmpu.w %s0, %s0, %s1212; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0213; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1214; CHECK-NEXT: b.l.t (, %s10)215 %5 = icmp eq i8 %0, %1216 %6 = select i1 %5, i8 %2, i8 %3217 ret i8 %6218}219 220; Function Attrs: norecurse nounwind readnone221define signext i8 @select_cc_u8_i8(i8 zeroext %0, i8 zeroext %1, i8 signext %2, i8 signext %3) {222; CHECK-LABEL: select_cc_u8_i8:223; CHECK: # %bb.0:224; CHECK-NEXT: cmpu.w %s0, %s0, %s1225; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0226; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1227; CHECK-NEXT: b.l.t (, %s10)228 %5 = icmp eq i8 %0, %1229 %6 = select i1 %5, i8 %2, i8 %3230 ret i8 %6231}232 233; Function Attrs: norecurse nounwind readnone234define signext i8 @select_cc_i16_i8(i16 signext %0, i16 signext %1, i8 signext %2, i8 signext %3) {235; CHECK-LABEL: select_cc_i16_i8:236; CHECK: # %bb.0:237; CHECK-NEXT: cmpu.w %s0, %s0, %s1238; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0239; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1240; CHECK-NEXT: b.l.t (, %s10)241 %5 = icmp eq i16 %0, %1242 %6 = select i1 %5, i8 %2, i8 %3243 ret i8 %6244}245 246; Function Attrs: norecurse nounwind readnone247define signext i8 @select_cc_u16_i8(i16 zeroext %0, i16 zeroext %1, i8 signext %2, i8 signext %3) {248; CHECK-LABEL: select_cc_u16_i8:249; CHECK: # %bb.0:250; CHECK-NEXT: cmpu.w %s0, %s0, %s1251; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0252; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1253; CHECK-NEXT: b.l.t (, %s10)254 %5 = icmp eq i16 %0, %1255 %6 = select i1 %5, i8 %2, i8 %3256 ret i8 %6257}258 259; Function Attrs: norecurse nounwind readnone260define signext i8 @select_cc_i32_i8(i32 signext %0, i32 signext %1, i8 signext %2, i8 signext %3) {261; CHECK-LABEL: select_cc_i32_i8:262; CHECK: # %bb.0:263; CHECK-NEXT: cmpu.w %s0, %s0, %s1264; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0265; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1266; CHECK-NEXT: b.l.t (, %s10)267 %5 = icmp eq i32 %0, %1268 %6 = select i1 %5, i8 %2, i8 %3269 ret i8 %6270}271 272; Function Attrs: norecurse nounwind readnone273define signext i8 @select_cc_u32_i8(i32 zeroext %0, i32 zeroext %1, i8 signext %2, i8 signext %3) {274; CHECK-LABEL: select_cc_u32_i8:275; CHECK: # %bb.0:276; CHECK-NEXT: cmpu.w %s0, %s0, %s1277; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0278; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1279; CHECK-NEXT: b.l.t (, %s10)280 %5 = icmp eq i32 %0, %1281 %6 = select i1 %5, i8 %2, i8 %3282 ret i8 %6283}284 285; Function Attrs: norecurse nounwind readnone286define signext i8 @select_cc_i64_i8(i64 %0, i64 %1, i8 signext %2, i8 signext %3) {287; CHECK-LABEL: select_cc_i64_i8:288; CHECK: # %bb.0:289; CHECK-NEXT: cmpu.l %s0, %s0, %s1290; CHECK-NEXT: cmov.l.eq %s3, %s2, %s0291; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1292; CHECK-NEXT: b.l.t (, %s10)293 %5 = icmp eq i64 %0, %1294 %6 = select i1 %5, i8 %2, i8 %3295 ret i8 %6296}297 298; Function Attrs: norecurse nounwind readnone299define signext i8 @select_cc_u64_i8(i64 %0, i64 %1, i8 signext %2, i8 signext %3) {300; CHECK-LABEL: select_cc_u64_i8:301; CHECK: # %bb.0:302; CHECK-NEXT: cmpu.l %s0, %s0, %s1303; CHECK-NEXT: cmov.l.eq %s3, %s2, %s0304; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1305; CHECK-NEXT: b.l.t (, %s10)306 %5 = icmp eq i64 %0, %1307 %6 = select i1 %5, i8 %2, i8 %3308 ret i8 %6309}310 311; Function Attrs: norecurse nounwind readnone312define signext i8 @select_cc_i128_i8(i128 %0, i128 %1, i8 signext %2, i8 signext %3) {313; CHECK-LABEL: select_cc_i128_i8:314; CHECK: # %bb.0:315; CHECK-NEXT: xor %s1, %s1, %s3316; CHECK-NEXT: xor %s0, %s0, %s2317; CHECK-NEXT: or %s0, %s0, %s1318; CHECK-NEXT: cmov.l.eq %s5, %s4, %s0319; CHECK-NEXT: adds.w.sx %s0, %s5, (0)1320; CHECK-NEXT: b.l.t (, %s10)321 %5 = icmp eq i128 %0, %1322 %6 = select i1 %5, i8 %2, i8 %3323 ret i8 %6324}325 326; Function Attrs: norecurse nounwind readnone327define signext i8 @select_cc_u128_i8(i128 %0, i128 %1, i8 signext %2, i8 signext %3) {328; CHECK-LABEL: select_cc_u128_i8:329; CHECK: # %bb.0:330; CHECK-NEXT: xor %s1, %s1, %s3331; CHECK-NEXT: xor %s0, %s0, %s2332; CHECK-NEXT: or %s0, %s0, %s1333; CHECK-NEXT: cmov.l.eq %s5, %s4, %s0334; CHECK-NEXT: adds.w.sx %s0, %s5, (0)1335; CHECK-NEXT: b.l.t (, %s10)336 %5 = icmp eq i128 %0, %1337 %6 = select i1 %5, i8 %2, i8 %3338 ret i8 %6339}340 341; Function Attrs: norecurse nounwind readnone342define signext i8 @select_cc_float_i8(float %0, float %1, i8 signext %2, i8 signext %3) {343; CHECK-LABEL: select_cc_float_i8:344; CHECK: # %bb.0:345; CHECK-NEXT: fcmp.s %s0, %s0, %s1346; CHECK-NEXT: cmov.s.eq %s3, %s2, %s0347; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1348; CHECK-NEXT: b.l.t (, %s10)349 %5 = fcmp fast oeq float %0, %1350 %6 = select i1 %5, i8 %2, i8 %3351 ret i8 %6352}353 354; Function Attrs: norecurse nounwind readnone355define signext i8 @select_cc_double_i8(double %0, double %1, i8 signext %2, i8 signext %3) {356; CHECK-LABEL: select_cc_double_i8:357; CHECK: # %bb.0:358; CHECK-NEXT: fcmp.d %s0, %s0, %s1359; CHECK-NEXT: cmov.d.eq %s3, %s2, %s0360; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1361; CHECK-NEXT: b.l.t (, %s10)362 %5 = fcmp fast oeq double %0, %1363 %6 = select i1 %5, i8 %2, i8 %3364 ret i8 %6365}366 367; Function Attrs: norecurse nounwind readnone368define signext i8 @select_cc_quad_i8(fp128 %0, fp128 %1, i8 signext %2, i8 signext %3) {369; CHECK-LABEL: select_cc_quad_i8:370; CHECK: # %bb.0:371; CHECK-NEXT: fcmp.q %s0, %s0, %s2372; CHECK-NEXT: cmov.d.eq %s5, %s4, %s0373; CHECK-NEXT: adds.w.sx %s0, %s5, (0)1374; CHECK-NEXT: b.l.t (, %s10)375 %5 = fcmp fast oeq fp128 %0, %1376 %6 = select i1 %5, i8 %2, i8 %3377 ret i8 %6378}379 380; Function Attrs: norecurse nounwind readnone381define zeroext i8 @select_cc_i1_u8(i1 zeroext %0, i1 zeroext %1, i8 zeroext %2, i8 zeroext %3) {382; CHECK-LABEL: select_cc_i1_u8:383; CHECK: # %bb.0:384; CHECK-NEXT: xor %s0, %s0, %s1385; CHECK-NEXT: cmov.w.ne %s2, %s3, %s0386; CHECK-NEXT: adds.w.zx %s0, %s2, (0)1387; CHECK-NEXT: b.l.t (, %s10)388 %5 = xor i1 %0, %1389 %6 = select i1 %5, i8 %3, i8 %2390 ret i8 %6391}392 393; Function Attrs: norecurse nounwind readnone394define zeroext i8 @select_cc_i8_u8(i8 signext %0, i8 signext %1, i8 zeroext %2, i8 zeroext %3) {395; CHECK-LABEL: select_cc_i8_u8:396; CHECK: # %bb.0:397; CHECK-NEXT: cmpu.w %s0, %s0, %s1398; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0399; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1400; CHECK-NEXT: b.l.t (, %s10)401 %5 = icmp eq i8 %0, %1402 %6 = select i1 %5, i8 %2, i8 %3403 ret i8 %6404}405 406; Function Attrs: norecurse nounwind readnone407define zeroext i8 @select_cc_u8_u8(i8 zeroext %0, i8 zeroext %1, i8 zeroext %2, i8 zeroext %3) {408; CHECK-LABEL: select_cc_u8_u8:409; CHECK: # %bb.0:410; CHECK-NEXT: cmpu.w %s0, %s0, %s1411; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0412; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1413; CHECK-NEXT: b.l.t (, %s10)414 %5 = icmp eq i8 %0, %1415 %6 = select i1 %5, i8 %2, i8 %3416 ret i8 %6417}418 419; Function Attrs: norecurse nounwind readnone420define zeroext i8 @select_cc_i16_u8(i16 signext %0, i16 signext %1, i8 zeroext %2, i8 zeroext %3) {421; CHECK-LABEL: select_cc_i16_u8:422; CHECK: # %bb.0:423; CHECK-NEXT: cmpu.w %s0, %s0, %s1424; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0425; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1426; CHECK-NEXT: b.l.t (, %s10)427 %5 = icmp eq i16 %0, %1428 %6 = select i1 %5, i8 %2, i8 %3429 ret i8 %6430}431 432; Function Attrs: norecurse nounwind readnone433define zeroext i8 @select_cc_u16_u8(i16 zeroext %0, i16 zeroext %1, i8 zeroext %2, i8 zeroext %3) {434; CHECK-LABEL: select_cc_u16_u8:435; CHECK: # %bb.0:436; CHECK-NEXT: cmpu.w %s0, %s0, %s1437; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0438; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1439; CHECK-NEXT: b.l.t (, %s10)440 %5 = icmp eq i16 %0, %1441 %6 = select i1 %5, i8 %2, i8 %3442 ret i8 %6443}444 445; Function Attrs: norecurse nounwind readnone446define zeroext i8 @select_cc_i32_u8(i32 signext %0, i32 signext %1, i8 zeroext %2, i8 zeroext %3) {447; CHECK-LABEL: select_cc_i32_u8:448; CHECK: # %bb.0:449; CHECK-NEXT: cmpu.w %s0, %s0, %s1450; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0451; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1452; CHECK-NEXT: b.l.t (, %s10)453 %5 = icmp eq i32 %0, %1454 %6 = select i1 %5, i8 %2, i8 %3455 ret i8 %6456}457 458; Function Attrs: norecurse nounwind readnone459define zeroext i8 @select_cc_u32_u8(i32 zeroext %0, i32 zeroext %1, i8 zeroext %2, i8 zeroext %3) {460; CHECK-LABEL: select_cc_u32_u8:461; CHECK: # %bb.0:462; CHECK-NEXT: cmpu.w %s0, %s0, %s1463; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0464; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1465; CHECK-NEXT: b.l.t (, %s10)466 %5 = icmp eq i32 %0, %1467 %6 = select i1 %5, i8 %2, i8 %3468 ret i8 %6469}470 471; Function Attrs: norecurse nounwind readnone472define zeroext i8 @select_cc_i64_u8(i64 %0, i64 %1, i8 zeroext %2, i8 zeroext %3) {473; CHECK-LABEL: select_cc_i64_u8:474; CHECK: # %bb.0:475; CHECK-NEXT: cmpu.l %s0, %s0, %s1476; CHECK-NEXT: cmov.l.eq %s3, %s2, %s0477; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1478; CHECK-NEXT: b.l.t (, %s10)479 %5 = icmp eq i64 %0, %1480 %6 = select i1 %5, i8 %2, i8 %3481 ret i8 %6482}483 484; Function Attrs: norecurse nounwind readnone485define zeroext i8 @select_cc_u64_u8(i64 %0, i64 %1, i8 zeroext %2, i8 zeroext %3) {486; CHECK-LABEL: select_cc_u64_u8:487; CHECK: # %bb.0:488; CHECK-NEXT: cmpu.l %s0, %s0, %s1489; CHECK-NEXT: cmov.l.eq %s3, %s2, %s0490; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1491; CHECK-NEXT: b.l.t (, %s10)492 %5 = icmp eq i64 %0, %1493 %6 = select i1 %5, i8 %2, i8 %3494 ret i8 %6495}496 497; Function Attrs: norecurse nounwind readnone498define zeroext i8 @select_cc_i128_u8(i128 %0, i128 %1, i8 zeroext %2, i8 zeroext %3) {499; CHECK-LABEL: select_cc_i128_u8:500; CHECK: # %bb.0:501; CHECK-NEXT: xor %s1, %s1, %s3502; CHECK-NEXT: xor %s0, %s0, %s2503; CHECK-NEXT: or %s0, %s0, %s1504; CHECK-NEXT: cmov.l.eq %s5, %s4, %s0505; CHECK-NEXT: adds.w.zx %s0, %s5, (0)1506; CHECK-NEXT: b.l.t (, %s10)507 %5 = icmp eq i128 %0, %1508 %6 = select i1 %5, i8 %2, i8 %3509 ret i8 %6510}511 512; Function Attrs: norecurse nounwind readnone513define zeroext i8 @select_cc_u128_u8(i128 %0, i128 %1, i8 zeroext %2, i8 zeroext %3) {514; CHECK-LABEL: select_cc_u128_u8:515; CHECK: # %bb.0:516; CHECK-NEXT: xor %s1, %s1, %s3517; CHECK-NEXT: xor %s0, %s0, %s2518; CHECK-NEXT: or %s0, %s0, %s1519; CHECK-NEXT: cmov.l.eq %s5, %s4, %s0520; CHECK-NEXT: adds.w.zx %s0, %s5, (0)1521; CHECK-NEXT: b.l.t (, %s10)522 %5 = icmp eq i128 %0, %1523 %6 = select i1 %5, i8 %2, i8 %3524 ret i8 %6525}526 527; Function Attrs: norecurse nounwind readnone528define zeroext i8 @select_cc_float_u8(float %0, float %1, i8 zeroext %2, i8 zeroext %3) {529; CHECK-LABEL: select_cc_float_u8:530; CHECK: # %bb.0:531; CHECK-NEXT: fcmp.s %s0, %s0, %s1532; CHECK-NEXT: cmov.s.eq %s3, %s2, %s0533; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1534; CHECK-NEXT: b.l.t (, %s10)535 %5 = fcmp fast oeq float %0, %1536 %6 = select i1 %5, i8 %2, i8 %3537 ret i8 %6538}539 540; Function Attrs: norecurse nounwind readnone541define zeroext i8 @select_cc_double_u8(double %0, double %1, i8 zeroext %2, i8 zeroext %3) {542; CHECK-LABEL: select_cc_double_u8:543; CHECK: # %bb.0:544; CHECK-NEXT: fcmp.d %s0, %s0, %s1545; CHECK-NEXT: cmov.d.eq %s3, %s2, %s0546; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1547; CHECK-NEXT: b.l.t (, %s10)548 %5 = fcmp fast oeq double %0, %1549 %6 = select i1 %5, i8 %2, i8 %3550 ret i8 %6551}552 553; Function Attrs: norecurse nounwind readnone554define zeroext i8 @select_cc_quad_u8(fp128 %0, fp128 %1, i8 zeroext %2, i8 zeroext %3) {555; CHECK-LABEL: select_cc_quad_u8:556; CHECK: # %bb.0:557; CHECK-NEXT: fcmp.q %s0, %s0, %s2558; CHECK-NEXT: cmov.d.eq %s5, %s4, %s0559; CHECK-NEXT: adds.w.zx %s0, %s5, (0)1560; CHECK-NEXT: b.l.t (, %s10)561 %5 = fcmp fast oeq fp128 %0, %1562 %6 = select i1 %5, i8 %2, i8 %3563 ret i8 %6564}565 566; Function Attrs: norecurse nounwind readnone567define signext i16 @select_cc_i1_i16(i1 zeroext %0, i1 zeroext %1, i16 signext %2, i16 signext %3) {568; CHECK-LABEL: select_cc_i1_i16:569; CHECK: # %bb.0:570; CHECK-NEXT: xor %s0, %s0, %s1571; CHECK-NEXT: cmov.w.ne %s2, %s3, %s0572; CHECK-NEXT: adds.w.sx %s0, %s2, (0)1573; CHECK-NEXT: b.l.t (, %s10)574 %5 = xor i1 %0, %1575 %6 = select i1 %5, i16 %3, i16 %2576 ret i16 %6577}578 579; Function Attrs: norecurse nounwind readnone580define signext i16 @select_cc_i8_i16(i8 signext %0, i8 signext %1, i16 signext %2, i16 signext %3) {581; CHECK-LABEL: select_cc_i8_i16:582; CHECK: # %bb.0:583; CHECK-NEXT: cmpu.w %s0, %s0, %s1584; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0585; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1586; CHECK-NEXT: b.l.t (, %s10)587 %5 = icmp eq i8 %0, %1588 %6 = select i1 %5, i16 %2, i16 %3589 ret i16 %6590}591 592; Function Attrs: norecurse nounwind readnone593define signext i16 @select_cc_u8_i16(i8 zeroext %0, i8 zeroext %1, i16 signext %2, i16 signext %3) {594; CHECK-LABEL: select_cc_u8_i16:595; CHECK: # %bb.0:596; CHECK-NEXT: cmpu.w %s0, %s0, %s1597; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0598; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1599; CHECK-NEXT: b.l.t (, %s10)600 %5 = icmp eq i8 %0, %1601 %6 = select i1 %5, i16 %2, i16 %3602 ret i16 %6603}604 605; Function Attrs: norecurse nounwind readnone606define signext i16 @select_cc_i16_i16(i16 signext %0, i16 signext %1, i16 signext %2, i16 signext %3) {607; CHECK-LABEL: select_cc_i16_i16:608; CHECK: # %bb.0:609; CHECK-NEXT: cmpu.w %s0, %s0, %s1610; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0611; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1612; CHECK-NEXT: b.l.t (, %s10)613 %5 = icmp eq i16 %0, %1614 %6 = select i1 %5, i16 %2, i16 %3615 ret i16 %6616}617 618; Function Attrs: norecurse nounwind readnone619define signext i16 @select_cc_u16_i16(i16 zeroext %0, i16 zeroext %1, i16 signext %2, i16 signext %3) {620; CHECK-LABEL: select_cc_u16_i16:621; CHECK: # %bb.0:622; CHECK-NEXT: cmpu.w %s0, %s0, %s1623; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0624; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1625; CHECK-NEXT: b.l.t (, %s10)626 %5 = icmp eq i16 %0, %1627 %6 = select i1 %5, i16 %2, i16 %3628 ret i16 %6629}630 631; Function Attrs: norecurse nounwind readnone632define signext i16 @select_cc_i32_i16(i32 signext %0, i32 signext %1, i16 signext %2, i16 signext %3) {633; CHECK-LABEL: select_cc_i32_i16:634; CHECK: # %bb.0:635; CHECK-NEXT: cmpu.w %s0, %s0, %s1636; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0637; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1638; CHECK-NEXT: b.l.t (, %s10)639 %5 = icmp eq i32 %0, %1640 %6 = select i1 %5, i16 %2, i16 %3641 ret i16 %6642}643 644; Function Attrs: norecurse nounwind readnone645define signext i16 @select_cc_u32_i16(i32 zeroext %0, i32 zeroext %1, i16 signext %2, i16 signext %3) {646; CHECK-LABEL: select_cc_u32_i16:647; CHECK: # %bb.0:648; CHECK-NEXT: cmpu.w %s0, %s0, %s1649; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0650; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1651; CHECK-NEXT: b.l.t (, %s10)652 %5 = icmp eq i32 %0, %1653 %6 = select i1 %5, i16 %2, i16 %3654 ret i16 %6655}656 657; Function Attrs: norecurse nounwind readnone658define signext i16 @select_cc_i64_i16(i64 %0, i64 %1, i16 signext %2, i16 signext %3) {659; CHECK-LABEL: select_cc_i64_i16:660; CHECK: # %bb.0:661; CHECK-NEXT: cmpu.l %s0, %s0, %s1662; CHECK-NEXT: cmov.l.eq %s3, %s2, %s0663; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1664; CHECK-NEXT: b.l.t (, %s10)665 %5 = icmp eq i64 %0, %1666 %6 = select i1 %5, i16 %2, i16 %3667 ret i16 %6668}669 670; Function Attrs: norecurse nounwind readnone671define signext i16 @select_cc_u64_i16(i64 %0, i64 %1, i16 signext %2, i16 signext %3) {672; CHECK-LABEL: select_cc_u64_i16:673; CHECK: # %bb.0:674; CHECK-NEXT: cmpu.l %s0, %s0, %s1675; CHECK-NEXT: cmov.l.eq %s3, %s2, %s0676; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1677; CHECK-NEXT: b.l.t (, %s10)678 %5 = icmp eq i64 %0, %1679 %6 = select i1 %5, i16 %2, i16 %3680 ret i16 %6681}682 683; Function Attrs: norecurse nounwind readnone684define signext i16 @select_cc_i128_i16(i128 %0, i128 %1, i16 signext %2, i16 signext %3) {685; CHECK-LABEL: select_cc_i128_i16:686; CHECK: # %bb.0:687; CHECK-NEXT: xor %s1, %s1, %s3688; CHECK-NEXT: xor %s0, %s0, %s2689; CHECK-NEXT: or %s0, %s0, %s1690; CHECK-NEXT: cmov.l.eq %s5, %s4, %s0691; CHECK-NEXT: adds.w.sx %s0, %s5, (0)1692; CHECK-NEXT: b.l.t (, %s10)693 %5 = icmp eq i128 %0, %1694 %6 = select i1 %5, i16 %2, i16 %3695 ret i16 %6696}697 698; Function Attrs: norecurse nounwind readnone699define signext i16 @select_cc_u128_i16(i128 %0, i128 %1, i16 signext %2, i16 signext %3) {700; CHECK-LABEL: select_cc_u128_i16:701; CHECK: # %bb.0:702; CHECK-NEXT: xor %s1, %s1, %s3703; CHECK-NEXT: xor %s0, %s0, %s2704; CHECK-NEXT: or %s0, %s0, %s1705; CHECK-NEXT: cmov.l.eq %s5, %s4, %s0706; CHECK-NEXT: adds.w.sx %s0, %s5, (0)1707; CHECK-NEXT: b.l.t (, %s10)708 %5 = icmp eq i128 %0, %1709 %6 = select i1 %5, i16 %2, i16 %3710 ret i16 %6711}712 713; Function Attrs: norecurse nounwind readnone714define signext i16 @select_cc_float_i16(float %0, float %1, i16 signext %2, i16 signext %3) {715; CHECK-LABEL: select_cc_float_i16:716; CHECK: # %bb.0:717; CHECK-NEXT: fcmp.s %s0, %s0, %s1718; CHECK-NEXT: cmov.s.eq %s3, %s2, %s0719; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1720; CHECK-NEXT: b.l.t (, %s10)721 %5 = fcmp fast oeq float %0, %1722 %6 = select i1 %5, i16 %2, i16 %3723 ret i16 %6724}725 726; Function Attrs: norecurse nounwind readnone727define signext i16 @select_cc_double_i16(double %0, double %1, i16 signext %2, i16 signext %3) {728; CHECK-LABEL: select_cc_double_i16:729; CHECK: # %bb.0:730; CHECK-NEXT: fcmp.d %s0, %s0, %s1731; CHECK-NEXT: cmov.d.eq %s3, %s2, %s0732; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1733; CHECK-NEXT: b.l.t (, %s10)734 %5 = fcmp fast oeq double %0, %1735 %6 = select i1 %5, i16 %2, i16 %3736 ret i16 %6737}738 739; Function Attrs: norecurse nounwind readnone740define signext i16 @select_cc_quad_i16(fp128 %0, fp128 %1, i16 signext %2, i16 signext %3) {741; CHECK-LABEL: select_cc_quad_i16:742; CHECK: # %bb.0:743; CHECK-NEXT: fcmp.q %s0, %s0, %s2744; CHECK-NEXT: cmov.d.eq %s5, %s4, %s0745; CHECK-NEXT: adds.w.sx %s0, %s5, (0)1746; CHECK-NEXT: b.l.t (, %s10)747 %5 = fcmp fast oeq fp128 %0, %1748 %6 = select i1 %5, i16 %2, i16 %3749 ret i16 %6750}751 752; Function Attrs: norecurse nounwind readnone753define zeroext i16 @select_cc_i1_u16(i1 zeroext %0, i1 zeroext %1, i16 zeroext %2, i16 zeroext %3) {754; CHECK-LABEL: select_cc_i1_u16:755; CHECK: # %bb.0:756; CHECK-NEXT: xor %s0, %s0, %s1757; CHECK-NEXT: cmov.w.ne %s2, %s3, %s0758; CHECK-NEXT: adds.w.zx %s0, %s2, (0)1759; CHECK-NEXT: b.l.t (, %s10)760 %5 = xor i1 %0, %1761 %6 = select i1 %5, i16 %3, i16 %2762 ret i16 %6763}764 765; Function Attrs: norecurse nounwind readnone766define zeroext i16 @select_cc_i8_u16(i8 signext %0, i8 signext %1, i16 zeroext %2, i16 zeroext %3) {767; CHECK-LABEL: select_cc_i8_u16:768; CHECK: # %bb.0:769; CHECK-NEXT: cmpu.w %s0, %s0, %s1770; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0771; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1772; CHECK-NEXT: b.l.t (, %s10)773 %5 = icmp eq i8 %0, %1774 %6 = select i1 %5, i16 %2, i16 %3775 ret i16 %6776}777 778; Function Attrs: norecurse nounwind readnone779define zeroext i16 @select_cc_u8_u16(i8 zeroext %0, i8 zeroext %1, i16 zeroext %2, i16 zeroext %3) {780; CHECK-LABEL: select_cc_u8_u16:781; CHECK: # %bb.0:782; CHECK-NEXT: cmpu.w %s0, %s0, %s1783; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0784; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1785; CHECK-NEXT: b.l.t (, %s10)786 %5 = icmp eq i8 %0, %1787 %6 = select i1 %5, i16 %2, i16 %3788 ret i16 %6789}790 791; Function Attrs: norecurse nounwind readnone792define zeroext i16 @select_cc_i16_u16(i16 signext %0, i16 signext %1, i16 zeroext %2, i16 zeroext %3) {793; CHECK-LABEL: select_cc_i16_u16:794; CHECK: # %bb.0:795; CHECK-NEXT: cmpu.w %s0, %s0, %s1796; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0797; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1798; CHECK-NEXT: b.l.t (, %s10)799 %5 = icmp eq i16 %0, %1800 %6 = select i1 %5, i16 %2, i16 %3801 ret i16 %6802}803 804; Function Attrs: norecurse nounwind readnone805define zeroext i16 @select_cc_u16_u16(i16 zeroext %0, i16 zeroext %1, i16 zeroext %2, i16 zeroext %3) {806; CHECK-LABEL: select_cc_u16_u16:807; CHECK: # %bb.0:808; CHECK-NEXT: cmpu.w %s0, %s0, %s1809; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0810; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1811; CHECK-NEXT: b.l.t (, %s10)812 %5 = icmp eq i16 %0, %1813 %6 = select i1 %5, i16 %2, i16 %3814 ret i16 %6815}816 817; Function Attrs: norecurse nounwind readnone818define zeroext i16 @select_cc_i32_u16(i32 signext %0, i32 signext %1, i16 zeroext %2, i16 zeroext %3) {819; CHECK-LABEL: select_cc_i32_u16:820; CHECK: # %bb.0:821; CHECK-NEXT: cmpu.w %s0, %s0, %s1822; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0823; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1824; CHECK-NEXT: b.l.t (, %s10)825 %5 = icmp eq i32 %0, %1826 %6 = select i1 %5, i16 %2, i16 %3827 ret i16 %6828}829 830; Function Attrs: norecurse nounwind readnone831define zeroext i16 @select_cc_u32_u16(i32 zeroext %0, i32 zeroext %1, i16 zeroext %2, i16 zeroext %3) {832; CHECK-LABEL: select_cc_u32_u16:833; CHECK: # %bb.0:834; CHECK-NEXT: cmpu.w %s0, %s0, %s1835; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0836; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1837; CHECK-NEXT: b.l.t (, %s10)838 %5 = icmp eq i32 %0, %1839 %6 = select i1 %5, i16 %2, i16 %3840 ret i16 %6841}842 843; Function Attrs: norecurse nounwind readnone844define zeroext i16 @select_cc_i64_u16(i64 %0, i64 %1, i16 zeroext %2, i16 zeroext %3) {845; CHECK-LABEL: select_cc_i64_u16:846; CHECK: # %bb.0:847; CHECK-NEXT: cmpu.l %s0, %s0, %s1848; CHECK-NEXT: cmov.l.eq %s3, %s2, %s0849; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1850; CHECK-NEXT: b.l.t (, %s10)851 %5 = icmp eq i64 %0, %1852 %6 = select i1 %5, i16 %2, i16 %3853 ret i16 %6854}855 856; Function Attrs: norecurse nounwind readnone857define zeroext i16 @select_cc_u64_u16(i64 %0, i64 %1, i16 zeroext %2, i16 zeroext %3) {858; CHECK-LABEL: select_cc_u64_u16:859; CHECK: # %bb.0:860; CHECK-NEXT: cmpu.l %s0, %s0, %s1861; CHECK-NEXT: cmov.l.eq %s3, %s2, %s0862; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1863; CHECK-NEXT: b.l.t (, %s10)864 %5 = icmp eq i64 %0, %1865 %6 = select i1 %5, i16 %2, i16 %3866 ret i16 %6867}868 869; Function Attrs: norecurse nounwind readnone870define zeroext i16 @select_cc_i128_u16(i128 %0, i128 %1, i16 zeroext %2, i16 zeroext %3) {871; CHECK-LABEL: select_cc_i128_u16:872; CHECK: # %bb.0:873; CHECK-NEXT: xor %s1, %s1, %s3874; CHECK-NEXT: xor %s0, %s0, %s2875; CHECK-NEXT: or %s0, %s0, %s1876; CHECK-NEXT: cmov.l.eq %s5, %s4, %s0877; CHECK-NEXT: adds.w.zx %s0, %s5, (0)1878; CHECK-NEXT: b.l.t (, %s10)879 %5 = icmp eq i128 %0, %1880 %6 = select i1 %5, i16 %2, i16 %3881 ret i16 %6882}883 884; Function Attrs: norecurse nounwind readnone885define zeroext i16 @select_cc_u128_u16(i128 %0, i128 %1, i16 zeroext %2, i16 zeroext %3) {886; CHECK-LABEL: select_cc_u128_u16:887; CHECK: # %bb.0:888; CHECK-NEXT: xor %s1, %s1, %s3889; CHECK-NEXT: xor %s0, %s0, %s2890; CHECK-NEXT: or %s0, %s0, %s1891; CHECK-NEXT: cmov.l.eq %s5, %s4, %s0892; CHECK-NEXT: adds.w.zx %s0, %s5, (0)1893; CHECK-NEXT: b.l.t (, %s10)894 %5 = icmp eq i128 %0, %1895 %6 = select i1 %5, i16 %2, i16 %3896 ret i16 %6897}898 899; Function Attrs: norecurse nounwind readnone900define zeroext i16 @select_cc_float_u16(float %0, float %1, i16 zeroext %2, i16 zeroext %3) {901; CHECK-LABEL: select_cc_float_u16:902; CHECK: # %bb.0:903; CHECK-NEXT: fcmp.s %s0, %s0, %s1904; CHECK-NEXT: cmov.s.eq %s3, %s2, %s0905; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1906; CHECK-NEXT: b.l.t (, %s10)907 %5 = fcmp fast oeq float %0, %1908 %6 = select i1 %5, i16 %2, i16 %3909 ret i16 %6910}911 912; Function Attrs: norecurse nounwind readnone913define zeroext i16 @select_cc_double_u16(double %0, double %1, i16 zeroext %2, i16 zeroext %3) {914; CHECK-LABEL: select_cc_double_u16:915; CHECK: # %bb.0:916; CHECK-NEXT: fcmp.d %s0, %s0, %s1917; CHECK-NEXT: cmov.d.eq %s3, %s2, %s0918; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1919; CHECK-NEXT: b.l.t (, %s10)920 %5 = fcmp fast oeq double %0, %1921 %6 = select i1 %5, i16 %2, i16 %3922 ret i16 %6923}924 925; Function Attrs: norecurse nounwind readnone926define zeroext i16 @select_cc_quad_u16(fp128 %0, fp128 %1, i16 zeroext %2, i16 zeroext %3) {927; CHECK-LABEL: select_cc_quad_u16:928; CHECK: # %bb.0:929; CHECK-NEXT: fcmp.q %s0, %s0, %s2930; CHECK-NEXT: cmov.d.eq %s5, %s4, %s0931; CHECK-NEXT: adds.w.zx %s0, %s5, (0)1932; CHECK-NEXT: b.l.t (, %s10)933 %5 = fcmp fast oeq fp128 %0, %1934 %6 = select i1 %5, i16 %2, i16 %3935 ret i16 %6936}937 938; Function Attrs: norecurse nounwind readnone939define signext i32 @select_cc_i1_i32(i1 zeroext %0, i1 zeroext %1, i32 signext %2, i32 signext %3) {940; CHECK-LABEL: select_cc_i1_i32:941; CHECK: # %bb.0:942; CHECK-NEXT: xor %s0, %s0, %s1943; CHECK-NEXT: cmov.w.ne %s2, %s3, %s0944; CHECK-NEXT: adds.w.sx %s0, %s2, (0)1945; CHECK-NEXT: b.l.t (, %s10)946 %5 = xor i1 %0, %1947 %6 = select i1 %5, i32 %3, i32 %2948 ret i32 %6949}950 951; Function Attrs: norecurse nounwind readnone952define signext i32 @select_cc_i8_i32(i8 signext %0, i8 signext %1, i32 signext %2, i32 signext %3) {953; CHECK-LABEL: select_cc_i8_i32:954; CHECK: # %bb.0:955; CHECK-NEXT: cmpu.w %s0, %s0, %s1956; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0957; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1958; CHECK-NEXT: b.l.t (, %s10)959 %5 = icmp eq i8 %0, %1960 %6 = select i1 %5, i32 %2, i32 %3961 ret i32 %6962}963 964; Function Attrs: norecurse nounwind readnone965define signext i32 @select_cc_u8_i32(i8 zeroext %0, i8 zeroext %1, i32 signext %2, i32 signext %3) {966; CHECK-LABEL: select_cc_u8_i32:967; CHECK: # %bb.0:968; CHECK-NEXT: cmpu.w %s0, %s0, %s1969; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0970; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1971; CHECK-NEXT: b.l.t (, %s10)972 %5 = icmp eq i8 %0, %1973 %6 = select i1 %5, i32 %2, i32 %3974 ret i32 %6975}976 977; Function Attrs: norecurse nounwind readnone978define signext i32 @select_cc_i16_i32(i16 signext %0, i16 signext %1, i32 signext %2, i32 signext %3) {979; CHECK-LABEL: select_cc_i16_i32:980; CHECK: # %bb.0:981; CHECK-NEXT: cmpu.w %s0, %s0, %s1982; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0983; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1984; CHECK-NEXT: b.l.t (, %s10)985 %5 = icmp eq i16 %0, %1986 %6 = select i1 %5, i32 %2, i32 %3987 ret i32 %6988}989 990; Function Attrs: norecurse nounwind readnone991define signext i32 @select_cc_u16_i32(i16 zeroext %0, i16 zeroext %1, i32 signext %2, i32 signext %3) {992; CHECK-LABEL: select_cc_u16_i32:993; CHECK: # %bb.0:994; CHECK-NEXT: cmpu.w %s0, %s0, %s1995; CHECK-NEXT: cmov.w.eq %s3, %s2, %s0996; CHECK-NEXT: adds.w.sx %s0, %s3, (0)1997; CHECK-NEXT: b.l.t (, %s10)998 %5 = icmp eq i16 %0, %1999 %6 = select i1 %5, i32 %2, i32 %31000 ret i32 %61001}1002 1003; Function Attrs: norecurse nounwind readnone1004define signext i32 @select_cc_i32_i32(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {1005; CHECK-LABEL: select_cc_i32_i32:1006; CHECK: # %bb.0:1007; CHECK-NEXT: cmpu.w %s0, %s0, %s11008; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01009; CHECK-NEXT: adds.w.sx %s0, %s3, (0)11010; CHECK-NEXT: b.l.t (, %s10)1011 %5 = icmp eq i32 %0, %11012 %6 = select i1 %5, i32 %2, i32 %31013 ret i32 %61014}1015 1016; Function Attrs: norecurse nounwind readnone1017define signext i32 @select_cc_u32_i32(i32 zeroext %0, i32 zeroext %1, i32 signext %2, i32 signext %3) {1018; CHECK-LABEL: select_cc_u32_i32:1019; CHECK: # %bb.0:1020; CHECK-NEXT: cmpu.w %s0, %s0, %s11021; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01022; CHECK-NEXT: adds.w.sx %s0, %s3, (0)11023; CHECK-NEXT: b.l.t (, %s10)1024 %5 = icmp eq i32 %0, %11025 %6 = select i1 %5, i32 %2, i32 %31026 ret i32 %61027}1028 1029; Function Attrs: norecurse nounwind readnone1030define signext i32 @select_cc_i64_i32(i64 %0, i64 %1, i32 signext %2, i32 signext %3) {1031; CHECK-LABEL: select_cc_i64_i32:1032; CHECK: # %bb.0:1033; CHECK-NEXT: cmpu.l %s0, %s0, %s11034; CHECK-NEXT: cmov.l.eq %s3, %s2, %s01035; CHECK-NEXT: adds.w.sx %s0, %s3, (0)11036; CHECK-NEXT: b.l.t (, %s10)1037 %5 = icmp eq i64 %0, %11038 %6 = select i1 %5, i32 %2, i32 %31039 ret i32 %61040}1041 1042; Function Attrs: norecurse nounwind readnone1043define signext i32 @select_cc_u64_i32(i64 %0, i64 %1, i32 signext %2, i32 signext %3) {1044; CHECK-LABEL: select_cc_u64_i32:1045; CHECK: # %bb.0:1046; CHECK-NEXT: cmpu.l %s0, %s0, %s11047; CHECK-NEXT: cmov.l.eq %s3, %s2, %s01048; CHECK-NEXT: adds.w.sx %s0, %s3, (0)11049; CHECK-NEXT: b.l.t (, %s10)1050 %5 = icmp eq i64 %0, %11051 %6 = select i1 %5, i32 %2, i32 %31052 ret i32 %61053}1054 1055; Function Attrs: norecurse nounwind readnone1056define signext i32 @select_cc_i128_i32(i128 %0, i128 %1, i32 signext %2, i32 signext %3) {1057; CHECK-LABEL: select_cc_i128_i32:1058; CHECK: # %bb.0:1059; CHECK-NEXT: xor %s1, %s1, %s31060; CHECK-NEXT: xor %s0, %s0, %s21061; CHECK-NEXT: or %s0, %s0, %s11062; CHECK-NEXT: cmov.l.eq %s5, %s4, %s01063; CHECK-NEXT: adds.w.sx %s0, %s5, (0)11064; CHECK-NEXT: b.l.t (, %s10)1065 %5 = icmp eq i128 %0, %11066 %6 = select i1 %5, i32 %2, i32 %31067 ret i32 %61068}1069 1070; Function Attrs: norecurse nounwind readnone1071define signext i32 @select_cc_u128_i32(i128 %0, i128 %1, i32 signext %2, i32 signext %3) {1072; CHECK-LABEL: select_cc_u128_i32:1073; CHECK: # %bb.0:1074; CHECK-NEXT: xor %s1, %s1, %s31075; CHECK-NEXT: xor %s0, %s0, %s21076; CHECK-NEXT: or %s0, %s0, %s11077; CHECK-NEXT: cmov.l.eq %s5, %s4, %s01078; CHECK-NEXT: adds.w.sx %s0, %s5, (0)11079; CHECK-NEXT: b.l.t (, %s10)1080 %5 = icmp eq i128 %0, %11081 %6 = select i1 %5, i32 %2, i32 %31082 ret i32 %61083}1084 1085; Function Attrs: norecurse nounwind readnone1086define signext i32 @select_cc_float_i32(float %0, float %1, i32 signext %2, i32 signext %3) {1087; CHECK-LABEL: select_cc_float_i32:1088; CHECK: # %bb.0:1089; CHECK-NEXT: fcmp.s %s0, %s0, %s11090; CHECK-NEXT: cmov.s.eq %s3, %s2, %s01091; CHECK-NEXT: adds.w.sx %s0, %s3, (0)11092; CHECK-NEXT: b.l.t (, %s10)1093 %5 = fcmp fast oeq float %0, %11094 %6 = select i1 %5, i32 %2, i32 %31095 ret i32 %61096}1097 1098; Function Attrs: norecurse nounwind readnone1099define signext i32 @select_cc_double_i32(double %0, double %1, i32 signext %2, i32 signext %3) {1100; CHECK-LABEL: select_cc_double_i32:1101; CHECK: # %bb.0:1102; CHECK-NEXT: fcmp.d %s0, %s0, %s11103; CHECK-NEXT: cmov.d.eq %s3, %s2, %s01104; CHECK-NEXT: adds.w.sx %s0, %s3, (0)11105; CHECK-NEXT: b.l.t (, %s10)1106 %5 = fcmp fast oeq double %0, %11107 %6 = select i1 %5, i32 %2, i32 %31108 ret i32 %61109}1110 1111; Function Attrs: norecurse nounwind readnone1112define signext i32 @select_cc_quad_i32(fp128 %0, fp128 %1, i32 signext %2, i32 signext %3) {1113; CHECK-LABEL: select_cc_quad_i32:1114; CHECK: # %bb.0:1115; CHECK-NEXT: fcmp.q %s0, %s0, %s21116; CHECK-NEXT: cmov.d.eq %s5, %s4, %s01117; CHECK-NEXT: adds.w.sx %s0, %s5, (0)11118; CHECK-NEXT: b.l.t (, %s10)1119 %5 = fcmp fast oeq fp128 %0, %11120 %6 = select i1 %5, i32 %2, i32 %31121 ret i32 %61122}1123 1124; Function Attrs: norecurse nounwind readnone1125define zeroext i32 @select_cc_i1_u32(i1 zeroext %0, i1 zeroext %1, i32 zeroext %2, i32 zeroext %3) {1126; CHECK-LABEL: select_cc_i1_u32:1127; CHECK: # %bb.0:1128; CHECK-NEXT: xor %s0, %s0, %s11129; CHECK-NEXT: cmov.w.ne %s2, %s3, %s01130; CHECK-NEXT: adds.w.zx %s0, %s2, (0)11131; CHECK-NEXT: b.l.t (, %s10)1132 %5 = xor i1 %0, %11133 %6 = select i1 %5, i32 %3, i32 %21134 ret i32 %61135}1136 1137; Function Attrs: norecurse nounwind readnone1138define zeroext i32 @select_cc_i8_u32(i8 signext %0, i8 signext %1, i32 zeroext %2, i32 zeroext %3) {1139; CHECK-LABEL: select_cc_i8_u32:1140; CHECK: # %bb.0:1141; CHECK-NEXT: cmpu.w %s0, %s0, %s11142; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01143; CHECK-NEXT: adds.w.zx %s0, %s3, (0)11144; CHECK-NEXT: b.l.t (, %s10)1145 %5 = icmp eq i8 %0, %11146 %6 = select i1 %5, i32 %2, i32 %31147 ret i32 %61148}1149 1150; Function Attrs: norecurse nounwind readnone1151define zeroext i32 @select_cc_u8_u32(i8 zeroext %0, i8 zeroext %1, i32 zeroext %2, i32 zeroext %3) {1152; CHECK-LABEL: select_cc_u8_u32:1153; CHECK: # %bb.0:1154; CHECK-NEXT: cmpu.w %s0, %s0, %s11155; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01156; CHECK-NEXT: adds.w.zx %s0, %s3, (0)11157; CHECK-NEXT: b.l.t (, %s10)1158 %5 = icmp eq i8 %0, %11159 %6 = select i1 %5, i32 %2, i32 %31160 ret i32 %61161}1162 1163; Function Attrs: norecurse nounwind readnone1164define zeroext i32 @select_cc_i16_u32(i16 signext %0, i16 signext %1, i32 zeroext %2, i32 zeroext %3) {1165; CHECK-LABEL: select_cc_i16_u32:1166; CHECK: # %bb.0:1167; CHECK-NEXT: cmpu.w %s0, %s0, %s11168; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01169; CHECK-NEXT: adds.w.zx %s0, %s3, (0)11170; CHECK-NEXT: b.l.t (, %s10)1171 %5 = icmp eq i16 %0, %11172 %6 = select i1 %5, i32 %2, i32 %31173 ret i32 %61174}1175 1176; Function Attrs: norecurse nounwind readnone1177define zeroext i32 @select_cc_u16_u32(i16 zeroext %0, i16 zeroext %1, i32 zeroext %2, i32 zeroext %3) {1178; CHECK-LABEL: select_cc_u16_u32:1179; CHECK: # %bb.0:1180; CHECK-NEXT: cmpu.w %s0, %s0, %s11181; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01182; CHECK-NEXT: adds.w.zx %s0, %s3, (0)11183; CHECK-NEXT: b.l.t (, %s10)1184 %5 = icmp eq i16 %0, %11185 %6 = select i1 %5, i32 %2, i32 %31186 ret i32 %61187}1188 1189; Function Attrs: norecurse nounwind readnone1190define zeroext i32 @select_cc_i32_u32(i32 signext %0, i32 signext %1, i32 zeroext %2, i32 zeroext %3) {1191; CHECK-LABEL: select_cc_i32_u32:1192; CHECK: # %bb.0:1193; CHECK-NEXT: cmpu.w %s0, %s0, %s11194; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01195; CHECK-NEXT: adds.w.zx %s0, %s3, (0)11196; CHECK-NEXT: b.l.t (, %s10)1197 %5 = icmp eq i32 %0, %11198 %6 = select i1 %5, i32 %2, i32 %31199 ret i32 %61200}1201 1202; Function Attrs: norecurse nounwind readnone1203define zeroext i32 @select_cc_u32_u32(i32 zeroext %0, i32 zeroext %1, i32 zeroext %2, i32 zeroext %3) {1204; CHECK-LABEL: select_cc_u32_u32:1205; CHECK: # %bb.0:1206; CHECK-NEXT: cmpu.w %s0, %s0, %s11207; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01208; CHECK-NEXT: adds.w.zx %s0, %s3, (0)11209; CHECK-NEXT: b.l.t (, %s10)1210 %5 = icmp eq i32 %0, %11211 %6 = select i1 %5, i32 %2, i32 %31212 ret i32 %61213}1214 1215; Function Attrs: norecurse nounwind readnone1216define zeroext i32 @select_cc_i64_u32(i64 %0, i64 %1, i32 zeroext %2, i32 zeroext %3) {1217; CHECK-LABEL: select_cc_i64_u32:1218; CHECK: # %bb.0:1219; CHECK-NEXT: cmpu.l %s0, %s0, %s11220; CHECK-NEXT: cmov.l.eq %s3, %s2, %s01221; CHECK-NEXT: adds.w.zx %s0, %s3, (0)11222; CHECK-NEXT: b.l.t (, %s10)1223 %5 = icmp eq i64 %0, %11224 %6 = select i1 %5, i32 %2, i32 %31225 ret i32 %61226}1227 1228; Function Attrs: norecurse nounwind readnone1229define zeroext i32 @select_cc_u64_u32(i64 %0, i64 %1, i32 zeroext %2, i32 zeroext %3) {1230; CHECK-LABEL: select_cc_u64_u32:1231; CHECK: # %bb.0:1232; CHECK-NEXT: cmpu.l %s0, %s0, %s11233; CHECK-NEXT: cmov.l.eq %s3, %s2, %s01234; CHECK-NEXT: adds.w.zx %s0, %s3, (0)11235; CHECK-NEXT: b.l.t (, %s10)1236 %5 = icmp eq i64 %0, %11237 %6 = select i1 %5, i32 %2, i32 %31238 ret i32 %61239}1240 1241; Function Attrs: norecurse nounwind readnone1242define zeroext i32 @select_cc_i128_u32(i128 %0, i128 %1, i32 zeroext %2, i32 zeroext %3) {1243; CHECK-LABEL: select_cc_i128_u32:1244; CHECK: # %bb.0:1245; CHECK-NEXT: xor %s1, %s1, %s31246; CHECK-NEXT: xor %s0, %s0, %s21247; CHECK-NEXT: or %s0, %s0, %s11248; CHECK-NEXT: cmov.l.eq %s5, %s4, %s01249; CHECK-NEXT: adds.w.zx %s0, %s5, (0)11250; CHECK-NEXT: b.l.t (, %s10)1251 %5 = icmp eq i128 %0, %11252 %6 = select i1 %5, i32 %2, i32 %31253 ret i32 %61254}1255 1256; Function Attrs: norecurse nounwind readnone1257define zeroext i32 @select_cc_u128_u32(i128 %0, i128 %1, i32 zeroext %2, i32 zeroext %3) {1258; CHECK-LABEL: select_cc_u128_u32:1259; CHECK: # %bb.0:1260; CHECK-NEXT: xor %s1, %s1, %s31261; CHECK-NEXT: xor %s0, %s0, %s21262; CHECK-NEXT: or %s0, %s0, %s11263; CHECK-NEXT: cmov.l.eq %s5, %s4, %s01264; CHECK-NEXT: adds.w.zx %s0, %s5, (0)11265; CHECK-NEXT: b.l.t (, %s10)1266 %5 = icmp eq i128 %0, %11267 %6 = select i1 %5, i32 %2, i32 %31268 ret i32 %61269}1270 1271; Function Attrs: norecurse nounwind readnone1272define zeroext i32 @select_cc_float_u32(float %0, float %1, i32 zeroext %2, i32 zeroext %3) {1273; CHECK-LABEL: select_cc_float_u32:1274; CHECK: # %bb.0:1275; CHECK-NEXT: fcmp.s %s0, %s0, %s11276; CHECK-NEXT: cmov.s.eq %s3, %s2, %s01277; CHECK-NEXT: adds.w.zx %s0, %s3, (0)11278; CHECK-NEXT: b.l.t (, %s10)1279 %5 = fcmp fast oeq float %0, %11280 %6 = select i1 %5, i32 %2, i32 %31281 ret i32 %61282}1283 1284; Function Attrs: norecurse nounwind readnone1285define zeroext i32 @select_cc_double_u32(double %0, double %1, i32 zeroext %2, i32 zeroext %3) {1286; CHECK-LABEL: select_cc_double_u32:1287; CHECK: # %bb.0:1288; CHECK-NEXT: fcmp.d %s0, %s0, %s11289; CHECK-NEXT: cmov.d.eq %s3, %s2, %s01290; CHECK-NEXT: adds.w.zx %s0, %s3, (0)11291; CHECK-NEXT: b.l.t (, %s10)1292 %5 = fcmp fast oeq double %0, %11293 %6 = select i1 %5, i32 %2, i32 %31294 ret i32 %61295}1296 1297; Function Attrs: norecurse nounwind readnone1298define zeroext i32 @select_cc_quad_u32(fp128 %0, fp128 %1, i32 zeroext %2, i32 zeroext %3) {1299; CHECK-LABEL: select_cc_quad_u32:1300; CHECK: # %bb.0:1301; CHECK-NEXT: fcmp.q %s0, %s0, %s21302; CHECK-NEXT: cmov.d.eq %s5, %s4, %s01303; CHECK-NEXT: adds.w.zx %s0, %s5, (0)11304; CHECK-NEXT: b.l.t (, %s10)1305 %5 = fcmp fast oeq fp128 %0, %11306 %6 = select i1 %5, i32 %2, i32 %31307 ret i32 %61308}1309 1310; Function Attrs: norecurse nounwind readnone1311define i64 @select_cc_i1_i64(i1 zeroext %0, i1 zeroext %1, i64 %2, i64 %3) {1312; CHECK-LABEL: select_cc_i1_i64:1313; CHECK: # %bb.0:1314; CHECK-NEXT: xor %s0, %s0, %s11315; CHECK-NEXT: cmov.w.ne %s2, %s3, %s01316; CHECK-NEXT: or %s0, 0, %s21317; CHECK-NEXT: b.l.t (, %s10)1318 %5 = xor i1 %0, %11319 %6 = select i1 %5, i64 %3, i64 %21320 ret i64 %61321}1322 1323; Function Attrs: norecurse nounwind readnone1324define i64 @select_cc_i8_i64(i8 signext %0, i8 signext %1, i64 %2, i64 %3) {1325; CHECK-LABEL: select_cc_i8_i64:1326; CHECK: # %bb.0:1327; CHECK-NEXT: cmpu.w %s0, %s0, %s11328; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01329; CHECK-NEXT: or %s0, 0, %s31330; CHECK-NEXT: b.l.t (, %s10)1331 %5 = icmp eq i8 %0, %11332 %6 = select i1 %5, i64 %2, i64 %31333 ret i64 %61334}1335 1336; Function Attrs: norecurse nounwind readnone1337define i64 @select_cc_u8_i64(i8 zeroext %0, i8 zeroext %1, i64 %2, i64 %3) {1338; CHECK-LABEL: select_cc_u8_i64:1339; CHECK: # %bb.0:1340; CHECK-NEXT: cmpu.w %s0, %s0, %s11341; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01342; CHECK-NEXT: or %s0, 0, %s31343; CHECK-NEXT: b.l.t (, %s10)1344 %5 = icmp eq i8 %0, %11345 %6 = select i1 %5, i64 %2, i64 %31346 ret i64 %61347}1348 1349; Function Attrs: norecurse nounwind readnone1350define i64 @select_cc_i16_i64(i16 signext %0, i16 signext %1, i64 %2, i64 %3) {1351; CHECK-LABEL: select_cc_i16_i64:1352; CHECK: # %bb.0:1353; CHECK-NEXT: cmpu.w %s0, %s0, %s11354; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01355; CHECK-NEXT: or %s0, 0, %s31356; CHECK-NEXT: b.l.t (, %s10)1357 %5 = icmp eq i16 %0, %11358 %6 = select i1 %5, i64 %2, i64 %31359 ret i64 %61360}1361 1362; Function Attrs: norecurse nounwind readnone1363define i64 @select_cc_u16_i64(i16 zeroext %0, i16 zeroext %1, i64 %2, i64 %3) {1364; CHECK-LABEL: select_cc_u16_i64:1365; CHECK: # %bb.0:1366; CHECK-NEXT: cmpu.w %s0, %s0, %s11367; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01368; CHECK-NEXT: or %s0, 0, %s31369; CHECK-NEXT: b.l.t (, %s10)1370 %5 = icmp eq i16 %0, %11371 %6 = select i1 %5, i64 %2, i64 %31372 ret i64 %61373}1374 1375; Function Attrs: norecurse nounwind readnone1376define i64 @select_cc_i32_i64(i32 signext %0, i32 signext %1, i64 %2, i64 %3) {1377; CHECK-LABEL: select_cc_i32_i64:1378; CHECK: # %bb.0:1379; CHECK-NEXT: cmpu.w %s0, %s0, %s11380; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01381; CHECK-NEXT: or %s0, 0, %s31382; CHECK-NEXT: b.l.t (, %s10)1383 %5 = icmp eq i32 %0, %11384 %6 = select i1 %5, i64 %2, i64 %31385 ret i64 %61386}1387 1388; Function Attrs: norecurse nounwind readnone1389define i64 @select_cc_u32_i64(i32 zeroext %0, i32 zeroext %1, i64 %2, i64 %3) {1390; CHECK-LABEL: select_cc_u32_i64:1391; CHECK: # %bb.0:1392; CHECK-NEXT: cmpu.w %s0, %s0, %s11393; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01394; CHECK-NEXT: or %s0, 0, %s31395; CHECK-NEXT: b.l.t (, %s10)1396 %5 = icmp eq i32 %0, %11397 %6 = select i1 %5, i64 %2, i64 %31398 ret i64 %61399}1400 1401; Function Attrs: norecurse nounwind readnone1402define i64 @select_cc_i64_i64(i64 %0, i64 %1, i64 %2, i64 %3) {1403; CHECK-LABEL: select_cc_i64_i64:1404; CHECK: # %bb.0:1405; CHECK-NEXT: cmpu.l %s0, %s0, %s11406; CHECK-NEXT: cmov.l.eq %s3, %s2, %s01407; CHECK-NEXT: or %s0, 0, %s31408; CHECK-NEXT: b.l.t (, %s10)1409 %5 = icmp eq i64 %0, %11410 %6 = select i1 %5, i64 %2, i64 %31411 ret i64 %61412}1413 1414; Function Attrs: norecurse nounwind readnone1415define i64 @select_cc_u64_i64(i64 %0, i64 %1, i64 %2, i64 %3) {1416; CHECK-LABEL: select_cc_u64_i64:1417; CHECK: # %bb.0:1418; CHECK-NEXT: cmpu.l %s0, %s0, %s11419; CHECK-NEXT: cmov.l.eq %s3, %s2, %s01420; CHECK-NEXT: or %s0, 0, %s31421; CHECK-NEXT: b.l.t (, %s10)1422 %5 = icmp eq i64 %0, %11423 %6 = select i1 %5, i64 %2, i64 %31424 ret i64 %61425}1426 1427; Function Attrs: norecurse nounwind readnone1428define i64 @select_cc_i128_i64(i128 %0, i128 %1, i64 %2, i64 %3) {1429; CHECK-LABEL: select_cc_i128_i64:1430; CHECK: # %bb.0:1431; CHECK-NEXT: xor %s1, %s1, %s31432; CHECK-NEXT: xor %s0, %s0, %s21433; CHECK-NEXT: or %s0, %s0, %s11434; CHECK-NEXT: cmov.l.eq %s5, %s4, %s01435; CHECK-NEXT: or %s0, 0, %s51436; CHECK-NEXT: b.l.t (, %s10)1437 %5 = icmp eq i128 %0, %11438 %6 = select i1 %5, i64 %2, i64 %31439 ret i64 %61440}1441 1442; Function Attrs: norecurse nounwind readnone1443define i64 @select_cc_u128_i64(i128 %0, i128 %1, i64 %2, i64 %3) {1444; CHECK-LABEL: select_cc_u128_i64:1445; CHECK: # %bb.0:1446; CHECK-NEXT: xor %s1, %s1, %s31447; CHECK-NEXT: xor %s0, %s0, %s21448; CHECK-NEXT: or %s0, %s0, %s11449; CHECK-NEXT: cmov.l.eq %s5, %s4, %s01450; CHECK-NEXT: or %s0, 0, %s51451; CHECK-NEXT: b.l.t (, %s10)1452 %5 = icmp eq i128 %0, %11453 %6 = select i1 %5, i64 %2, i64 %31454 ret i64 %61455}1456 1457; Function Attrs: norecurse nounwind readnone1458define i64 @select_cc_float_i64(float %0, float %1, i64 %2, i64 %3) {1459; CHECK-LABEL: select_cc_float_i64:1460; CHECK: # %bb.0:1461; CHECK-NEXT: fcmp.s %s0, %s0, %s11462; CHECK-NEXT: cmov.s.eq %s3, %s2, %s01463; CHECK-NEXT: or %s0, 0, %s31464; CHECK-NEXT: b.l.t (, %s10)1465 %5 = fcmp fast oeq float %0, %11466 %6 = select i1 %5, i64 %2, i64 %31467 ret i64 %61468}1469 1470; Function Attrs: norecurse nounwind readnone1471define i64 @select_cc_double_i64(double %0, double %1, i64 %2, i64 %3) {1472; CHECK-LABEL: select_cc_double_i64:1473; CHECK: # %bb.0:1474; CHECK-NEXT: fcmp.d %s0, %s0, %s11475; CHECK-NEXT: cmov.d.eq %s3, %s2, %s01476; CHECK-NEXT: or %s0, 0, %s31477; CHECK-NEXT: b.l.t (, %s10)1478 %5 = fcmp fast oeq double %0, %11479 %6 = select i1 %5, i64 %2, i64 %31480 ret i64 %61481}1482 1483; Function Attrs: norecurse nounwind readnone1484define i64 @select_cc_quad_i64(fp128 %0, fp128 %1, i64 %2, i64 %3) {1485; CHECK-LABEL: select_cc_quad_i64:1486; CHECK: # %bb.0:1487; CHECK-NEXT: fcmp.q %s0, %s0, %s21488; CHECK-NEXT: cmov.d.eq %s5, %s4, %s01489; CHECK-NEXT: or %s0, 0, %s51490; CHECK-NEXT: b.l.t (, %s10)1491 %5 = fcmp fast oeq fp128 %0, %11492 %6 = select i1 %5, i64 %2, i64 %31493 ret i64 %61494}1495 1496; Function Attrs: norecurse nounwind readnone1497define i64 @select_cc_i1_u64(i1 zeroext %0, i1 zeroext %1, i64 %2, i64 %3) {1498; CHECK-LABEL: select_cc_i1_u64:1499; CHECK: # %bb.0:1500; CHECK-NEXT: xor %s0, %s0, %s11501; CHECK-NEXT: cmov.w.ne %s2, %s3, %s01502; CHECK-NEXT: or %s0, 0, %s21503; CHECK-NEXT: b.l.t (, %s10)1504 %5 = xor i1 %0, %11505 %6 = select i1 %5, i64 %3, i64 %21506 ret i64 %61507}1508 1509; Function Attrs: norecurse nounwind readnone1510define i64 @select_cc_i8_u64(i8 signext %0, i8 signext %1, i64 %2, i64 %3) {1511; CHECK-LABEL: select_cc_i8_u64:1512; CHECK: # %bb.0:1513; CHECK-NEXT: cmpu.w %s0, %s0, %s11514; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01515; CHECK-NEXT: or %s0, 0, %s31516; CHECK-NEXT: b.l.t (, %s10)1517 %5 = icmp eq i8 %0, %11518 %6 = select i1 %5, i64 %2, i64 %31519 ret i64 %61520}1521 1522; Function Attrs: norecurse nounwind readnone1523define i64 @select_cc_u8_u64(i8 zeroext %0, i8 zeroext %1, i64 %2, i64 %3) {1524; CHECK-LABEL: select_cc_u8_u64:1525; CHECK: # %bb.0:1526; CHECK-NEXT: cmpu.w %s0, %s0, %s11527; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01528; CHECK-NEXT: or %s0, 0, %s31529; CHECK-NEXT: b.l.t (, %s10)1530 %5 = icmp eq i8 %0, %11531 %6 = select i1 %5, i64 %2, i64 %31532 ret i64 %61533}1534 1535; Function Attrs: norecurse nounwind readnone1536define i64 @select_cc_i16_u64(i16 signext %0, i16 signext %1, i64 %2, i64 %3) {1537; CHECK-LABEL: select_cc_i16_u64:1538; CHECK: # %bb.0:1539; CHECK-NEXT: cmpu.w %s0, %s0, %s11540; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01541; CHECK-NEXT: or %s0, 0, %s31542; CHECK-NEXT: b.l.t (, %s10)1543 %5 = icmp eq i16 %0, %11544 %6 = select i1 %5, i64 %2, i64 %31545 ret i64 %61546}1547 1548; Function Attrs: norecurse nounwind readnone1549define i64 @select_cc_u16_u64(i16 zeroext %0, i16 zeroext %1, i64 %2, i64 %3) {1550; CHECK-LABEL: select_cc_u16_u64:1551; CHECK: # %bb.0:1552; CHECK-NEXT: cmpu.w %s0, %s0, %s11553; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01554; CHECK-NEXT: or %s0, 0, %s31555; CHECK-NEXT: b.l.t (, %s10)1556 %5 = icmp eq i16 %0, %11557 %6 = select i1 %5, i64 %2, i64 %31558 ret i64 %61559}1560 1561; Function Attrs: norecurse nounwind readnone1562define i64 @select_cc_i32_u64(i32 signext %0, i32 signext %1, i64 %2, i64 %3) {1563; CHECK-LABEL: select_cc_i32_u64:1564; CHECK: # %bb.0:1565; CHECK-NEXT: cmpu.w %s0, %s0, %s11566; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01567; CHECK-NEXT: or %s0, 0, %s31568; CHECK-NEXT: b.l.t (, %s10)1569 %5 = icmp eq i32 %0, %11570 %6 = select i1 %5, i64 %2, i64 %31571 ret i64 %61572}1573 1574; Function Attrs: norecurse nounwind readnone1575define i64 @select_cc_u32_u64(i32 zeroext %0, i32 zeroext %1, i64 %2, i64 %3) {1576; CHECK-LABEL: select_cc_u32_u64:1577; CHECK: # %bb.0:1578; CHECK-NEXT: cmpu.w %s0, %s0, %s11579; CHECK-NEXT: cmov.w.eq %s3, %s2, %s01580; CHECK-NEXT: or %s0, 0, %s31581; CHECK-NEXT: b.l.t (, %s10)1582 %5 = icmp eq i32 %0, %11583 %6 = select i1 %5, i64 %2, i64 %31584 ret i64 %61585}1586 1587; Function Attrs: norecurse nounwind readnone1588define i64 @select_cc_i64_u64(i64 %0, i64 %1, i64 %2, i64 %3) {1589; CHECK-LABEL: select_cc_i64_u64:1590; CHECK: # %bb.0:1591; CHECK-NEXT: cmpu.l %s0, %s0, %s11592; CHECK-NEXT: cmov.l.eq %s3, %s2, %s01593; CHECK-NEXT: or %s0, 0, %s31594; CHECK-NEXT: b.l.t (, %s10)1595 %5 = icmp eq i64 %0, %11596 %6 = select i1 %5, i64 %2, i64 %31597 ret i64 %61598}1599 1600; Function Attrs: norecurse nounwind readnone1601define i64 @select_cc_u64_u64(i64 %0, i64 %1, i64 %2, i64 %3) {1602; CHECK-LABEL: select_cc_u64_u64:1603; CHECK: # %bb.0:1604; CHECK-NEXT: cmpu.l %s0, %s0, %s11605; CHECK-NEXT: cmov.l.eq %s3, %s2, %s01606; CHECK-NEXT: or %s0, 0, %s31607; CHECK-NEXT: b.l.t (, %s10)1608 %5 = icmp eq i64 %0, %11609 %6 = select i1 %5, i64 %2, i64 %31610 ret i64 %61611}1612 1613; Function Attrs: norecurse nounwind readnone1614define i64 @select_cc_i128_u64(i128 %0, i128 %1, i64 %2, i64 %3) {1615; CHECK-LABEL: select_cc_i128_u64:1616; CHECK: # %bb.0:1617; CHECK-NEXT: xor %s1, %s1, %s31618; CHECK-NEXT: xor %s0, %s0, %s21619; CHECK-NEXT: or %s0, %s0, %s11620; CHECK-NEXT: cmov.l.eq %s5, %s4, %s01621; CHECK-NEXT: or %s0, 0, %s51622; CHECK-NEXT: b.l.t (, %s10)1623 %5 = icmp eq i128 %0, %11624 %6 = select i1 %5, i64 %2, i64 %31625 ret i64 %61626}1627 1628; Function Attrs: norecurse nounwind readnone1629define i64 @select_cc_u128_u64(i128 %0, i128 %1, i64 %2, i64 %3) {1630; CHECK-LABEL: select_cc_u128_u64:1631; CHECK: # %bb.0:1632; CHECK-NEXT: xor %s1, %s1, %s31633; CHECK-NEXT: xor %s0, %s0, %s21634; CHECK-NEXT: or %s0, %s0, %s11635; CHECK-NEXT: cmov.l.eq %s5, %s4, %s01636; CHECK-NEXT: or %s0, 0, %s51637; CHECK-NEXT: b.l.t (, %s10)1638 %5 = icmp eq i128 %0, %11639 %6 = select i1 %5, i64 %2, i64 %31640 ret i64 %61641}1642 1643; Function Attrs: norecurse nounwind readnone1644define i64 @select_cc_float_u64(float %0, float %1, i64 %2, i64 %3) {1645; CHECK-LABEL: select_cc_float_u64:1646; CHECK: # %bb.0:1647; CHECK-NEXT: fcmp.s %s0, %s0, %s11648; CHECK-NEXT: cmov.s.eq %s3, %s2, %s01649; CHECK-NEXT: or %s0, 0, %s31650; CHECK-NEXT: b.l.t (, %s10)1651 %5 = fcmp fast oeq float %0, %11652 %6 = select i1 %5, i64 %2, i64 %31653 ret i64 %61654}1655 1656; Function Attrs: norecurse nounwind readnone1657define i64 @select_cc_double_u64(double %0, double %1, i64 %2, i64 %3) {1658; CHECK-LABEL: select_cc_double_u64:1659; CHECK: # %bb.0:1660; CHECK-NEXT: fcmp.d %s0, %s0, %s11661; CHECK-NEXT: cmov.d.eq %s3, %s2, %s01662; CHECK-NEXT: or %s0, 0, %s31663; CHECK-NEXT: b.l.t (, %s10)1664 %5 = fcmp fast oeq double %0, %11665 %6 = select i1 %5, i64 %2, i64 %31666 ret i64 %61667}1668 1669; Function Attrs: norecurse nounwind readnone1670define i64 @select_cc_quad_u64(fp128 %0, fp128 %1, i64 %2, i64 %3) {1671; CHECK-LABEL: select_cc_quad_u64:1672; CHECK: # %bb.0:1673; CHECK-NEXT: fcmp.q %s0, %s0, %s21674; CHECK-NEXT: cmov.d.eq %s5, %s4, %s01675; CHECK-NEXT: or %s0, 0, %s51676; CHECK-NEXT: b.l.t (, %s10)1677 %5 = fcmp fast oeq fp128 %0, %11678 %6 = select i1 %5, i64 %2, i64 %31679 ret i64 %61680}1681 1682; Function Attrs: norecurse nounwind readnone1683define i128 @select_cc_i1_i128(i1 zeroext %0, i1 zeroext %1, i128 %2, i128 %3) {1684; CHECK-LABEL: select_cc_i1_i128:1685; CHECK: # %bb.0:1686; CHECK-NEXT: xor %s0, %s0, %s11687; CHECK-NEXT: cmov.w.ne %s2, %s4, %s01688; CHECK-NEXT: cmov.w.ne %s3, %s5, %s01689; CHECK-NEXT: or %s0, 0, %s21690; CHECK-NEXT: or %s1, 0, %s31691; CHECK-NEXT: b.l.t (, %s10)1692 %5 = xor i1 %0, %11693 %6 = select i1 %5, i128 %3, i128 %21694 ret i128 %61695}1696 1697; Function Attrs: norecurse nounwind readnone1698define i128 @select_cc_i8_i128(i8 signext %0, i8 signext %1, i128 %2, i128 %3) {1699; CHECK-LABEL: select_cc_i8_i128:1700; CHECK: # %bb.0:1701; CHECK-NEXT: cmpu.w %s0, %s0, %s11702; CHECK-NEXT: cmov.w.eq %s4, %s2, %s01703; CHECK-NEXT: cmov.w.eq %s5, %s3, %s01704; CHECK-NEXT: or %s0, 0, %s41705; CHECK-NEXT: or %s1, 0, %s51706; CHECK-NEXT: b.l.t (, %s10)1707 %5 = icmp eq i8 %0, %11708 %6 = select i1 %5, i128 %2, i128 %31709 ret i128 %61710}1711 1712; Function Attrs: norecurse nounwind readnone1713define i128 @select_cc_u8_i128(i8 zeroext %0, i8 zeroext %1, i128 %2, i128 %3) {1714; CHECK-LABEL: select_cc_u8_i128:1715; CHECK: # %bb.0:1716; CHECK-NEXT: cmpu.w %s0, %s0, %s11717; CHECK-NEXT: cmov.w.eq %s4, %s2, %s01718; CHECK-NEXT: cmov.w.eq %s5, %s3, %s01719; CHECK-NEXT: or %s0, 0, %s41720; CHECK-NEXT: or %s1, 0, %s51721; CHECK-NEXT: b.l.t (, %s10)1722 %5 = icmp eq i8 %0, %11723 %6 = select i1 %5, i128 %2, i128 %31724 ret i128 %61725}1726 1727; Function Attrs: norecurse nounwind readnone1728define i128 @select_cc_i16_i128(i16 signext %0, i16 signext %1, i128 %2, i128 %3) {1729; CHECK-LABEL: select_cc_i16_i128:1730; CHECK: # %bb.0:1731; CHECK-NEXT: cmpu.w %s0, %s0, %s11732; CHECK-NEXT: cmov.w.eq %s4, %s2, %s01733; CHECK-NEXT: cmov.w.eq %s5, %s3, %s01734; CHECK-NEXT: or %s0, 0, %s41735; CHECK-NEXT: or %s1, 0, %s51736; CHECK-NEXT: b.l.t (, %s10)1737 %5 = icmp eq i16 %0, %11738 %6 = select i1 %5, i128 %2, i128 %31739 ret i128 %61740}1741 1742; Function Attrs: norecurse nounwind readnone1743define i128 @select_cc_u16_i128(i16 zeroext %0, i16 zeroext %1, i128 %2, i128 %3) {1744; CHECK-LABEL: select_cc_u16_i128:1745; CHECK: # %bb.0:1746; CHECK-NEXT: cmpu.w %s0, %s0, %s11747; CHECK-NEXT: cmov.w.eq %s4, %s2, %s01748; CHECK-NEXT: cmov.w.eq %s5, %s3, %s01749; CHECK-NEXT: or %s0, 0, %s41750; CHECK-NEXT: or %s1, 0, %s51751; CHECK-NEXT: b.l.t (, %s10)1752 %5 = icmp eq i16 %0, %11753 %6 = select i1 %5, i128 %2, i128 %31754 ret i128 %61755}1756 1757; Function Attrs: norecurse nounwind readnone1758define i128 @select_cc_i32_i128(i32 signext %0, i32 signext %1, i128 %2, i128 %3) {1759; CHECK-LABEL: select_cc_i32_i128:1760; CHECK: # %bb.0:1761; CHECK-NEXT: cmpu.w %s0, %s0, %s11762; CHECK-NEXT: cmov.w.eq %s4, %s2, %s01763; CHECK-NEXT: cmov.w.eq %s5, %s3, %s01764; CHECK-NEXT: or %s0, 0, %s41765; CHECK-NEXT: or %s1, 0, %s51766; CHECK-NEXT: b.l.t (, %s10)1767 %5 = icmp eq i32 %0, %11768 %6 = select i1 %5, i128 %2, i128 %31769 ret i128 %61770}1771 1772; Function Attrs: norecurse nounwind readnone1773define i128 @select_cc_u32_i128(i32 zeroext %0, i32 zeroext %1, i128 %2, i128 %3) {1774; CHECK-LABEL: select_cc_u32_i128:1775; CHECK: # %bb.0:1776; CHECK-NEXT: cmpu.w %s0, %s0, %s11777; CHECK-NEXT: cmov.w.eq %s4, %s2, %s01778; CHECK-NEXT: cmov.w.eq %s5, %s3, %s01779; CHECK-NEXT: or %s0, 0, %s41780; CHECK-NEXT: or %s1, 0, %s51781; CHECK-NEXT: b.l.t (, %s10)1782 %5 = icmp eq i32 %0, %11783 %6 = select i1 %5, i128 %2, i128 %31784 ret i128 %61785}1786 1787; Function Attrs: norecurse nounwind readnone1788define i128 @select_cc_i64_i128(i64 %0, i64 %1, i128 %2, i128 %3) {1789; CHECK-LABEL: select_cc_i64_i128:1790; CHECK: # %bb.0:1791; CHECK-NEXT: cmpu.l %s0, %s0, %s11792; CHECK-NEXT: cmov.l.eq %s4, %s2, %s01793; CHECK-NEXT: cmov.l.eq %s5, %s3, %s01794; CHECK-NEXT: or %s0, 0, %s41795; CHECK-NEXT: or %s1, 0, %s51796; CHECK-NEXT: b.l.t (, %s10)1797 %5 = icmp eq i64 %0, %11798 %6 = select i1 %5, i128 %2, i128 %31799 ret i128 %61800}1801 1802; Function Attrs: norecurse nounwind readnone1803define i128 @select_cc_u64_i128(i64 %0, i64 %1, i128 %2, i128 %3) {1804; CHECK-LABEL: select_cc_u64_i128:1805; CHECK: # %bb.0:1806; CHECK-NEXT: cmpu.l %s0, %s0, %s11807; CHECK-NEXT: cmov.l.eq %s4, %s2, %s01808; CHECK-NEXT: cmov.l.eq %s5, %s3, %s01809; CHECK-NEXT: or %s0, 0, %s41810; CHECK-NEXT: or %s1, 0, %s51811; CHECK-NEXT: b.l.t (, %s10)1812 %5 = icmp eq i64 %0, %11813 %6 = select i1 %5, i128 %2, i128 %31814 ret i128 %61815}1816 1817; Function Attrs: norecurse nounwind readnone1818define i128 @select_cc_i128_i128(i128 %0, i128 %1, i128 %2, i128 %3) {1819; CHECK-LABEL: select_cc_i128_i128:1820; CHECK: # %bb.0:1821; CHECK-NEXT: xor %s1, %s1, %s31822; CHECK-NEXT: xor %s0, %s0, %s21823; CHECK-NEXT: or %s0, %s0, %s11824; CHECK-NEXT: cmov.l.eq %s6, %s4, %s01825; CHECK-NEXT: cmov.l.eq %s7, %s5, %s01826; CHECK-NEXT: or %s0, 0, %s61827; CHECK-NEXT: or %s1, 0, %s71828; CHECK-NEXT: b.l.t (, %s10)1829 %5 = icmp eq i128 %0, %11830 %6 = select i1 %5, i128 %2, i128 %31831 ret i128 %61832}1833 1834; Function Attrs: norecurse nounwind readnone1835define i128 @select_cc_u128_i128(i128 %0, i128 %1, i128 %2, i128 %3) {1836; CHECK-LABEL: select_cc_u128_i128:1837; CHECK: # %bb.0:1838; CHECK-NEXT: xor %s1, %s1, %s31839; CHECK-NEXT: xor %s0, %s0, %s21840; CHECK-NEXT: or %s0, %s0, %s11841; CHECK-NEXT: cmov.l.eq %s6, %s4, %s01842; CHECK-NEXT: cmov.l.eq %s7, %s5, %s01843; CHECK-NEXT: or %s0, 0, %s61844; CHECK-NEXT: or %s1, 0, %s71845; CHECK-NEXT: b.l.t (, %s10)1846 %5 = icmp eq i128 %0, %11847 %6 = select i1 %5, i128 %2, i128 %31848 ret i128 %61849}1850 1851; Function Attrs: norecurse nounwind readnone1852define i128 @select_cc_float_i128(float %0, float %1, i128 %2, i128 %3) {1853; CHECK-LABEL: select_cc_float_i128:1854; CHECK: # %bb.0:1855; CHECK-NEXT: fcmp.s %s0, %s0, %s11856; CHECK-NEXT: cmov.s.eq %s4, %s2, %s01857; CHECK-NEXT: cmov.s.eq %s5, %s3, %s01858; CHECK-NEXT: or %s0, 0, %s41859; CHECK-NEXT: or %s1, 0, %s51860; CHECK-NEXT: b.l.t (, %s10)1861 %5 = fcmp fast oeq float %0, %11862 %6 = select i1 %5, i128 %2, i128 %31863 ret i128 %61864}1865 1866; Function Attrs: norecurse nounwind readnone1867define i128 @select_cc_double_i128(double %0, double %1, i128 %2, i128 %3) {1868; CHECK-LABEL: select_cc_double_i128:1869; CHECK: # %bb.0:1870; CHECK-NEXT: fcmp.d %s0, %s0, %s11871; CHECK-NEXT: cmov.d.eq %s4, %s2, %s01872; CHECK-NEXT: cmov.d.eq %s5, %s3, %s01873; CHECK-NEXT: or %s0, 0, %s41874; CHECK-NEXT: or %s1, 0, %s51875; CHECK-NEXT: b.l.t (, %s10)1876 %5 = fcmp fast oeq double %0, %11877 %6 = select i1 %5, i128 %2, i128 %31878 ret i128 %61879}1880 1881; Function Attrs: norecurse nounwind readnone1882define i128 @select_cc_quad_i128(fp128 %0, fp128 %1, i128 %2, i128 %3) {1883; CHECK-LABEL: select_cc_quad_i128:1884; CHECK: # %bb.0:1885; CHECK-NEXT: fcmp.q %s0, %s0, %s21886; CHECK-NEXT: cmov.d.eq %s6, %s4, %s01887; CHECK-NEXT: cmov.d.eq %s7, %s5, %s01888; CHECK-NEXT: or %s0, 0, %s61889; CHECK-NEXT: or %s1, 0, %s71890; CHECK-NEXT: b.l.t (, %s10)1891 %5 = fcmp fast oeq fp128 %0, %11892 %6 = select i1 %5, i128 %2, i128 %31893 ret i128 %61894}1895 1896; Function Attrs: norecurse nounwind readnone1897define i128 @select_cc_i1_u128(i1 zeroext %0, i1 zeroext %1, i128 %2, i128 %3) {1898; CHECK-LABEL: select_cc_i1_u128:1899; CHECK: # %bb.0:1900; CHECK-NEXT: xor %s0, %s0, %s11901; CHECK-NEXT: cmov.w.ne %s2, %s4, %s01902; CHECK-NEXT: cmov.w.ne %s3, %s5, %s01903; CHECK-NEXT: or %s0, 0, %s21904; CHECK-NEXT: or %s1, 0, %s31905; CHECK-NEXT: b.l.t (, %s10)1906 %5 = xor i1 %0, %11907 %6 = select i1 %5, i128 %3, i128 %21908 ret i128 %61909}1910 1911; Function Attrs: norecurse nounwind readnone1912define i128 @select_cc_i8_u128(i8 signext %0, i8 signext %1, i128 %2, i128 %3) {1913; CHECK-LABEL: select_cc_i8_u128:1914; CHECK: # %bb.0:1915; CHECK-NEXT: cmpu.w %s0, %s0, %s11916; CHECK-NEXT: cmov.w.eq %s4, %s2, %s01917; CHECK-NEXT: cmov.w.eq %s5, %s3, %s01918; CHECK-NEXT: or %s0, 0, %s41919; CHECK-NEXT: or %s1, 0, %s51920; CHECK-NEXT: b.l.t (, %s10)1921 %5 = icmp eq i8 %0, %11922 %6 = select i1 %5, i128 %2, i128 %31923 ret i128 %61924}1925 1926; Function Attrs: norecurse nounwind readnone1927define i128 @select_cc_u8_u128(i8 zeroext %0, i8 zeroext %1, i128 %2, i128 %3) {1928; CHECK-LABEL: select_cc_u8_u128:1929; CHECK: # %bb.0:1930; CHECK-NEXT: cmpu.w %s0, %s0, %s11931; CHECK-NEXT: cmov.w.eq %s4, %s2, %s01932; CHECK-NEXT: cmov.w.eq %s5, %s3, %s01933; CHECK-NEXT: or %s0, 0, %s41934; CHECK-NEXT: or %s1, 0, %s51935; CHECK-NEXT: b.l.t (, %s10)1936 %5 = icmp eq i8 %0, %11937 %6 = select i1 %5, i128 %2, i128 %31938 ret i128 %61939}1940 1941; Function Attrs: norecurse nounwind readnone1942define i128 @select_cc_i16_u128(i16 signext %0, i16 signext %1, i128 %2, i128 %3) {1943; CHECK-LABEL: select_cc_i16_u128:1944; CHECK: # %bb.0:1945; CHECK-NEXT: cmpu.w %s0, %s0, %s11946; CHECK-NEXT: cmov.w.eq %s4, %s2, %s01947; CHECK-NEXT: cmov.w.eq %s5, %s3, %s01948; CHECK-NEXT: or %s0, 0, %s41949; CHECK-NEXT: or %s1, 0, %s51950; CHECK-NEXT: b.l.t (, %s10)1951 %5 = icmp eq i16 %0, %11952 %6 = select i1 %5, i128 %2, i128 %31953 ret i128 %61954}1955 1956; Function Attrs: norecurse nounwind readnone1957define i128 @select_cc_u16_u128(i16 zeroext %0, i16 zeroext %1, i128 %2, i128 %3) {1958; CHECK-LABEL: select_cc_u16_u128:1959; CHECK: # %bb.0:1960; CHECK-NEXT: cmpu.w %s0, %s0, %s11961; CHECK-NEXT: cmov.w.eq %s4, %s2, %s01962; CHECK-NEXT: cmov.w.eq %s5, %s3, %s01963; CHECK-NEXT: or %s0, 0, %s41964; CHECK-NEXT: or %s1, 0, %s51965; CHECK-NEXT: b.l.t (, %s10)1966 %5 = icmp eq i16 %0, %11967 %6 = select i1 %5, i128 %2, i128 %31968 ret i128 %61969}1970 1971; Function Attrs: norecurse nounwind readnone1972define i128 @select_cc_i32_u128(i32 signext %0, i32 signext %1, i128 %2, i128 %3) {1973; CHECK-LABEL: select_cc_i32_u128:1974; CHECK: # %bb.0:1975; CHECK-NEXT: cmpu.w %s0, %s0, %s11976; CHECK-NEXT: cmov.w.eq %s4, %s2, %s01977; CHECK-NEXT: cmov.w.eq %s5, %s3, %s01978; CHECK-NEXT: or %s0, 0, %s41979; CHECK-NEXT: or %s1, 0, %s51980; CHECK-NEXT: b.l.t (, %s10)1981 %5 = icmp eq i32 %0, %11982 %6 = select i1 %5, i128 %2, i128 %31983 ret i128 %61984}1985 1986; Function Attrs: norecurse nounwind readnone1987define i128 @select_cc_u32_u128(i32 zeroext %0, i32 zeroext %1, i128 %2, i128 %3) {1988; CHECK-LABEL: select_cc_u32_u128:1989; CHECK: # %bb.0:1990; CHECK-NEXT: cmpu.w %s0, %s0, %s11991; CHECK-NEXT: cmov.w.eq %s4, %s2, %s01992; CHECK-NEXT: cmov.w.eq %s5, %s3, %s01993; CHECK-NEXT: or %s0, 0, %s41994; CHECK-NEXT: or %s1, 0, %s51995; CHECK-NEXT: b.l.t (, %s10)1996 %5 = icmp eq i32 %0, %11997 %6 = select i1 %5, i128 %2, i128 %31998 ret i128 %61999}2000 2001; Function Attrs: norecurse nounwind readnone2002define i128 @select_cc_i64_u128(i64 %0, i64 %1, i128 %2, i128 %3) {2003; CHECK-LABEL: select_cc_i64_u128:2004; CHECK: # %bb.0:2005; CHECK-NEXT: cmpu.l %s0, %s0, %s12006; CHECK-NEXT: cmov.l.eq %s4, %s2, %s02007; CHECK-NEXT: cmov.l.eq %s5, %s3, %s02008; CHECK-NEXT: or %s0, 0, %s42009; CHECK-NEXT: or %s1, 0, %s52010; CHECK-NEXT: b.l.t (, %s10)2011 %5 = icmp eq i64 %0, %12012 %6 = select i1 %5, i128 %2, i128 %32013 ret i128 %62014}2015 2016; Function Attrs: norecurse nounwind readnone2017define i128 @select_cc_u64_u128(i64 %0, i64 %1, i128 %2, i128 %3) {2018; CHECK-LABEL: select_cc_u64_u128:2019; CHECK: # %bb.0:2020; CHECK-NEXT: cmpu.l %s0, %s0, %s12021; CHECK-NEXT: cmov.l.eq %s4, %s2, %s02022; CHECK-NEXT: cmov.l.eq %s5, %s3, %s02023; CHECK-NEXT: or %s0, 0, %s42024; CHECK-NEXT: or %s1, 0, %s52025; CHECK-NEXT: b.l.t (, %s10)2026 %5 = icmp eq i64 %0, %12027 %6 = select i1 %5, i128 %2, i128 %32028 ret i128 %62029}2030 2031; Function Attrs: norecurse nounwind readnone2032define i128 @select_cc_i128_u128(i128 %0, i128 %1, i128 %2, i128 %3) {2033; CHECK-LABEL: select_cc_i128_u128:2034; CHECK: # %bb.0:2035; CHECK-NEXT: xor %s1, %s1, %s32036; CHECK-NEXT: xor %s0, %s0, %s22037; CHECK-NEXT: or %s0, %s0, %s12038; CHECK-NEXT: cmov.l.eq %s6, %s4, %s02039; CHECK-NEXT: cmov.l.eq %s7, %s5, %s02040; CHECK-NEXT: or %s0, 0, %s62041; CHECK-NEXT: or %s1, 0, %s72042; CHECK-NEXT: b.l.t (, %s10)2043 %5 = icmp eq i128 %0, %12044 %6 = select i1 %5, i128 %2, i128 %32045 ret i128 %62046}2047 2048; Function Attrs: norecurse nounwind readnone2049define i128 @select_cc_u128_u128(i128 %0, i128 %1, i128 %2, i128 %3) {2050; CHECK-LABEL: select_cc_u128_u128:2051; CHECK: # %bb.0:2052; CHECK-NEXT: xor %s1, %s1, %s32053; CHECK-NEXT: xor %s0, %s0, %s22054; CHECK-NEXT: or %s0, %s0, %s12055; CHECK-NEXT: cmov.l.eq %s6, %s4, %s02056; CHECK-NEXT: cmov.l.eq %s7, %s5, %s02057; CHECK-NEXT: or %s0, 0, %s62058; CHECK-NEXT: or %s1, 0, %s72059; CHECK-NEXT: b.l.t (, %s10)2060 %5 = icmp eq i128 %0, %12061 %6 = select i1 %5, i128 %2, i128 %32062 ret i128 %62063}2064 2065; Function Attrs: norecurse nounwind readnone2066define i128 @select_cc_float_u128(float %0, float %1, i128 %2, i128 %3) {2067; CHECK-LABEL: select_cc_float_u128:2068; CHECK: # %bb.0:2069; CHECK-NEXT: fcmp.s %s0, %s0, %s12070; CHECK-NEXT: cmov.s.eq %s4, %s2, %s02071; CHECK-NEXT: cmov.s.eq %s5, %s3, %s02072; CHECK-NEXT: or %s0, 0, %s42073; CHECK-NEXT: or %s1, 0, %s52074; CHECK-NEXT: b.l.t (, %s10)2075 %5 = fcmp fast oeq float %0, %12076 %6 = select i1 %5, i128 %2, i128 %32077 ret i128 %62078}2079 2080; Function Attrs: norecurse nounwind readnone2081define i128 @select_cc_double_u128(double %0, double %1, i128 %2, i128 %3) {2082; CHECK-LABEL: select_cc_double_u128:2083; CHECK: # %bb.0:2084; CHECK-NEXT: fcmp.d %s0, %s0, %s12085; CHECK-NEXT: cmov.d.eq %s4, %s2, %s02086; CHECK-NEXT: cmov.d.eq %s5, %s3, %s02087; CHECK-NEXT: or %s0, 0, %s42088; CHECK-NEXT: or %s1, 0, %s52089; CHECK-NEXT: b.l.t (, %s10)2090 %5 = fcmp fast oeq double %0, %12091 %6 = select i1 %5, i128 %2, i128 %32092 ret i128 %62093}2094 2095; Function Attrs: norecurse nounwind readnone2096define i128 @select_cc_quad_u128(fp128 %0, fp128 %1, i128 %2, i128 %3) {2097; CHECK-LABEL: select_cc_quad_u128:2098; CHECK: # %bb.0:2099; CHECK-NEXT: fcmp.q %s0, %s0, %s22100; CHECK-NEXT: cmov.d.eq %s6, %s4, %s02101; CHECK-NEXT: cmov.d.eq %s7, %s5, %s02102; CHECK-NEXT: or %s0, 0, %s62103; CHECK-NEXT: or %s1, 0, %s72104; CHECK-NEXT: b.l.t (, %s10)2105 %5 = fcmp fast oeq fp128 %0, %12106 %6 = select i1 %5, i128 %2, i128 %32107 ret i128 %62108}2109 2110; Function Attrs: norecurse nounwind readnone2111define float @select_cc_i1_float(i1 zeroext %0, i1 zeroext %1, float %2, float %3) {2112; CHECK-LABEL: select_cc_i1_float:2113; CHECK: # %bb.0:2114; CHECK-NEXT: xor %s0, %s0, %s12115; CHECK-NEXT: cmov.w.ne %s2, %s3, %s02116; CHECK-NEXT: or %s0, 0, %s22117; CHECK-NEXT: b.l.t (, %s10)2118 %5 = xor i1 %0, %12119 %6 = select fast i1 %5, float %3, float %22120 ret float %62121}2122 2123; Function Attrs: norecurse nounwind readnone2124define float @select_cc_i8_float(i8 signext %0, i8 signext %1, float %2, float %3) {2125; CHECK-LABEL: select_cc_i8_float:2126; CHECK: # %bb.0:2127; CHECK-NEXT: cmpu.w %s0, %s0, %s12128; CHECK-NEXT: cmov.w.eq %s3, %s2, %s02129; CHECK-NEXT: or %s0, 0, %s32130; CHECK-NEXT: b.l.t (, %s10)2131 %5 = icmp eq i8 %0, %12132 %6 = select fast i1 %5, float %2, float %32133 ret float %62134}2135 2136; Function Attrs: norecurse nounwind readnone2137define float @select_cc_u8_float(i8 zeroext %0, i8 zeroext %1, float %2, float %3) {2138; CHECK-LABEL: select_cc_u8_float:2139; CHECK: # %bb.0:2140; CHECK-NEXT: cmpu.w %s0, %s0, %s12141; CHECK-NEXT: cmov.w.eq %s3, %s2, %s02142; CHECK-NEXT: or %s0, 0, %s32143; CHECK-NEXT: b.l.t (, %s10)2144 %5 = icmp eq i8 %0, %12145 %6 = select fast i1 %5, float %2, float %32146 ret float %62147}2148 2149; Function Attrs: norecurse nounwind readnone2150define float @select_cc_i16_float(i16 signext %0, i16 signext %1, float %2, float %3) {2151; CHECK-LABEL: select_cc_i16_float:2152; CHECK: # %bb.0:2153; CHECK-NEXT: cmpu.w %s0, %s0, %s12154; CHECK-NEXT: cmov.w.eq %s3, %s2, %s02155; CHECK-NEXT: or %s0, 0, %s32156; CHECK-NEXT: b.l.t (, %s10)2157 %5 = icmp eq i16 %0, %12158 %6 = select fast i1 %5, float %2, float %32159 ret float %62160}2161 2162; Function Attrs: norecurse nounwind readnone2163define float @select_cc_u16_float(i16 zeroext %0, i16 zeroext %1, float %2, float %3) {2164; CHECK-LABEL: select_cc_u16_float:2165; CHECK: # %bb.0:2166; CHECK-NEXT: cmpu.w %s0, %s0, %s12167; CHECK-NEXT: cmov.w.eq %s3, %s2, %s02168; CHECK-NEXT: or %s0, 0, %s32169; CHECK-NEXT: b.l.t (, %s10)2170 %5 = icmp eq i16 %0, %12171 %6 = select fast i1 %5, float %2, float %32172 ret float %62173}2174 2175; Function Attrs: norecurse nounwind readnone2176define float @select_cc_i32_float(i32 signext %0, i32 signext %1, float %2, float %3) {2177; CHECK-LABEL: select_cc_i32_float:2178; CHECK: # %bb.0:2179; CHECK-NEXT: cmpu.w %s0, %s0, %s12180; CHECK-NEXT: cmov.w.eq %s3, %s2, %s02181; CHECK-NEXT: or %s0, 0, %s32182; CHECK-NEXT: b.l.t (, %s10)2183 %5 = icmp eq i32 %0, %12184 %6 = select fast i1 %5, float %2, float %32185 ret float %62186}2187 2188; Function Attrs: norecurse nounwind readnone2189define float @select_cc_u32_float(i32 zeroext %0, i32 zeroext %1, float %2, float %3) {2190; CHECK-LABEL: select_cc_u32_float:2191; CHECK: # %bb.0:2192; CHECK-NEXT: cmpu.w %s0, %s0, %s12193; CHECK-NEXT: cmov.w.eq %s3, %s2, %s02194; CHECK-NEXT: or %s0, 0, %s32195; CHECK-NEXT: b.l.t (, %s10)2196 %5 = icmp eq i32 %0, %12197 %6 = select fast i1 %5, float %2, float %32198 ret float %62199}2200 2201; Function Attrs: norecurse nounwind readnone2202define float @select_cc_i64_float(i64 %0, i64 %1, float %2, float %3) {2203; CHECK-LABEL: select_cc_i64_float:2204; CHECK: # %bb.0:2205; CHECK-NEXT: cmpu.l %s0, %s0, %s12206; CHECK-NEXT: cmov.l.eq %s3, %s2, %s02207; CHECK-NEXT: or %s0, 0, %s32208; CHECK-NEXT: b.l.t (, %s10)2209 %5 = icmp eq i64 %0, %12210 %6 = select fast i1 %5, float %2, float %32211 ret float %62212}2213 2214; Function Attrs: norecurse nounwind readnone2215define float @select_cc_u64_float(i64 %0, i64 %1, float %2, float %3) {2216; CHECK-LABEL: select_cc_u64_float:2217; CHECK: # %bb.0:2218; CHECK-NEXT: cmpu.l %s0, %s0, %s12219; CHECK-NEXT: cmov.l.eq %s3, %s2, %s02220; CHECK-NEXT: or %s0, 0, %s32221; CHECK-NEXT: b.l.t (, %s10)2222 %5 = icmp eq i64 %0, %12223 %6 = select fast i1 %5, float %2, float %32224 ret float %62225}2226 2227; Function Attrs: norecurse nounwind readnone2228define float @select_cc_i128_float(i128 %0, i128 %1, float %2, float %3) {2229; CHECK-LABEL: select_cc_i128_float:2230; CHECK: # %bb.0:2231; CHECK-NEXT: xor %s1, %s1, %s32232; CHECK-NEXT: xor %s0, %s0, %s22233; CHECK-NEXT: or %s0, %s0, %s12234; CHECK-NEXT: cmov.l.eq %s5, %s4, %s02235; CHECK-NEXT: or %s0, 0, %s52236; CHECK-NEXT: b.l.t (, %s10)2237 %5 = icmp eq i128 %0, %12238 %6 = select fast i1 %5, float %2, float %32239 ret float %62240}2241 2242; Function Attrs: norecurse nounwind readnone2243define float @select_cc_u128_float(i128 %0, i128 %1, float %2, float %3) {2244; CHECK-LABEL: select_cc_u128_float:2245; CHECK: # %bb.0:2246; CHECK-NEXT: xor %s1, %s1, %s32247; CHECK-NEXT: xor %s0, %s0, %s22248; CHECK-NEXT: or %s0, %s0, %s12249; CHECK-NEXT: cmov.l.eq %s5, %s4, %s02250; CHECK-NEXT: or %s0, 0, %s52251; CHECK-NEXT: b.l.t (, %s10)2252 %5 = icmp eq i128 %0, %12253 %6 = select fast i1 %5, float %2, float %32254 ret float %62255}2256 2257; Function Attrs: norecurse nounwind readnone2258define float @select_cc_float_float(float %0, float %1, float %2, float %3) {2259; CHECK-LABEL: select_cc_float_float:2260; CHECK: # %bb.0:2261; CHECK-NEXT: fcmp.s %s0, %s0, %s12262; CHECK-NEXT: cmov.s.eq %s3, %s2, %s02263; CHECK-NEXT: or %s0, 0, %s32264; CHECK-NEXT: b.l.t (, %s10)2265 %5 = fcmp fast oeq float %0, %12266 %6 = select fast i1 %5, float %2, float %32267 ret float %62268}2269 2270; Function Attrs: norecurse nounwind readnone2271define float @select_cc_double_float(double %0, double %1, float %2, float %3) {2272; CHECK-LABEL: select_cc_double_float:2273; CHECK: # %bb.0:2274; CHECK-NEXT: fcmp.d %s0, %s0, %s12275; CHECK-NEXT: cmov.d.eq %s3, %s2, %s02276; CHECK-NEXT: or %s0, 0, %s32277; CHECK-NEXT: b.l.t (, %s10)2278 %5 = fcmp fast oeq double %0, %12279 %6 = select fast i1 %5, float %2, float %32280 ret float %62281}2282 2283; Function Attrs: norecurse nounwind readnone2284define float @select_cc_quad_float(fp128 %0, fp128 %1, float %2, float %3) {2285; CHECK-LABEL: select_cc_quad_float:2286; CHECK: # %bb.0:2287; CHECK-NEXT: fcmp.q %s0, %s0, %s22288; CHECK-NEXT: cmov.d.eq %s5, %s4, %s02289; CHECK-NEXT: or %s0, 0, %s52290; CHECK-NEXT: b.l.t (, %s10)2291 %5 = fcmp fast oeq fp128 %0, %12292 %6 = select fast i1 %5, float %2, float %32293 ret float %62294}2295 2296; Function Attrs: norecurse nounwind readnone2297define double @select_cc_i1_double(i1 zeroext %0, i1 zeroext %1, double %2, double %3) {2298; CHECK-LABEL: select_cc_i1_double:2299; CHECK: # %bb.0:2300; CHECK-NEXT: xor %s0, %s0, %s12301; CHECK-NEXT: cmov.w.ne %s2, %s3, %s02302; CHECK-NEXT: or %s0, 0, %s22303; CHECK-NEXT: b.l.t (, %s10)2304 %5 = xor i1 %0, %12305 %6 = select fast i1 %5, double %3, double %22306 ret double %62307}2308 2309; Function Attrs: norecurse nounwind readnone2310define double @select_cc_i8_double(i8 signext %0, i8 signext %1, double %2, double %3) {2311; CHECK-LABEL: select_cc_i8_double:2312; CHECK: # %bb.0:2313; CHECK-NEXT: cmpu.w %s0, %s0, %s12314; CHECK-NEXT: cmov.w.eq %s3, %s2, %s02315; CHECK-NEXT: or %s0, 0, %s32316; CHECK-NEXT: b.l.t (, %s10)2317 %5 = icmp eq i8 %0, %12318 %6 = select fast i1 %5, double %2, double %32319 ret double %62320}2321 2322; Function Attrs: norecurse nounwind readnone2323define double @select_cc_u8_double(i8 zeroext %0, i8 zeroext %1, double %2, double %3) {2324; CHECK-LABEL: select_cc_u8_double:2325; CHECK: # %bb.0:2326; CHECK-NEXT: cmpu.w %s0, %s0, %s12327; CHECK-NEXT: cmov.w.eq %s3, %s2, %s02328; CHECK-NEXT: or %s0, 0, %s32329; CHECK-NEXT: b.l.t (, %s10)2330 %5 = icmp eq i8 %0, %12331 %6 = select fast i1 %5, double %2, double %32332 ret double %62333}2334 2335; Function Attrs: norecurse nounwind readnone2336define double @select_cc_i16_double(i16 signext %0, i16 signext %1, double %2, double %3) {2337; CHECK-LABEL: select_cc_i16_double:2338; CHECK: # %bb.0:2339; CHECK-NEXT: cmpu.w %s0, %s0, %s12340; CHECK-NEXT: cmov.w.eq %s3, %s2, %s02341; CHECK-NEXT: or %s0, 0, %s32342; CHECK-NEXT: b.l.t (, %s10)2343 %5 = icmp eq i16 %0, %12344 %6 = select fast i1 %5, double %2, double %32345 ret double %62346}2347 2348; Function Attrs: norecurse nounwind readnone2349define double @select_cc_u16_double(i16 zeroext %0, i16 zeroext %1, double %2, double %3) {2350; CHECK-LABEL: select_cc_u16_double:2351; CHECK: # %bb.0:2352; CHECK-NEXT: cmpu.w %s0, %s0, %s12353; CHECK-NEXT: cmov.w.eq %s3, %s2, %s02354; CHECK-NEXT: or %s0, 0, %s32355; CHECK-NEXT: b.l.t (, %s10)2356 %5 = icmp eq i16 %0, %12357 %6 = select fast i1 %5, double %2, double %32358 ret double %62359}2360 2361; Function Attrs: norecurse nounwind readnone2362define double @select_cc_i32_double(i32 signext %0, i32 signext %1, double %2, double %3) {2363; CHECK-LABEL: select_cc_i32_double:2364; CHECK: # %bb.0:2365; CHECK-NEXT: cmpu.w %s0, %s0, %s12366; CHECK-NEXT: cmov.w.eq %s3, %s2, %s02367; CHECK-NEXT: or %s0, 0, %s32368; CHECK-NEXT: b.l.t (, %s10)2369 %5 = icmp eq i32 %0, %12370 %6 = select fast i1 %5, double %2, double %32371 ret double %62372}2373 2374; Function Attrs: norecurse nounwind readnone2375define double @select_cc_u32_double(i32 zeroext %0, i32 zeroext %1, double %2, double %3) {2376; CHECK-LABEL: select_cc_u32_double:2377; CHECK: # %bb.0:2378; CHECK-NEXT: cmpu.w %s0, %s0, %s12379; CHECK-NEXT: cmov.w.eq %s3, %s2, %s02380; CHECK-NEXT: or %s0, 0, %s32381; CHECK-NEXT: b.l.t (, %s10)2382 %5 = icmp eq i32 %0, %12383 %6 = select fast i1 %5, double %2, double %32384 ret double %62385}2386 2387; Function Attrs: norecurse nounwind readnone2388define double @select_cc_i64_double(i64 %0, i64 %1, double %2, double %3) {2389; CHECK-LABEL: select_cc_i64_double:2390; CHECK: # %bb.0:2391; CHECK-NEXT: cmpu.l %s0, %s0, %s12392; CHECK-NEXT: cmov.l.eq %s3, %s2, %s02393; CHECK-NEXT: or %s0, 0, %s32394; CHECK-NEXT: b.l.t (, %s10)2395 %5 = icmp eq i64 %0, %12396 %6 = select fast i1 %5, double %2, double %32397 ret double %62398}2399 2400; Function Attrs: norecurse nounwind readnone2401define double @select_cc_u64_double(i64 %0, i64 %1, double %2, double %3) {2402; CHECK-LABEL: select_cc_u64_double:2403; CHECK: # %bb.0:2404; CHECK-NEXT: cmpu.l %s0, %s0, %s12405; CHECK-NEXT: cmov.l.eq %s3, %s2, %s02406; CHECK-NEXT: or %s0, 0, %s32407; CHECK-NEXT: b.l.t (, %s10)2408 %5 = icmp eq i64 %0, %12409 %6 = select fast i1 %5, double %2, double %32410 ret double %62411}2412 2413; Function Attrs: norecurse nounwind readnone2414define double @select_cc_i128_double(i128 %0, i128 %1, double %2, double %3) {2415; CHECK-LABEL: select_cc_i128_double:2416; CHECK: # %bb.0:2417; CHECK-NEXT: xor %s1, %s1, %s32418; CHECK-NEXT: xor %s0, %s0, %s22419; CHECK-NEXT: or %s0, %s0, %s12420; CHECK-NEXT: cmov.l.eq %s5, %s4, %s02421; CHECK-NEXT: or %s0, 0, %s52422; CHECK-NEXT: b.l.t (, %s10)2423 %5 = icmp eq i128 %0, %12424 %6 = select fast i1 %5, double %2, double %32425 ret double %62426}2427 2428; Function Attrs: norecurse nounwind readnone2429define double @select_cc_u128_double(i128 %0, i128 %1, double %2, double %3) {2430; CHECK-LABEL: select_cc_u128_double:2431; CHECK: # %bb.0:2432; CHECK-NEXT: xor %s1, %s1, %s32433; CHECK-NEXT: xor %s0, %s0, %s22434; CHECK-NEXT: or %s0, %s0, %s12435; CHECK-NEXT: cmov.l.eq %s5, %s4, %s02436; CHECK-NEXT: or %s0, 0, %s52437; CHECK-NEXT: b.l.t (, %s10)2438 %5 = icmp eq i128 %0, %12439 %6 = select fast i1 %5, double %2, double %32440 ret double %62441}2442 2443; Function Attrs: norecurse nounwind readnone2444define double @select_cc_float_double(float %0, float %1, double %2, double %3) {2445; CHECK-LABEL: select_cc_float_double:2446; CHECK: # %bb.0:2447; CHECK-NEXT: fcmp.s %s0, %s0, %s12448; CHECK-NEXT: cmov.s.eq %s3, %s2, %s02449; CHECK-NEXT: or %s0, 0, %s32450; CHECK-NEXT: b.l.t (, %s10)2451 %5 = fcmp fast oeq float %0, %12452 %6 = select fast i1 %5, double %2, double %32453 ret double %62454}2455 2456; Function Attrs: norecurse nounwind readnone2457define double @select_cc_double_double(double %0, double %1, double %2, double %3) {2458; CHECK-LABEL: select_cc_double_double:2459; CHECK: # %bb.0:2460; CHECK-NEXT: fcmp.d %s0, %s0, %s12461; CHECK-NEXT: cmov.d.eq %s3, %s2, %s02462; CHECK-NEXT: or %s0, 0, %s32463; CHECK-NEXT: b.l.t (, %s10)2464 %5 = fcmp fast oeq double %0, %12465 %6 = select fast i1 %5, double %2, double %32466 ret double %62467}2468 2469; Function Attrs: norecurse nounwind readnone2470define double @select_cc_quad_double(fp128 %0, fp128 %1, double %2, double %3) {2471; CHECK-LABEL: select_cc_quad_double:2472; CHECK: # %bb.0:2473; CHECK-NEXT: fcmp.q %s0, %s0, %s22474; CHECK-NEXT: cmov.d.eq %s5, %s4, %s02475; CHECK-NEXT: or %s0, 0, %s52476; CHECK-NEXT: b.l.t (, %s10)2477 %5 = fcmp fast oeq fp128 %0, %12478 %6 = select fast i1 %5, double %2, double %32479 ret double %62480}2481 2482; Function Attrs: norecurse nounwind readnone2483define fp128 @select_cc_i1_quad(i1 zeroext %0, i1 zeroext %1, fp128 %2, fp128 %3) {2484; CHECK-LABEL: select_cc_i1_quad:2485; CHECK: # %bb.0:2486; CHECK-NEXT: xor %s0, %s0, %s12487; CHECK-NEXT: cmov.w.ne %s2, %s4, %s02488; CHECK-NEXT: cmov.w.ne %s3, %s5, %s02489; CHECK-NEXT: or %s0, 0, %s22490; CHECK-NEXT: or %s1, 0, %s32491; CHECK-NEXT: b.l.t (, %s10)2492 %5 = xor i1 %0, %12493 %6 = select fast i1 %5, fp128 %3, fp128 %22494 ret fp128 %62495}2496 2497; Function Attrs: norecurse nounwind readnone2498define fp128 @select_cc_i8_quad(i8 signext %0, i8 signext %1, fp128 %2, fp128 %3) {2499; CHECK-LABEL: select_cc_i8_quad:2500; CHECK: # %bb.0:2501; CHECK-NEXT: cmpu.w %s0, %s0, %s12502; CHECK-NEXT: cmov.w.eq %s4, %s2, %s02503; CHECK-NEXT: cmov.w.eq %s5, %s3, %s02504; CHECK-NEXT: or %s0, 0, %s42505; CHECK-NEXT: or %s1, 0, %s52506; CHECK-NEXT: b.l.t (, %s10)2507 %5 = icmp eq i8 %0, %12508 %6 = select fast i1 %5, fp128 %2, fp128 %32509 ret fp128 %62510}2511 2512; Function Attrs: norecurse nounwind readnone2513define fp128 @select_cc_u8_quad(i8 zeroext %0, i8 zeroext %1, fp128 %2, fp128 %3) {2514; CHECK-LABEL: select_cc_u8_quad:2515; CHECK: # %bb.0:2516; CHECK-NEXT: cmpu.w %s0, %s0, %s12517; CHECK-NEXT: cmov.w.eq %s4, %s2, %s02518; CHECK-NEXT: cmov.w.eq %s5, %s3, %s02519; CHECK-NEXT: or %s0, 0, %s42520; CHECK-NEXT: or %s1, 0, %s52521; CHECK-NEXT: b.l.t (, %s10)2522 %5 = icmp eq i8 %0, %12523 %6 = select fast i1 %5, fp128 %2, fp128 %32524 ret fp128 %62525}2526 2527; Function Attrs: norecurse nounwind readnone2528define fp128 @select_cc_i16_quad(i16 signext %0, i16 signext %1, fp128 %2, fp128 %3) {2529; CHECK-LABEL: select_cc_i16_quad:2530; CHECK: # %bb.0:2531; CHECK-NEXT: cmpu.w %s0, %s0, %s12532; CHECK-NEXT: cmov.w.eq %s4, %s2, %s02533; CHECK-NEXT: cmov.w.eq %s5, %s3, %s02534; CHECK-NEXT: or %s0, 0, %s42535; CHECK-NEXT: or %s1, 0, %s52536; CHECK-NEXT: b.l.t (, %s10)2537 %5 = icmp eq i16 %0, %12538 %6 = select fast i1 %5, fp128 %2, fp128 %32539 ret fp128 %62540}2541 2542; Function Attrs: norecurse nounwind readnone2543define fp128 @select_cc_u16_quad(i16 zeroext %0, i16 zeroext %1, fp128 %2, fp128 %3) {2544; CHECK-LABEL: select_cc_u16_quad:2545; CHECK: # %bb.0:2546; CHECK-NEXT: cmpu.w %s0, %s0, %s12547; CHECK-NEXT: cmov.w.eq %s4, %s2, %s02548; CHECK-NEXT: cmov.w.eq %s5, %s3, %s02549; CHECK-NEXT: or %s0, 0, %s42550; CHECK-NEXT: or %s1, 0, %s52551; CHECK-NEXT: b.l.t (, %s10)2552 %5 = icmp eq i16 %0, %12553 %6 = select fast i1 %5, fp128 %2, fp128 %32554 ret fp128 %62555}2556 2557; Function Attrs: norecurse nounwind readnone2558define fp128 @select_cc_i32_quad(i32 signext %0, i32 signext %1, fp128 %2, fp128 %3) {2559; CHECK-LABEL: select_cc_i32_quad:2560; CHECK: # %bb.0:2561; CHECK-NEXT: cmpu.w %s0, %s0, %s12562; CHECK-NEXT: cmov.w.eq %s4, %s2, %s02563; CHECK-NEXT: cmov.w.eq %s5, %s3, %s02564; CHECK-NEXT: or %s0, 0, %s42565; CHECK-NEXT: or %s1, 0, %s52566; CHECK-NEXT: b.l.t (, %s10)2567 %5 = icmp eq i32 %0, %12568 %6 = select fast i1 %5, fp128 %2, fp128 %32569 ret fp128 %62570}2571 2572; Function Attrs: norecurse nounwind readnone2573define fp128 @select_cc_u32_quad(i32 zeroext %0, i32 zeroext %1, fp128 %2, fp128 %3) {2574; CHECK-LABEL: select_cc_u32_quad:2575; CHECK: # %bb.0:2576; CHECK-NEXT: cmpu.w %s0, %s0, %s12577; CHECK-NEXT: cmov.w.eq %s4, %s2, %s02578; CHECK-NEXT: cmov.w.eq %s5, %s3, %s02579; CHECK-NEXT: or %s0, 0, %s42580; CHECK-NEXT: or %s1, 0, %s52581; CHECK-NEXT: b.l.t (, %s10)2582 %5 = icmp eq i32 %0, %12583 %6 = select fast i1 %5, fp128 %2, fp128 %32584 ret fp128 %62585}2586 2587; Function Attrs: norecurse nounwind readnone2588define fp128 @select_cc_i64_quad(i64 %0, i64 %1, fp128 %2, fp128 %3) {2589; CHECK-LABEL: select_cc_i64_quad:2590; CHECK: # %bb.0:2591; CHECK-NEXT: cmpu.l %s0, %s0, %s12592; CHECK-NEXT: cmov.l.eq %s4, %s2, %s02593; CHECK-NEXT: cmov.l.eq %s5, %s3, %s02594; CHECK-NEXT: or %s0, 0, %s42595; CHECK-NEXT: or %s1, 0, %s52596; CHECK-NEXT: b.l.t (, %s10)2597 %5 = icmp eq i64 %0, %12598 %6 = select fast i1 %5, fp128 %2, fp128 %32599 ret fp128 %62600}2601 2602; Function Attrs: norecurse nounwind readnone2603define fp128 @select_cc_u64_quad(i64 %0, i64 %1, fp128 %2, fp128 %3) {2604; CHECK-LABEL: select_cc_u64_quad:2605; CHECK: # %bb.0:2606; CHECK-NEXT: cmpu.l %s0, %s0, %s12607; CHECK-NEXT: cmov.l.eq %s4, %s2, %s02608; CHECK-NEXT: cmov.l.eq %s5, %s3, %s02609; CHECK-NEXT: or %s0, 0, %s42610; CHECK-NEXT: or %s1, 0, %s52611; CHECK-NEXT: b.l.t (, %s10)2612 %5 = icmp eq i64 %0, %12613 %6 = select fast i1 %5, fp128 %2, fp128 %32614 ret fp128 %62615}2616 2617; Function Attrs: norecurse nounwind readnone2618define fp128 @select_cc_i128_quad(i128 %0, i128 %1, fp128 %2, fp128 %3) {2619; CHECK-LABEL: select_cc_i128_quad:2620; CHECK: # %bb.0:2621; CHECK-NEXT: xor %s1, %s1, %s32622; CHECK-NEXT: xor %s0, %s0, %s22623; CHECK-NEXT: or %s0, %s0, %s12624; CHECK-NEXT: cmov.l.eq %s6, %s4, %s02625; CHECK-NEXT: cmov.l.eq %s7, %s5, %s02626; CHECK-NEXT: or %s0, 0, %s62627; CHECK-NEXT: or %s1, 0, %s72628; CHECK-NEXT: b.l.t (, %s10)2629 %5 = icmp eq i128 %0, %12630 %6 = select fast i1 %5, fp128 %2, fp128 %32631 ret fp128 %62632}2633 2634; Function Attrs: norecurse nounwind readnone2635define fp128 @select_cc_u128_quad(i128 %0, i128 %1, fp128 %2, fp128 %3) {2636; CHECK-LABEL: select_cc_u128_quad:2637; CHECK: # %bb.0:2638; CHECK-NEXT: xor %s1, %s1, %s32639; CHECK-NEXT: xor %s0, %s0, %s22640; CHECK-NEXT: or %s0, %s0, %s12641; CHECK-NEXT: cmov.l.eq %s6, %s4, %s02642; CHECK-NEXT: cmov.l.eq %s7, %s5, %s02643; CHECK-NEXT: or %s0, 0, %s62644; CHECK-NEXT: or %s1, 0, %s72645; CHECK-NEXT: b.l.t (, %s10)2646 %5 = icmp eq i128 %0, %12647 %6 = select fast i1 %5, fp128 %2, fp128 %32648 ret fp128 %62649}2650 2651; Function Attrs: norecurse nounwind readnone2652define fp128 @select_cc_float_quad(float %0, float %1, fp128 %2, fp128 %3) {2653; CHECK-LABEL: select_cc_float_quad:2654; CHECK: # %bb.0:2655; CHECK-NEXT: fcmp.s %s0, %s0, %s12656; CHECK-NEXT: cmov.s.eq %s4, %s2, %s02657; CHECK-NEXT: cmov.s.eq %s5, %s3, %s02658; CHECK-NEXT: or %s0, 0, %s42659; CHECK-NEXT: or %s1, 0, %s52660; CHECK-NEXT: b.l.t (, %s10)2661 %5 = fcmp fast oeq float %0, %12662 %6 = select fast i1 %5, fp128 %2, fp128 %32663 ret fp128 %62664}2665 2666; Function Attrs: norecurse nounwind readnone2667define fp128 @select_cc_double_quad(double %0, double %1, fp128 %2, fp128 %3) {2668; CHECK-LABEL: select_cc_double_quad:2669; CHECK: # %bb.0:2670; CHECK-NEXT: fcmp.d %s0, %s0, %s12671; CHECK-NEXT: cmov.d.eq %s4, %s2, %s02672; CHECK-NEXT: cmov.d.eq %s5, %s3, %s02673; CHECK-NEXT: or %s0, 0, %s42674; CHECK-NEXT: or %s1, 0, %s52675; CHECK-NEXT: b.l.t (, %s10)2676 %5 = fcmp fast oeq double %0, %12677 %6 = select fast i1 %5, fp128 %2, fp128 %32678 ret fp128 %62679}2680 2681; Function Attrs: norecurse nounwind readnone2682define fp128 @select_cc_quad_quad(fp128 %0, fp128 %1, fp128 %2, fp128 %3) {2683; CHECK-LABEL: select_cc_quad_quad:2684; CHECK: # %bb.0:2685; CHECK-NEXT: fcmp.q %s0, %s0, %s22686; CHECK-NEXT: cmov.d.eq %s6, %s4, %s02687; CHECK-NEXT: cmov.d.eq %s7, %s5, %s02688; CHECK-NEXT: or %s0, 0, %s62689; CHECK-NEXT: or %s1, 0, %s72690; CHECK-NEXT: b.l.t (, %s10)2691 %5 = fcmp fast oeq fp128 %0, %12692 %6 = select fast i1 %5, fp128 %2, fp128 %32693 ret fp128 %62694}2695