brintos

brintos / llvm-project-archived public Read only

0
0
Text · 20.6 KiB · bb06445 Raw
625 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -verify-machineinstrs -mattr=+simd128 | FileCheck %s3 4; Test that vector selects of various varieties lower correctly.5 6target triple = "wasm32-unknown-unknown"7 8; ==============================================================================9; 16 x i810; ==============================================================================11define <16 x i8> @vselect_v16i8(<16 x i1> %c, <16 x i8> %x, <16 x i8> %y) {12; CHECK-LABEL: vselect_v16i8:13; CHECK:         .functype vselect_v16i8 (v128, v128, v128) -> (v128)14; CHECK-NEXT:  # %bb.0:15; CHECK-NEXT:    local.get 116; CHECK-NEXT:    local.get 217; CHECK-NEXT:    local.get 018; CHECK-NEXT:    i32.const 719; CHECK-NEXT:    i8x16.shl20; CHECK-NEXT:    i32.const 721; CHECK-NEXT:    i8x16.shr_s22; CHECK-NEXT:    v128.bitselect23; CHECK-NEXT:    # fallthrough-return24  %res = select <16 x i1> %c, <16 x i8> %x, <16 x i8> %y25  ret <16 x i8> %res26}27 28define <16 x i8> @vselect_cmp_v16i8(<16 x i8> %a, <16 x i8> %b,29; CHECK-LABEL: vselect_cmp_v16i8:30; CHECK:         .functype vselect_cmp_v16i8 (v128, v128, v128, v128) -> (v128)31; CHECK-NEXT:  # %bb.0:32; CHECK-NEXT:    local.get 233; CHECK-NEXT:    local.get 334; CHECK-NEXT:    local.get 035; CHECK-NEXT:    local.get 136; CHECK-NEXT:    i8x16.lt_s37; CHECK-NEXT:    v128.bitselect38; CHECK-NEXT:    # fallthrough-return39                                    <16 x i8> %x, <16 x i8> %y) {40  %c = icmp slt <16 x i8> %a, %b41  %res = select <16 x i1> %c, <16 x i8> %x, <16 x i8> %y42  ret <16 x i8> %res43}44 45define <16 x i8> @select_v16i8(i1 zeroext %c, <16 x i8> %x, <16 x i8> %y) {46; CHECK-LABEL: select_v16i8:47; CHECK:         .functype select_v16i8 (i32, v128, v128) -> (v128)48; CHECK-NEXT:  # %bb.0:49; CHECK-NEXT:    local.get 150; CHECK-NEXT:    local.get 251; CHECK-NEXT:    local.get 052; CHECK-NEXT:    v128.select53; CHECK-NEXT:    # fallthrough-return54  %res = select i1 %c, <16 x i8> %x, <16 x i8> %y55  ret <16 x i8> %res56}57 58define <16 x i8> @select_cmp_v16i8(i32 %i, <16 x i8> %x, <16 x i8> %y) {59; CHECK-LABEL: select_cmp_v16i8:60; CHECK:         .functype select_cmp_v16i8 (i32, v128, v128) -> (v128)61; CHECK-NEXT:  # %bb.0:62; CHECK-NEXT:    local.get 163; CHECK-NEXT:    local.get 264; CHECK-NEXT:    local.get 065; CHECK-NEXT:    i32.const 066; CHECK-NEXT:    i32.lt_s67; CHECK-NEXT:    v128.select68; CHECK-NEXT:    # fallthrough-return69  %c = icmp slt i32 %i, 070  %res = select i1 %c, <16 x i8> %x, <16 x i8> %y71  ret <16 x i8> %res72}73 74define <16 x i8> @select_ne_v16i8(i32 %i, <16 x i8> %x, <16 x i8> %y) {75; CHECK-LABEL: select_ne_v16i8:76; CHECK:         .functype select_ne_v16i8 (i32, v128, v128) -> (v128)77; CHECK-NEXT:  # %bb.0:78; CHECK-NEXT:    local.get 179; CHECK-NEXT:    local.get 280; CHECK-NEXT:    local.get 081; CHECK-NEXT:    v128.select82; CHECK-NEXT:    # fallthrough-return83  %c = icmp ne i32 %i, 084  %res = select i1 %c, <16 x i8> %x, <16 x i8> %y85  ret <16 x i8> %res86}87 88define <16 x i8> @select_eq_v16i8(i32 %i, <16 x i8> %x, <16 x i8> %y) {89; CHECK-LABEL: select_eq_v16i8:90; CHECK:         .functype select_eq_v16i8 (i32, v128, v128) -> (v128)91; CHECK-NEXT:  # %bb.0:92; CHECK-NEXT:    local.get 293; CHECK-NEXT:    local.get 194; CHECK-NEXT:    local.get 095; CHECK-NEXT:    v128.select96; CHECK-NEXT:    # fallthrough-return97  %c = icmp eq i32 %i, 098  %res = select i1 %c, <16 x i8> %x, <16 x i8> %y99  ret <16 x i8> %res100}101 102define <8 x i16> @vselect_v8i16(<8 x i1> %c, <8 x i16> %x, <8 x i16> %y) {103; CHECK-LABEL: vselect_v8i16:104; CHECK:         .functype vselect_v8i16 (v128, v128, v128) -> (v128)105; CHECK-NEXT:  # %bb.0:106; CHECK-NEXT:    local.get 1107; CHECK-NEXT:    local.get 2108; CHECK-NEXT:    local.get 0109; CHECK-NEXT:    i32.const 15110; CHECK-NEXT:    i16x8.shl111; CHECK-NEXT:    i32.const 15112; CHECK-NEXT:    i16x8.shr_s113; CHECK-NEXT:    v128.bitselect114; CHECK-NEXT:    # fallthrough-return115  %res = select <8 x i1> %c, <8 x i16> %x, <8 x i16> %y116  ret <8 x i16> %res117}118 119define <8 x i16> @vselect_cmp_v8i16(<8 x i16> %a, <8 x i16> %b,120; CHECK-LABEL: vselect_cmp_v8i16:121; CHECK:         .functype vselect_cmp_v8i16 (v128, v128, v128, v128) -> (v128)122; CHECK-NEXT:  # %bb.0:123; CHECK-NEXT:    local.get 2124; CHECK-NEXT:    local.get 3125; CHECK-NEXT:    local.get 0126; CHECK-NEXT:    local.get 1127; CHECK-NEXT:    i16x8.lt_s128; CHECK-NEXT:    v128.bitselect129; CHECK-NEXT:    # fallthrough-return130                                           <8 x i16> %x, <8 x i16> %y) {131  %c = icmp slt <8 x i16> %a, %b132  %res = select <8 x i1> %c, <8 x i16> %x, <8 x i16> %y133  ret <8 x i16> %res134}135 136define <8 x i16> @select_v8i16(i1 zeroext %c, <8 x i16> %x, <8 x i16> %y) {137; CHECK-LABEL: select_v8i16:138; CHECK:         .functype select_v8i16 (i32, v128, v128) -> (v128)139; CHECK-NEXT:  # %bb.0:140; CHECK-NEXT:    local.get 1141; CHECK-NEXT:    local.get 2142; CHECK-NEXT:    local.get 0143; CHECK-NEXT:    v128.select144; CHECK-NEXT:    # fallthrough-return145  %res = select i1 %c, <8 x i16> %x, <8 x i16> %y146  ret <8 x i16> %res147}148 149define <8 x i16> @select_cmp_v8i16(i32 %i, <8 x i16> %x, <8 x i16> %y) {150; CHECK-LABEL: select_cmp_v8i16:151; CHECK:         .functype select_cmp_v8i16 (i32, v128, v128) -> (v128)152; CHECK-NEXT:  # %bb.0:153; CHECK-NEXT:    local.get 1154; CHECK-NEXT:    local.get 2155; CHECK-NEXT:    local.get 0156; CHECK-NEXT:    i32.const 0157; CHECK-NEXT:    i32.lt_s158; CHECK-NEXT:    v128.select159; CHECK-NEXT:    # fallthrough-return160  %c = icmp slt i32 %i, 0161  %res = select i1 %c, <8 x i16> %x, <8 x i16> %y162  ret <8 x i16> %res163}164 165define <8 x i16> @select_ne_v8i16(i32 %i, <8 x i16> %x, <8 x i16> %y) {166; CHECK-LABEL: select_ne_v8i16:167; CHECK:         .functype select_ne_v8i16 (i32, v128, v128) -> (v128)168; CHECK-NEXT:  # %bb.0:169; CHECK-NEXT:    local.get 1170; CHECK-NEXT:    local.get 2171; CHECK-NEXT:    local.get 0172; CHECK-NEXT:    v128.select173; CHECK-NEXT:    # fallthrough-return174  %c = icmp ne i32 %i, 0175  %res = select i1 %c, <8 x i16> %x, <8 x i16> %y176  ret <8 x i16> %res177}178 179define <8 x i16> @select_eq_v8i16(i32 %i, <8 x i16> %x, <8 x i16> %y) {180; CHECK-LABEL: select_eq_v8i16:181; CHECK:         .functype select_eq_v8i16 (i32, v128, v128) -> (v128)182; CHECK-NEXT:  # %bb.0:183; CHECK-NEXT:    local.get 2184; CHECK-NEXT:    local.get 1185; CHECK-NEXT:    local.get 0186; CHECK-NEXT:    v128.select187; CHECK-NEXT:    # fallthrough-return188  %c = icmp eq i32 %i, 0189  %res = select i1 %c, <8 x i16> %x, <8 x i16> %y190  ret <8 x i16> %res191}192 193define <4 x i32> @vselect_v4i32(<4 x i1> %c, <4 x i32> %x, <4 x i32> %y) {194; CHECK-LABEL: vselect_v4i32:195; CHECK:         .functype vselect_v4i32 (v128, v128, v128) -> (v128)196; CHECK-NEXT:  # %bb.0:197; CHECK-NEXT:    local.get 1198; CHECK-NEXT:    local.get 2199; CHECK-NEXT:    local.get 0200; CHECK-NEXT:    i32.const 31201; CHECK-NEXT:    i32x4.shl202; CHECK-NEXT:    i32.const 31203; CHECK-NEXT:    i32x4.shr_s204; CHECK-NEXT:    v128.bitselect205; CHECK-NEXT:    # fallthrough-return206  %res = select <4 x i1> %c, <4 x i32> %x, <4 x i32> %y207  ret <4 x i32> %res208}209 210define <4 x i32> @vselect_cmp_v4i32(<4 x i32> %a, <4 x i32> %b,211; CHECK-LABEL: vselect_cmp_v4i32:212; CHECK:         .functype vselect_cmp_v4i32 (v128, v128, v128, v128) -> (v128)213; CHECK-NEXT:  # %bb.0:214; CHECK-NEXT:    local.get 2215; CHECK-NEXT:    local.get 3216; CHECK-NEXT:    local.get 0217; CHECK-NEXT:    local.get 1218; CHECK-NEXT:    i32x4.lt_s219; CHECK-NEXT:    v128.bitselect220; CHECK-NEXT:    # fallthrough-return221                                    <4 x i32> %x, <4 x i32> %y) {222  %c = icmp slt <4 x i32> %a, %b223  %res = select <4 x i1> %c, <4 x i32> %x, <4 x i32> %y224  ret <4 x i32> %res225}226 227define <4 x i32> @select_v4i32(i1 zeroext %c, <4 x i32> %x, <4 x i32> %y) {228; CHECK-LABEL: select_v4i32:229; CHECK:         .functype select_v4i32 (i32, v128, v128) -> (v128)230; CHECK-NEXT:  # %bb.0:231; CHECK-NEXT:    local.get 1232; CHECK-NEXT:    local.get 2233; CHECK-NEXT:    local.get 0234; CHECK-NEXT:    v128.select235; CHECK-NEXT:    # fallthrough-return236  %res = select i1 %c, <4 x i32> %x, <4 x i32> %y237  ret <4 x i32> %res238}239 240define <4 x i32> @select_cmp_v4i32(i32 %i, <4 x i32> %x, <4 x i32> %y) {241; CHECK-LABEL: select_cmp_v4i32:242; CHECK:         .functype select_cmp_v4i32 (i32, v128, v128) -> (v128)243; CHECK-NEXT:  # %bb.0:244; CHECK-NEXT:    local.get 1245; CHECK-NEXT:    local.get 2246; CHECK-NEXT:    local.get 0247; CHECK-NEXT:    i32.const 0248; CHECK-NEXT:    i32.lt_s249; CHECK-NEXT:    v128.select250; CHECK-NEXT:    # fallthrough-return251  %c = icmp slt i32 %i, 0252  %res = select i1 %c, <4 x i32> %x, <4 x i32> %y253  ret <4 x i32> %res254}255 256define <4 x i32> @select_ne_v4i32(i32 %i, <4 x i32> %x, <4 x i32> %y) {257; CHECK-LABEL: select_ne_v4i32:258; CHECK:         .functype select_ne_v4i32 (i32, v128, v128) -> (v128)259; CHECK-NEXT:  # %bb.0:260; CHECK-NEXT:    local.get 1261; CHECK-NEXT:    local.get 2262; CHECK-NEXT:    local.get 0263; CHECK-NEXT:    v128.select264; CHECK-NEXT:    # fallthrough-return265  %c = icmp ne i32 %i, 0266  %res = select i1 %c, <4 x i32> %x, <4 x i32> %y267  ret <4 x i32> %res268}269 270define <4 x i32> @select_eq_v4i32(i32 %i, <4 x i32> %x, <4 x i32> %y) {271; CHECK-LABEL: select_eq_v4i32:272; CHECK:         .functype select_eq_v4i32 (i32, v128, v128) -> (v128)273; CHECK-NEXT:  # %bb.0:274; CHECK-NEXT:    local.get 2275; CHECK-NEXT:    local.get 1276; CHECK-NEXT:    local.get 0277; CHECK-NEXT:    v128.select278; CHECK-NEXT:    # fallthrough-return279  %c = icmp eq i32 %i, 0280  %res = select i1 %c, <4 x i32> %x, <4 x i32> %y281  ret <4 x i32> %res282}283 284define <2 x i64> @vselect_v2i64(<2 x i1> %c, <2 x i64> %x, <2 x i64> %y) {285; CHECK-LABEL: vselect_v2i64:286; CHECK:         .functype vselect_v2i64 (v128, v128, v128) -> (v128)287; CHECK-NEXT:  # %bb.0:288; CHECK-NEXT:    local.get 1289; CHECK-NEXT:    local.get 2290; CHECK-NEXT:    local.get 0291; CHECK-NEXT:    i32.const 63292; CHECK-NEXT:    i64x2.shl293; CHECK-NEXT:    i32.const 63294; CHECK-NEXT:    i64x2.shr_s295; CHECK-NEXT:    v128.bitselect296; CHECK-NEXT:    # fallthrough-return297  %res = select <2 x i1> %c, <2 x i64> %x, <2 x i64> %y298  ret <2 x i64> %res299}300 301define <2 x i64> @vselect_cmp_v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %x, <2 x i64> %y) {302; CHECK-LABEL: vselect_cmp_v2i64:303; CHECK:         .functype vselect_cmp_v2i64 (v128, v128, v128, v128) -> (v128)304; CHECK-NEXT:  # %bb.0:305; CHECK-NEXT:    local.get 2306; CHECK-NEXT:    local.get 3307; CHECK-NEXT:    local.get 0308; CHECK-NEXT:    local.get 1309; CHECK-NEXT:    i64x2.lt_s310; CHECK-NEXT:    v128.bitselect311; CHECK-NEXT:    # fallthrough-return312  %c = icmp slt <2 x i64> %a, %b313  %res = select <2 x i1> %c, <2 x i64> %x, <2 x i64> %y314  ret <2 x i64> %res315}316 317define <2 x i64> @select_v2i64(i1 zeroext %c, <2 x i64> %x, <2 x i64> %y) {318; CHECK-LABEL: select_v2i64:319; CHECK:         .functype select_v2i64 (i32, v128, v128) -> (v128)320; CHECK-NEXT:  # %bb.0:321; CHECK-NEXT:    local.get 1322; CHECK-NEXT:    local.get 2323; CHECK-NEXT:    local.get 0324; CHECK-NEXT:    v128.select325; CHECK-NEXT:    # fallthrough-return326  %res = select i1 %c, <2 x i64> %x, <2 x i64> %y327  ret <2 x i64> %res328}329 330define <2 x i64> @select_cmp_v2i64(i32 %i, <2 x i64> %x, <2 x i64> %y) {331; CHECK-LABEL: select_cmp_v2i64:332; CHECK:         .functype select_cmp_v2i64 (i32, v128, v128) -> (v128)333; CHECK-NEXT:  # %bb.0:334; CHECK-NEXT:    local.get 1335; CHECK-NEXT:    local.get 2336; CHECK-NEXT:    local.get 0337; CHECK-NEXT:    i32.const 0338; CHECK-NEXT:    i32.lt_s339; CHECK-NEXT:    v128.select340; CHECK-NEXT:    # fallthrough-return341  %c = icmp slt i32 %i, 0342  %res = select i1 %c, <2 x i64> %x, <2 x i64> %y343  ret <2 x i64> %res344}345 346define <2 x i64> @select_ne_v2i64(i32 %i, <2 x i64> %x, <2 x i64> %y) {347; CHECK-LABEL: select_ne_v2i64:348; CHECK:         .functype select_ne_v2i64 (i32, v128, v128) -> (v128)349; CHECK-NEXT:  # %bb.0:350; CHECK-NEXT:    local.get 1351; CHECK-NEXT:    local.get 2352; CHECK-NEXT:    local.get 0353; CHECK-NEXT:    v128.select354; CHECK-NEXT:    # fallthrough-return355  %c = icmp ne i32 %i, 0356  %res = select i1 %c, <2 x i64> %x, <2 x i64> %y357  ret <2 x i64> %res358}359 360define <2 x i64> @select_eq_v2i64(i32 %i, <2 x i64> %x, <2 x i64> %y) {361; CHECK-LABEL: select_eq_v2i64:362; CHECK:         .functype select_eq_v2i64 (i32, v128, v128) -> (v128)363; CHECK-NEXT:  # %bb.0:364; CHECK-NEXT:    local.get 2365; CHECK-NEXT:    local.get 1366; CHECK-NEXT:    local.get 0367; CHECK-NEXT:    v128.select368; CHECK-NEXT:    # fallthrough-return369  %c = icmp eq i32 %i, 0370  %res = select i1 %c, <2 x i64> %x, <2 x i64> %y371  ret <2 x i64> %res372}373 374define <4 x float> @vselect_v4f32(<4 x i1> %c, <4 x float> %x, <4 x float> %y) {375; CHECK-LABEL: vselect_v4f32:376; CHECK:         .functype vselect_v4f32 (v128, v128, v128) -> (v128)377; CHECK-NEXT:  # %bb.0:378; CHECK-NEXT:    local.get 1379; CHECK-NEXT:    local.get 2380; CHECK-NEXT:    local.get 0381; CHECK-NEXT:    i32.const 31382; CHECK-NEXT:    i32x4.shl383; CHECK-NEXT:    i32.const 31384; CHECK-NEXT:    i32x4.shr_s385; CHECK-NEXT:    v128.bitselect386; CHECK-NEXT:    # fallthrough-return387  %res = select <4 x i1> %c, <4 x float> %x, <4 x float> %y388  ret <4 x float> %res389}390 391define <4 x float> @vselect_cmp_v4f32(<4 x float> %a, <4 x float> %b,392; CHECK-LABEL: vselect_cmp_v4f32:393; CHECK:         .functype vselect_cmp_v4f32 (v128, v128, v128, v128) -> (v128)394; CHECK-NEXT:  # %bb.0:395; CHECK-NEXT:    local.get 2396; CHECK-NEXT:    local.get 3397; CHECK-NEXT:    local.get 0398; CHECK-NEXT:    local.get 1399; CHECK-NEXT:    f32x4.lt400; CHECK-NEXT:    v128.bitselect401; CHECK-NEXT:    # fallthrough-return402                                      <4 x float> %x, <4 x float> %y) {403  %c = fcmp olt <4 x float> %a, %b404  %res = select <4 x i1> %c, <4 x float> %x, <4 x float> %y405  ret <4 x float> %res406}407 408define <4 x float> @select_v4f32(i1 zeroext %c, <4 x float> %x, <4 x float> %y) {409; CHECK-LABEL: select_v4f32:410; CHECK:         .functype select_v4f32 (i32, v128, v128) -> (v128)411; CHECK-NEXT:  # %bb.0:412; CHECK-NEXT:    local.get 1413; CHECK-NEXT:    local.get 2414; CHECK-NEXT:    local.get 0415; CHECK-NEXT:    v128.select416; CHECK-NEXT:    # fallthrough-return417  %res = select i1 %c, <4 x float> %x, <4 x float> %y418  ret <4 x float> %res419}420 421define <4 x float> @select_cmp_v4f32(i32 %i, <4 x float> %x, <4 x float> %y) {422; CHECK-LABEL: select_cmp_v4f32:423; CHECK:         .functype select_cmp_v4f32 (i32, v128, v128) -> (v128)424; CHECK-NEXT:  # %bb.0:425; CHECK-NEXT:    local.get 1426; CHECK-NEXT:    local.get 2427; CHECK-NEXT:    local.get 0428; CHECK-NEXT:    i32.const 0429; CHECK-NEXT:    i32.lt_s430; CHECK-NEXT:    v128.select431; CHECK-NEXT:    # fallthrough-return432  %c = icmp slt i32 %i, 0433  %res = select i1 %c, <4 x float> %x, <4 x float> %y434  ret <4 x float> %res435}436 437define <4 x float> @select_ne_v4f32(i32 %i, <4 x float> %x, <4 x float> %y) {438; CHECK-LABEL: select_ne_v4f32:439; CHECK:         .functype select_ne_v4f32 (i32, v128, v128) -> (v128)440; CHECK-NEXT:  # %bb.0:441; CHECK-NEXT:    local.get 1442; CHECK-NEXT:    local.get 2443; CHECK-NEXT:    local.get 0444; CHECK-NEXT:    v128.select445; CHECK-NEXT:    # fallthrough-return446  %c = icmp ne i32 %i, 0447  %res = select i1 %c, <4 x float> %x, <4 x float> %y448  ret <4 x float> %res449}450 451define <4 x float> @select_eq_v4f32(i32 %i, <4 x float> %x, <4 x float> %y) {452; CHECK-LABEL: select_eq_v4f32:453; CHECK:         .functype select_eq_v4f32 (i32, v128, v128) -> (v128)454; CHECK-NEXT:  # %bb.0:455; CHECK-NEXT:    local.get 2456; CHECK-NEXT:    local.get 1457; CHECK-NEXT:    local.get 0458; CHECK-NEXT:    v128.select459; CHECK-NEXT:    # fallthrough-return460  %c = icmp eq i32 %i, 0461  %res = select i1 %c, <4 x float> %x, <4 x float> %y462  ret <4 x float> %res463}464 465define <2 x double> @vselect_v2f64(<2 x i1> %c, <2 x double> %x, <2 x double> %y) {466; CHECK-LABEL: vselect_v2f64:467; CHECK:         .functype vselect_v2f64 (v128, v128, v128) -> (v128)468; CHECK-NEXT:  # %bb.0:469; CHECK-NEXT:    local.get 1470; CHECK-NEXT:    local.get 2471; CHECK-NEXT:    local.get 0472; CHECK-NEXT:    i32.const 63473; CHECK-NEXT:    i64x2.shl474; CHECK-NEXT:    i32.const 63475; CHECK-NEXT:    i64x2.shr_s476; CHECK-NEXT:    v128.bitselect477; CHECK-NEXT:    # fallthrough-return478  %res = select <2 x i1> %c, <2 x double> %x, <2 x double> %y479  ret <2 x double> %res480}481 482define <2 x double> @vselect_cmp_v2f64(<2 x double> %a, <2 x double> %b,483; CHECK-LABEL: vselect_cmp_v2f64:484; CHECK:         .functype vselect_cmp_v2f64 (v128, v128, v128, v128) -> (v128)485; CHECK-NEXT:  # %bb.0:486; CHECK-NEXT:    local.get 2487; CHECK-NEXT:    local.get 3488; CHECK-NEXT:    local.get 0489; CHECK-NEXT:    local.get 1490; CHECK-NEXT:    f64x2.lt491; CHECK-NEXT:    v128.bitselect492; CHECK-NEXT:    # fallthrough-return493                                       <2 x double> %x, <2 x double> %y) {494  %c = fcmp olt <2 x double> %a, %b495  %res = select <2 x i1> %c, <2 x double> %x, <2 x double> %y496  ret <2 x double> %res497}498 499define <2 x double> @select_v2f64(i1 zeroext %c, <2 x double> %x, <2 x double> %y) {500; CHECK-LABEL: select_v2f64:501; CHECK:         .functype select_v2f64 (i32, v128, v128) -> (v128)502; CHECK-NEXT:  # %bb.0:503; CHECK-NEXT:    local.get 1504; CHECK-NEXT:    local.get 2505; CHECK-NEXT:    local.get 0506; CHECK-NEXT:    v128.select507; CHECK-NEXT:    # fallthrough-return508  %res = select i1 %c, <2 x double> %x, <2 x double> %y509  ret <2 x double> %res510}511 512define <2 x double> @select_cmp_v2f64(i32 %i, <2 x double> %x, <2 x double> %y) {513; CHECK-LABEL: select_cmp_v2f64:514; CHECK:         .functype select_cmp_v2f64 (i32, v128, v128) -> (v128)515; CHECK-NEXT:  # %bb.0:516; CHECK-NEXT:    local.get 1517; CHECK-NEXT:    local.get 2518; CHECK-NEXT:    local.get 0519; CHECK-NEXT:    i32.const 0520; CHECK-NEXT:    i32.lt_s521; CHECK-NEXT:    v128.select522; CHECK-NEXT:    # fallthrough-return523  %c = icmp slt i32 %i, 0524  %res = select i1 %c, <2 x double> %x, <2 x double> %y525  ret <2 x double> %res526}527 528define <2 x double> @select_ne_v2f64(i32 %i, <2 x double> %x, <2 x double> %y) {529; CHECK-LABEL: select_ne_v2f64:530; CHECK:         .functype select_ne_v2f64 (i32, v128, v128) -> (v128)531; CHECK-NEXT:  # %bb.0:532; CHECK-NEXT:    local.get 1533; CHECK-NEXT:    local.get 2534; CHECK-NEXT:    local.get 0535; CHECK-NEXT:    v128.select536; CHECK-NEXT:    # fallthrough-return537  %c = icmp ne i32 %i, 0538  %res = select i1 %c, <2 x double> %x, <2 x double> %y539  ret <2 x double> %res540}541 542define <2 x double> @select_eq_v2f64(i32 %i, <2 x double> %x, <2 x double> %y) {543; CHECK-LABEL: select_eq_v2f64:544; CHECK:         .functype select_eq_v2f64 (i32, v128, v128) -> (v128)545; CHECK-NEXT:  # %bb.0:546; CHECK-NEXT:    local.get 2547; CHECK-NEXT:    local.get 1548; CHECK-NEXT:    local.get 0549; CHECK-NEXT:    v128.select550; CHECK-NEXT:    # fallthrough-return551  %c = icmp eq i32 %i, 0552  %res = select i1 %c, <2 x double> %x, <2 x double> %y553  ret <2 x double> %res554}555 556define <4 x i32> @select_splat_first_zero_and_icmp(<4 x i32> %x) {557; CHECK-LABEL: select_splat_first_zero_and_icmp:558; CHECK:         .functype select_splat_first_zero_and_icmp (v128) -> (v128)559; CHECK-NEXT:  # %bb.0:560; CHECK-NEXT:    local.get 0561; CHECK-NEXT:    v128.const 2139095040, 2139095040, 2139095040, 2139095040562; CHECK-NEXT:    v128.and563; CHECK-NEXT:    v128.const 0, 0, 0, 0564; CHECK-NEXT:    i32x4.ne565; CHECK-NEXT:    local.get 0566; CHECK-NEXT:    v128.and567; CHECK-NEXT:    # fallthrough-return568  %a = and <4 x i32> %x, splat (i32 2139095040)569  %c = icmp eq <4 x i32> %a, zeroinitializer570  %res = select <4 x i1> %c, <4 x i32> zeroinitializer, <4 x i32> %x571  ret <4 x i32> %res572}573 574define <4 x i32> @select_splat_second_zero_and_icmp(<4 x i32> %x) {575; CHECK-LABEL: select_splat_second_zero_and_icmp:576; CHECK:         .functype select_splat_second_zero_and_icmp (v128) -> (v128)577; CHECK-NEXT:  # %bb.0:578; CHECK-NEXT:    local.get 0579; CHECK-NEXT:    v128.const 2139095040, 2139095040, 2139095040, 2139095040580; CHECK-NEXT:    v128.and581; CHECK-NEXT:    v128.const 0, 0, 0, 0582; CHECK-NEXT:    i32x4.eq583; CHECK-NEXT:    local.get 0584; CHECK-NEXT:    v128.and585; CHECK-NEXT:    # fallthrough-return586  %a = and <4 x i32> %x, splat (i32 2139095040)587  %c = icmp eq <4 x i32> %a, zeroinitializer588  %res = select <4 x i1> %c, <4 x i32> %x, <4 x i32> zeroinitializer589  ret <4 x i32> %res590}591 592define <4 x i32> @select_splat_first_zero_cond_input(<4 x i1> %c, <4 x i32> %x) {593; CHECK-LABEL: select_splat_first_zero_cond_input:594; CHECK:         .functype select_splat_first_zero_cond_input (v128, v128) -> (v128)595; CHECK-NEXT:  # %bb.0:596; CHECK-NEXT:    v128.const 0, 0, 0, 0597; CHECK-NEXT:    local.get 1598; CHECK-NEXT:    local.get 0599; CHECK-NEXT:    i32.const 31600; CHECK-NEXT:    i32x4.shl601; CHECK-NEXT:    i32.const 31602; CHECK-NEXT:    i32x4.shr_s603; CHECK-NEXT:    v128.bitselect604; CHECK-NEXT:    # fallthrough-return605  %res = select <4 x i1> %c, <4 x i32> zeroinitializer, <4 x i32> %x606  ret <4 x i32> %res607}608 609define <4 x i32> @select_splat_second_zero_cond_input(<4 x i1> %c, <4 x i32> %x) {610; CHECK-LABEL: select_splat_second_zero_cond_input:611; CHECK:         .functype select_splat_second_zero_cond_input (v128, v128) -> (v128)612; CHECK-NEXT:  # %bb.0:613; CHECK-NEXT:    local.get 0614; CHECK-NEXT:    i32.const 31615; CHECK-NEXT:    i32x4.shl616; CHECK-NEXT:    i32.const 31617; CHECK-NEXT:    i32x4.shr_s618; CHECK-NEXT:    local.get 1619; CHECK-NEXT:    v128.and620; CHECK-NEXT:    # fallthrough-return621  %res = select <4 x i1> %c, <4 x i32> %x, <4 x i32> zeroinitializer622  ret <4 x i32> %res623}624 625