brintos

brintos / llvm-project-archived public Read only

0
0
Text · 19.3 KiB · 368f30f Raw
592 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;; Check that masked shift counts are optimized out.5 6target triple = "wasm32-unknown-unknown"7 8define i32 @shl_i32(i32 %v, i32 %x) {9; CHECK-LABEL: shl_i32:10; CHECK:         .functype shl_i32 (i32, i32) -> (i32)11; CHECK-NEXT:  # %bb.0:12; CHECK-NEXT:    local.get 013; CHECK-NEXT:    local.get 114; CHECK-NEXT:    i32.shl15; CHECK-NEXT:    # fallthrough-return16  %m = and i32 %x, 3117  %a = shl i32 %v, %m18  ret i32 %a19}20 21define i64 @shl_i64_zext(i64 %v, i32 %x) {22; CHECK-LABEL: shl_i64_zext:23; CHECK:         .functype shl_i64_zext (i64, i32) -> (i64)24; CHECK-NEXT:  # %bb.0:25; CHECK-NEXT:    local.get 026; CHECK-NEXT:    local.get 127; CHECK-NEXT:    i64.extend_i32_u28; CHECK-NEXT:    i64.shl29; CHECK-NEXT:    # fallthrough-return30  %m = and i32 %x, 6331  %z = zext i32 %m to i6432  %a = shl i64 %v, %z33  ret i64 %a34}35 36define i32 @sra_i32(i32 %v, i32 %x) {37; CHECK-LABEL: sra_i32:38; CHECK:         .functype sra_i32 (i32, i32) -> (i32)39; CHECK-NEXT:  # %bb.0:40; CHECK-NEXT:    local.get 041; CHECK-NEXT:    local.get 142; CHECK-NEXT:    i32.shr_s43; CHECK-NEXT:    # fallthrough-return44  %m = and i32 %x, 3145  %a = ashr i32 %v, %m46  ret i32 %a47}48 49define i32 @srl_i32(i32 %v, i32 %x) {50; CHECK-LABEL: srl_i32:51; CHECK:         .functype srl_i32 (i32, i32) -> (i32)52; CHECK-NEXT:  # %bb.0:53; CHECK-NEXT:    local.get 054; CHECK-NEXT:    local.get 155; CHECK-NEXT:    i32.shr_u56; CHECK-NEXT:    # fallthrough-return57  %m = and i32 %x, 3158  %a = lshr i32 %v, %m59  ret i32 %a60}61 62define i64 @shl_i64(i64 %v, i64 %x) {63; CHECK-LABEL: shl_i64:64; CHECK:         .functype shl_i64 (i64, i64) -> (i64)65; CHECK-NEXT:  # %bb.0:66; CHECK-NEXT:    local.get 067; CHECK-NEXT:    local.get 168; CHECK-NEXT:    i64.shl69; CHECK-NEXT:    # fallthrough-return70  %m = and i64 %x, 6371  %a = shl i64 %v, %m72  ret i64 %a73}74 75define i64 @sra_i64(i64 %v, i64 %x) {76; CHECK-LABEL: sra_i64:77; CHECK:         .functype sra_i64 (i64, i64) -> (i64)78; CHECK-NEXT:  # %bb.0:79; CHECK-NEXT:    local.get 080; CHECK-NEXT:    local.get 181; CHECK-NEXT:    i64.shr_s82; CHECK-NEXT:    # fallthrough-return83  %m = and i64 %x, 6384  %a = ashr i64 %v, %m85  ret i64 %a86}87 88define i64 @srl_i64(i64 %v, i64 %x) {89; CHECK-LABEL: srl_i64:90; CHECK:         .functype srl_i64 (i64, i64) -> (i64)91; CHECK-NEXT:  # %bb.0:92; CHECK-NEXT:    local.get 093; CHECK-NEXT:    local.get 194; CHECK-NEXT:    i64.shr_u95; CHECK-NEXT:    # fallthrough-return96  %m = and i64 %x, 6397  %a = lshr i64 %v, %m98  ret i64 %a99}100 101define <16 x i8> @shl_v16i8(<16 x i8> %v, i8 %x) {102; CHECK-LABEL: shl_v16i8:103; CHECK:         .functype shl_v16i8 (v128, i32) -> (v128)104; CHECK-NEXT:  # %bb.0:105; CHECK-NEXT:    local.get 0106; CHECK-NEXT:    local.get 1107; CHECK-NEXT:    i8x16.shl108; CHECK-NEXT:    # fallthrough-return109  %m = and i8 %x, 7110  %t = insertelement <16 x i8> undef, i8 %m, i32 0111  %s = shufflevector <16 x i8> %t, <16 x i8> undef,112    <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0,113                i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>114  %a = shl <16 x i8> %v, %s115  ret <16 x i8> %a116}117 118define <16 x i8> @shl_v16i8_late(<16 x i8> %v, i8 %x) {119; CHECK-LABEL: shl_v16i8_late:120; CHECK:         .functype shl_v16i8_late (v128, i32) -> (v128)121; CHECK-NEXT:  # %bb.0:122; CHECK-NEXT:    local.get 0123; CHECK-NEXT:    local.get 1124; CHECK-NEXT:    i8x16.shl125; CHECK-NEXT:    # fallthrough-return126  %t = insertelement <16 x i8> undef, i8 %x, i32 0127  %s = shufflevector <16 x i8> %t, <16 x i8> undef,128    <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0,129                i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>130  %m = and <16 x i8> %s, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7,131                          i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>132  %a = shl <16 x i8> %v, %m133  ret <16 x i8> %a134}135 136define <16 x i8> @ashr_v16i8(<16 x i8> %v, i8 %x) {137; CHECK-LABEL: ashr_v16i8:138; CHECK:         .functype ashr_v16i8 (v128, i32) -> (v128)139; CHECK-NEXT:  # %bb.0:140; CHECK-NEXT:    local.get 0141; CHECK-NEXT:    local.get 1142; CHECK-NEXT:    i8x16.shr_s143; CHECK-NEXT:    # fallthrough-return144  %m = and i8 %x, 7145  %t = insertelement <16 x i8> undef, i8 %m, i32 0146  %s = shufflevector <16 x i8> %t, <16 x i8> undef,147    <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0,148                i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>149  %a = ashr <16 x i8> %v, %s150  ret <16 x i8> %a151}152 153define <16 x i8> @ashr_v16i8_late(<16 x i8> %v, i8 %x) {154; CHECK-LABEL: ashr_v16i8_late:155; CHECK:         .functype ashr_v16i8_late (v128, i32) -> (v128)156; CHECK-NEXT:  # %bb.0:157; CHECK-NEXT:    local.get 0158; CHECK-NEXT:    local.get 1159; CHECK-NEXT:    i8x16.shr_s160; CHECK-NEXT:    # fallthrough-return161  %t = insertelement <16 x i8> undef, i8 %x, i32 0162  %s = shufflevector <16 x i8> %t, <16 x i8> undef,163    <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0,164                i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>165  %m = and <16 x i8> %s, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7,166                          i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>167  %a = ashr <16 x i8> %v, %m168  ret <16 x i8> %a169}170 171define <16 x i8> @lshr_v16i8(<16 x i8> %v, i8 %x) {172; CHECK-LABEL: lshr_v16i8:173; CHECK:         .functype lshr_v16i8 (v128, i32) -> (v128)174; CHECK-NEXT:  # %bb.0:175; CHECK-NEXT:    local.get 0176; CHECK-NEXT:    local.get 1177; CHECK-NEXT:    i8x16.shr_u178; CHECK-NEXT:    # fallthrough-return179  %m = and i8 %x, 7180  %t = insertelement <16 x i8> undef, i8 %m, i32 0181  %s = shufflevector <16 x i8> %t, <16 x i8> undef,182    <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0,183                i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>184  %a = lshr <16 x i8> %v, %s185  ret <16 x i8> %a186}187 188define <16 x i8> @lshr_v16i8_late(<16 x i8> %v, i8 %x) {189; CHECK-LABEL: lshr_v16i8_late:190; CHECK:         .functype lshr_v16i8_late (v128, i32) -> (v128)191; CHECK-NEXT:  # %bb.0:192; CHECK-NEXT:    local.get 0193; CHECK-NEXT:    local.get 1194; CHECK-NEXT:    i8x16.shr_u195; CHECK-NEXT:    # fallthrough-return196  %t = insertelement <16 x i8> undef, i8 %x, i32 0197  %s = shufflevector <16 x i8> %t, <16 x i8> undef,198    <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0,199                i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>200  %m = and <16 x i8> %s, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7,201                          i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>202  %a = lshr <16 x i8> %v, %m203  ret <16 x i8> %a204}205 206define <8 x i16> @shl_v8i16(<8 x i16> %v, i16 %x) {207; CHECK-LABEL: shl_v8i16:208; CHECK:         .functype shl_v8i16 (v128, i32) -> (v128)209; CHECK-NEXT:  # %bb.0:210; CHECK-NEXT:    local.get 0211; CHECK-NEXT:    local.get 1212; CHECK-NEXT:    i16x8.shl213; CHECK-NEXT:    # fallthrough-return214  %m = and i16 %x, 15215  %t = insertelement <8 x i16> undef, i16 %m, i32 0216  %s = shufflevector <8 x i16> %t, <8 x i16> undef,217    <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>218  %a = shl <8 x i16> %v, %s219  ret <8 x i16> %a220}221 222define <8 x i16> @shl_v8i16_late(<8 x i16> %v, i16 %x) {223; CHECK-LABEL: shl_v8i16_late:224; CHECK:         .functype shl_v8i16_late (v128, i32) -> (v128)225; CHECK-NEXT:  # %bb.0:226; CHECK-NEXT:    local.get 0227; CHECK-NEXT:    local.get 1228; CHECK-NEXT:    i16x8.shl229; CHECK-NEXT:    # fallthrough-return230  %t = insertelement <8 x i16> undef, i16 %x, i32 0231  %s = shufflevector <8 x i16> %t, <8 x i16> undef,232    <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>233  %m = and <8 x i16> %s,234    <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>235  %a = shl <8 x i16> %v, %m236  ret <8 x i16> %a237}238 239define <8 x i16> @ashr_v8i16(<8 x i16> %v, i16 %x) {240; CHECK-LABEL: ashr_v8i16:241; CHECK:         .functype ashr_v8i16 (v128, i32) -> (v128)242; CHECK-NEXT:  # %bb.0:243; CHECK-NEXT:    local.get 0244; CHECK-NEXT:    local.get 1245; CHECK-NEXT:    i16x8.shr_s246; CHECK-NEXT:    # fallthrough-return247  %m = and i16 %x, 15248  %t = insertelement <8 x i16> undef, i16 %m, i32 0249  %s = shufflevector <8 x i16> %t, <8 x i16> undef,250    <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>251  %a = ashr <8 x i16> %v, %s252  ret <8 x i16> %a253}254 255define <8 x i16> @ashr_v8i16_late(<8 x i16> %v, i16 %x) {256; CHECK-LABEL: ashr_v8i16_late:257; CHECK:         .functype ashr_v8i16_late (v128, i32) -> (v128)258; CHECK-NEXT:  # %bb.0:259; CHECK-NEXT:    local.get 0260; CHECK-NEXT:    local.get 1261; CHECK-NEXT:    i16x8.shr_s262; CHECK-NEXT:    # fallthrough-return263  %t = insertelement <8 x i16> undef, i16 %x, i32 0264  %s = shufflevector <8 x i16> %t, <8 x i16> undef,265    <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>266  %m = and <8 x i16> %s,267    <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>268  %a = ashr <8 x i16> %v, %m269  ret <8 x i16> %a270}271 272define <8 x i16> @lshr_v8i16(<8 x i16> %v, i16 %x) {273; CHECK-LABEL: lshr_v8i16:274; CHECK:         .functype lshr_v8i16 (v128, i32) -> (v128)275; CHECK-NEXT:  # %bb.0:276; CHECK-NEXT:    local.get 0277; CHECK-NEXT:    local.get 1278; CHECK-NEXT:    i16x8.shr_u279; CHECK-NEXT:    # fallthrough-return280  %m = and i16 %x, 15281  %t = insertelement <8 x i16> undef, i16 %m, i32 0282  %s = shufflevector <8 x i16> %t, <8 x i16> undef,283    <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>284  %a = lshr <8 x i16> %v, %s285  ret <8 x i16> %a286}287 288define <8 x i16> @lshr_v8i16_late(<8 x i16> %v, i16 %x) {289; CHECK-LABEL: lshr_v8i16_late:290; CHECK:         .functype lshr_v8i16_late (v128, i32) -> (v128)291; CHECK-NEXT:  # %bb.0:292; CHECK-NEXT:    local.get 0293; CHECK-NEXT:    local.get 1294; CHECK-NEXT:    i16x8.shr_u295; CHECK-NEXT:    # fallthrough-return296  %t = insertelement <8 x i16> undef, i16 %x, i32 0297  %s = shufflevector <8 x i16> %t, <8 x i16> undef,298    <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>299  %m = and <8 x i16> %s,300    <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>301  %a = lshr <8 x i16> %v, %m302  ret <8 x i16> %a303}304 305define <4 x i32> @shl_v4i32(<4 x i32> %v, i32 %x) {306; CHECK-LABEL: shl_v4i32:307; CHECK:         .functype shl_v4i32 (v128, i32) -> (v128)308; CHECK-NEXT:  # %bb.0:309; CHECK-NEXT:    local.get 0310; CHECK-NEXT:    local.get 1311; CHECK-NEXT:    i32x4.shl312; CHECK-NEXT:    # fallthrough-return313  %m = and i32 %x, 31314  %t = insertelement <4 x i32> undef, i32 %m, i32 0315  %s = shufflevector <4 x i32> %t, <4 x i32> undef,316    <4 x i32> <i32 0, i32 0, i32 0, i32 0>317  %a = shl <4 x i32> %v, %s318  ret <4 x i32> %a319}320 321define <4 x i32> @shl_v4i32_late(<4 x i32> %v, i32 %x) {322; CHECK-LABEL: shl_v4i32_late:323; CHECK:         .functype shl_v4i32_late (v128, i32) -> (v128)324; CHECK-NEXT:  # %bb.0:325; CHECK-NEXT:    local.get 0326; CHECK-NEXT:    local.get 1327; CHECK-NEXT:    i32x4.shl328; CHECK-NEXT:    # fallthrough-return329  %t = insertelement <4 x i32> undef, i32 %x, i32 0330  %s = shufflevector <4 x i32> %t, <4 x i32> undef,331    <4 x i32> <i32 0, i32 0, i32 0, i32 0>332  %m = and <4 x i32> %s, <i32 31, i32 31, i32 31, i32 31>333  %a = shl <4 x i32> %v, %m334  ret <4 x i32> %a335}336 337define <4 x i32> @ashr_v4i32(<4 x i32> %v, i32 %x) {338; CHECK-LABEL: ashr_v4i32:339; CHECK:         .functype ashr_v4i32 (v128, i32) -> (v128)340; CHECK-NEXT:  # %bb.0:341; CHECK-NEXT:    local.get 0342; CHECK-NEXT:    local.get 1343; CHECK-NEXT:    i32x4.shr_s344; CHECK-NEXT:    # fallthrough-return345  %m = and i32 %x, 31346  %t = insertelement <4 x i32> undef, i32 %m, i32 0347  %s = shufflevector <4 x i32> %t, <4 x i32> undef,348    <4 x i32> <i32 0, i32 0, i32 0, i32 0>349  %a = ashr <4 x i32> %v, %s350  ret <4 x i32> %a351}352 353define <4 x i32> @ashr_v4i32_late(<4 x i32> %v, i32 %x) {354; CHECK-LABEL: ashr_v4i32_late:355; CHECK:         .functype ashr_v4i32_late (v128, i32) -> (v128)356; CHECK-NEXT:  # %bb.0:357; CHECK-NEXT:    local.get 0358; CHECK-NEXT:    local.get 1359; CHECK-NEXT:    i32x4.shr_s360; CHECK-NEXT:    # fallthrough-return361  %t = insertelement <4 x i32> undef, i32 %x, i32 0362  %s = shufflevector <4 x i32> %t, <4 x i32> undef,363    <4 x i32> <i32 0, i32 0, i32 0, i32 0>364  %m = and <4 x i32> %s, <i32 31, i32 31, i32 31, i32 31>365  %a = ashr <4 x i32> %v, %m366  ret <4 x i32> %a367}368 369define <4 x i32> @lshr_v4i32(<4 x i32> %v, i32 %x) {370; CHECK-LABEL: lshr_v4i32:371; CHECK:         .functype lshr_v4i32 (v128, i32) -> (v128)372; CHECK-NEXT:  # %bb.0:373; CHECK-NEXT:    local.get 0374; CHECK-NEXT:    local.get 1375; CHECK-NEXT:    i32x4.shr_u376; CHECK-NEXT:    # fallthrough-return377  %m = and i32 %x, 31378  %t = insertelement <4 x i32> undef, i32 %m, i32 0379  %s = shufflevector <4 x i32> %t, <4 x i32> undef,380    <4 x i32> <i32 0, i32 0, i32 0, i32 0>381  %a = lshr <4 x i32> %v, %s382  ret <4 x i32> %a383}384 385define <4 x i32> @lshr_v4i32_late(<4 x i32> %v, i32 %x) {386; CHECK-LABEL: lshr_v4i32_late:387; CHECK:         .functype lshr_v4i32_late (v128, i32) -> (v128)388; CHECK-NEXT:  # %bb.0:389; CHECK-NEXT:    local.get 0390; CHECK-NEXT:    local.get 1391; CHECK-NEXT:    i32x4.shr_u392; CHECK-NEXT:    # fallthrough-return393  %t = insertelement <4 x i32> undef, i32 %x, i32 0394  %s = shufflevector <4 x i32> %t, <4 x i32> undef,395    <4 x i32> <i32 0, i32 0, i32 0, i32 0>396  %m = and <4 x i32> %s, <i32 31, i32 31, i32 31, i32 31>397  %a = lshr <4 x i32> %v, %m398  ret <4 x i32> %a399}400 401define <2 x i64> @shl_v2i64(<2 x i64> %v, i64 %x) {402; CHECK-LABEL: shl_v2i64:403; CHECK:         .functype shl_v2i64 (v128, i64) -> (v128)404; CHECK-NEXT:  # %bb.0:405; CHECK-NEXT:    local.get 0406; CHECK-NEXT:    local.get 1407; CHECK-NEXT:    i32.wrap_i64408; CHECK-NEXT:    i64x2.shl409; CHECK-NEXT:    # fallthrough-return410  %m = and i64 %x, 63411  %t = insertelement <2 x i64> undef, i64 %m, i32 0412  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>413  %a = shl <2 x i64> %v, %s414  ret <2 x i64> %a415}416 417define <2 x i64> @shl_v2i64_late(<2 x i64> %v, i64 %x) {418; CHECK-LABEL: shl_v2i64_late:419; CHECK:         .functype shl_v2i64_late (v128, i64) -> (v128)420; CHECK-NEXT:  # %bb.0:421; CHECK-NEXT:    local.get 0422; CHECK-NEXT:    local.get 1423; CHECK-NEXT:    i32.wrap_i64424; CHECK-NEXT:    i64x2.shl425; CHECK-NEXT:    # fallthrough-return426  %t = insertelement <2 x i64> undef, i64 %x, i32 0427  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>428  %m = and <2 x i64> %s, <i64 63, i64 63>429  %a = shl <2 x i64> %v, %m430  ret <2 x i64> %a431}432 433define <2 x i64> @ashr_v2i64(<2 x i64> %v, i64 %x) {434; CHECK-LABEL: ashr_v2i64:435; CHECK:         .functype ashr_v2i64 (v128, i64) -> (v128)436; CHECK-NEXT:  # %bb.0:437; CHECK-NEXT:    local.get 0438; CHECK-NEXT:    local.get 1439; CHECK-NEXT:    i32.wrap_i64440; CHECK-NEXT:    i64x2.shr_s441; CHECK-NEXT:    # fallthrough-return442  %m = and i64 %x, 63443  %t = insertelement <2 x i64> undef, i64 %m, i32 0444  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>445  %a = ashr <2 x i64> %v, %s446  ret <2 x i64> %a447}448 449define <2 x i64> @ashr_v2i64_late(<2 x i64> %v, i64 %x) {450; CHECK-LABEL: ashr_v2i64_late:451; CHECK:         .functype ashr_v2i64_late (v128, i64) -> (v128)452; CHECK-NEXT:  # %bb.0:453; CHECK-NEXT:    local.get 0454; CHECK-NEXT:    local.get 1455; CHECK-NEXT:    i32.wrap_i64456; CHECK-NEXT:    i64x2.shr_s457; CHECK-NEXT:    # fallthrough-return458  %t = insertelement <2 x i64> undef, i64 %x, i32 0459  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>460  %m = and <2 x i64> %s, <i64 63, i64 63>461  %a = ashr <2 x i64> %v, %m462  ret <2 x i64> %a463}464 465define <2 x i64> @lshr_v2i64(<2 x i64> %v, i64 %x) {466; CHECK-LABEL: lshr_v2i64:467; CHECK:         .functype lshr_v2i64 (v128, i64) -> (v128)468; CHECK-NEXT:  # %bb.0:469; CHECK-NEXT:    local.get 0470; CHECK-NEXT:    local.get 1471; CHECK-NEXT:    i32.wrap_i64472; CHECK-NEXT:    i64x2.shr_u473; CHECK-NEXT:    # fallthrough-return474  %m = and i64 %x, 63475  %t = insertelement <2 x i64> undef, i64 %m, i32 0476  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>477  %a = lshr <2 x i64> %v, %s478  ret <2 x i64> %a479}480 481define <2 x i64> @lshr_v2i64_late(<2 x i64> %v, i64 %x) {482; CHECK-LABEL: lshr_v2i64_late:483; CHECK:         .functype lshr_v2i64_late (v128, i64) -> (v128)484; CHECK-NEXT:  # %bb.0:485; CHECK-NEXT:    local.get 0486; CHECK-NEXT:    local.get 1487; CHECK-NEXT:    i32.wrap_i64488; CHECK-NEXT:    i64x2.shr_u489; CHECK-NEXT:    # fallthrough-return490  %t = insertelement <2 x i64> undef, i64 %x, i32 0491  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>492  %m = and <2 x i64> %s, <i64 63, i64 63>493  %a = lshr <2 x i64> %v, %m494  ret <2 x i64> %a495}496 497define <2 x i64> @shl_v2i64_i32(<2 x i64> %v, i32 %x) {498; CHECK-LABEL: shl_v2i64_i32:499; CHECK:         .functype shl_v2i64_i32 (v128, i32) -> (v128)500; CHECK-NEXT:  # %bb.0:501; CHECK-NEXT:    local.get 0502; CHECK-NEXT:    local.get 1503; CHECK-NEXT:    i64x2.shl504; CHECK-NEXT:    # fallthrough-return505  %z = and i32 %x, 63506  %m = zext i32 %z to i64507  %t = insertelement <2 x i64> undef, i64 %m, i32 0508  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>509  %a = shl <2 x i64> %v, %s510  ret <2 x i64> %a511}512 513define <2 x i64> @shl_v2i64_i32_late(<2 x i64> %v, i32 %x) {514; CHECK-LABEL: shl_v2i64_i32_late:515; CHECK:         .functype shl_v2i64_i32_late (v128, i32) -> (v128)516; CHECK-NEXT:  # %bb.0:517; CHECK-NEXT:    local.get 0518; CHECK-NEXT:    local.get 1519; CHECK-NEXT:    i64x2.shl520; CHECK-NEXT:    # fallthrough-return521  %z = zext i32 %x to i64522  %t = insertelement <2 x i64> undef, i64 %z, i32 0523  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>524  %m = and <2 x i64> %s, <i64 63, i64 63>525  %a = shl <2 x i64> %v, %m526  ret <2 x i64> %a527}528 529define <2 x i64> @ashr_v2i64_i32(<2 x i64> %v, i32 %x) {530; CHECK-LABEL: ashr_v2i64_i32:531; CHECK:         .functype ashr_v2i64_i32 (v128, i32) -> (v128)532; CHECK-NEXT:  # %bb.0:533; CHECK-NEXT:    local.get 0534; CHECK-NEXT:    local.get 1535; CHECK-NEXT:    i64x2.shr_s536; CHECK-NEXT:    # fallthrough-return537  %z = and i32 %x, 63538  %m = zext i32 %z to i64539  %t = insertelement <2 x i64> undef, i64 %m, i32 0540  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>541  %a = ashr <2 x i64> %v, %s542  ret <2 x i64> %a543}544 545define <2 x i64> @ashr_v2i64_i32_late(<2 x i64> %v, i32 %x) {546; CHECK-LABEL: ashr_v2i64_i32_late:547; CHECK:         .functype ashr_v2i64_i32_late (v128, i32) -> (v128)548; CHECK-NEXT:  # %bb.0:549; CHECK-NEXT:    local.get 0550; CHECK-NEXT:    local.get 1551; CHECK-NEXT:    i64x2.shr_s552; CHECK-NEXT:    # fallthrough-return553  %z = zext i32 %x to i64554  %t = insertelement <2 x i64> undef, i64 %z, i32 0555  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>556  %m = and <2 x i64> %s, <i64 63, i64 63>557  %a = ashr <2 x i64> %v, %m558  ret <2 x i64> %a559}560 561define <2 x i64> @lshr_v2i64_i32(<2 x i64> %v, i32 %x) {562; CHECK-LABEL: lshr_v2i64_i32:563; CHECK:         .functype lshr_v2i64_i32 (v128, i32) -> (v128)564; CHECK-NEXT:  # %bb.0:565; CHECK-NEXT:    local.get 0566; CHECK-NEXT:    local.get 1567; CHECK-NEXT:    i64x2.shr_u568; CHECK-NEXT:    # fallthrough-return569  %z = and i32 %x, 63570  %m = zext i32 %z to i64571  %t = insertelement <2 x i64> undef, i64 %m, i32 0572  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>573  %a = lshr <2 x i64> %v, %s574  ret <2 x i64> %a575}576 577define <2 x i64> @lshr_v2i64_i32_late(<2 x i64> %v, i32 %x) {578; CHECK-LABEL: lshr_v2i64_i32_late:579; CHECK:         .functype lshr_v2i64_i32_late (v128, i32) -> (v128)580; CHECK-NEXT:  # %bb.0:581; CHECK-NEXT:    local.get 0582; CHECK-NEXT:    local.get 1583; CHECK-NEXT:    i64x2.shr_u584; CHECK-NEXT:    # fallthrough-return585  %z = zext i32 %x to i64586  %t = insertelement <2 x i64> undef, i64 %z, i32 0587  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>588  %m = and <2 x i64> %s, <i64 63, i64 63>589  %a = lshr <2 x i64> %v, %m590  ret <2 x i64> %a591}592