xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vwsll.ll (revision d85f1054fbb04c5299848bf81aa350442f9a56c7)
159dd10faSLuke Lau; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
289ebb561SCraig Topper; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32
389ebb561SCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64
489ebb561SCraig Topper; RUN: llc -mtriple=riscv32 -mattr=+v,+zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVBB,CHECK-ZVBB-RV32
589ebb561SCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+v,+zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVBB,CHECK-ZVBB-RV64
659dd10faSLuke Lau
759dd10faSLuke Lau; ==============================================================================
859dd10faSLuke Lau; i32 -> i64
959dd10faSLuke Lau; ==============================================================================
1059dd10faSLuke Lau
1159dd10faSLuke Laudefine <4 x i64> @vwsll_vv_v4i64_sext(<4 x i32> %a, <4 x i32> %b) {
1259dd10faSLuke Lau; CHECK-LABEL: vwsll_vv_v4i64_sext:
1359dd10faSLuke Lau; CHECK:       # %bb.0:
1459dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
1559dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
1659dd10faSLuke Lau; CHECK-NEXT:    vsext.vf2 v12, v9
1759dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
1859dd10faSLuke Lau; CHECK-NEXT:    ret
1959dd10faSLuke Lau;
2059dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vv_v4i64_sext:
2159dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
2207d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
2307d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vv v10, v8, v9
2407d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
2559dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
2659dd10faSLuke Lau  %x = zext <4 x i32> %a to <4 x i64>
2759dd10faSLuke Lau  %y = sext <4 x i32> %b to <4 x i64>
2859dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
2959dd10faSLuke Lau  ret <4 x i64> %z
3059dd10faSLuke Lau}
3159dd10faSLuke Lau
3259dd10faSLuke Laudefine <4 x i64> @vwsll_vv_v4i64_zext(<4 x i32> %a, <4 x i32> %b) {
3359dd10faSLuke Lau; CHECK-LABEL: vwsll_vv_v4i64_zext:
3459dd10faSLuke Lau; CHECK:       # %bb.0:
3559dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
3659dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
3759dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v12, v9
3859dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
3959dd10faSLuke Lau; CHECK-NEXT:    ret
4059dd10faSLuke Lau;
4159dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vv_v4i64_zext:
4259dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
4307d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
4407d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vv v10, v8, v9
4507d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
4659dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
4759dd10faSLuke Lau  %x = zext <4 x i32> %a to <4 x i64>
4859dd10faSLuke Lau  %y = zext <4 x i32> %b to <4 x i64>
4959dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
5059dd10faSLuke Lau  ret <4 x i64> %z
5159dd10faSLuke Lau}
5259dd10faSLuke Lau
5359dd10faSLuke Laudefine <4 x i64> @vwsll_vx_i64_v4i64(<4 x i32> %a, i64 %b) {
5459dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i64_v4i64:
5559dd10faSLuke Lau; CHECK:       # %bb.0:
5659dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
5759dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
5859dd10faSLuke Lau; CHECK-NEXT:    vsll.vx v8, v10, a0
5959dd10faSLuke Lau; CHECK-NEXT:    ret
6059dd10faSLuke Lau;
6159dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i64_v4i64:
6259dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
6307d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
6407d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v10, v8, a0
6507d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
6659dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
6759dd10faSLuke Lau  %head = insertelement <4 x i64> poison, i64 %b, i32 0
6859dd10faSLuke Lau  %splat = shufflevector <4 x i64> %head, <4 x i64> poison, <4 x i32> zeroinitializer
6959dd10faSLuke Lau  %x = zext <4 x i32> %a to <4 x i64>
7059dd10faSLuke Lau  %z = shl <4 x i64> %x, %splat
7159dd10faSLuke Lau  ret <4 x i64> %z
7259dd10faSLuke Lau}
7359dd10faSLuke Lau
7459dd10faSLuke Laudefine <4 x i64> @vwsll_vx_i32_v4i64_sext(<4 x i32> %a, i32 %b) {
7559dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i32_v4i64_sext:
7659dd10faSLuke Lau; CHECK:       # %bb.0:
7759dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
7859dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
7959dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
8059dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
8159dd10faSLuke Lau; CHECK-NEXT:    vsext.vf2 v12, v9
8259dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
8359dd10faSLuke Lau; CHECK-NEXT:    ret
8459dd10faSLuke Lau;
8559dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i32_v4i64_sext:
8659dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
8759dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
8859dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vmv.v.x v9, a0
8907d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vv v10, v8, v9
9007d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
9159dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
9259dd10faSLuke Lau  %head = insertelement <4 x i32> poison, i32 %b, i32 0
9359dd10faSLuke Lau  %splat = shufflevector <4 x i32> %head, <4 x i32> poison, <4 x i32> zeroinitializer
9459dd10faSLuke Lau  %x = zext <4 x i32> %a to <4 x i64>
9559dd10faSLuke Lau  %y = sext <4 x i32> %splat to <4 x i64>
9659dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
9759dd10faSLuke Lau  ret <4 x i64> %z
9859dd10faSLuke Lau}
9959dd10faSLuke Lau
10059dd10faSLuke Laudefine <4 x i64> @vwsll_vx_i32_v4i64_zext(<4 x i32> %a, i32 %b) {
10159dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i32_v4i64_zext:
10259dd10faSLuke Lau; CHECK:       # %bb.0:
10359dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
10459dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
10559dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
10659dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
10759dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v12, v9
10859dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
10959dd10faSLuke Lau; CHECK-NEXT:    ret
11059dd10faSLuke Lau;
11159dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i32_v4i64_zext:
11259dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
11359dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1149c660362SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v10, v8, a0
11507d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
11659dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
11759dd10faSLuke Lau  %head = insertelement <4 x i32> poison, i32 %b, i32 0
11859dd10faSLuke Lau  %splat = shufflevector <4 x i32> %head, <4 x i32> poison, <4 x i32> zeroinitializer
11959dd10faSLuke Lau  %x = zext <4 x i32> %a to <4 x i64>
12059dd10faSLuke Lau  %y = zext <4 x i32> %splat to <4 x i64>
12159dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
12259dd10faSLuke Lau  ret <4 x i64> %z
12359dd10faSLuke Lau}
12459dd10faSLuke Lau
12559dd10faSLuke Laudefine <4 x i64> @vwsll_vx_i16_v4i64_sext(<4 x i32> %a, i16 %b) {
12659dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i16_v4i64_sext:
12759dd10faSLuke Lau; CHECK:       # %bb.0:
12859dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
12959dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
13059dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
13159dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
13259dd10faSLuke Lau; CHECK-NEXT:    vsext.vf4 v12, v9
13359dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
13459dd10faSLuke Lau; CHECK-NEXT:    ret
13559dd10faSLuke Lau;
13659dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i16_v4i64_sext:
13759dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
13807d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
13907d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v10, v8, a0
14007d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
14159dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
14259dd10faSLuke Lau  %head = insertelement <4 x i16> poison, i16 %b, i32 0
14359dd10faSLuke Lau  %splat = shufflevector <4 x i16> %head, <4 x i16> poison, <4 x i32> zeroinitializer
14459dd10faSLuke Lau  %x = zext <4 x i32> %a to <4 x i64>
14559dd10faSLuke Lau  %y = sext <4 x i16> %splat to <4 x i64>
14659dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
14759dd10faSLuke Lau  ret <4 x i64> %z
14859dd10faSLuke Lau}
14959dd10faSLuke Lau
15059dd10faSLuke Laudefine <4 x i64> @vwsll_vx_i16_v4i64_zext(<4 x i32> %a, i16 %b) {
15159dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i16_v4i64_zext:
15259dd10faSLuke Lau; CHECK:       # %bb.0:
15359dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
15459dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
15559dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
15659dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
15759dd10faSLuke Lau; CHECK-NEXT:    vzext.vf4 v12, v9
15859dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
15959dd10faSLuke Lau; CHECK-NEXT:    ret
16059dd10faSLuke Lau;
16159dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i16_v4i64_zext:
16259dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
16307d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
16407d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v10, v8, a0
16507d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
16659dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
16759dd10faSLuke Lau  %head = insertelement <4 x i16> poison, i16 %b, i32 0
16859dd10faSLuke Lau  %splat = shufflevector <4 x i16> %head, <4 x i16> poison, <4 x i32> zeroinitializer
16959dd10faSLuke Lau  %x = zext <4 x i32> %a to <4 x i64>
17059dd10faSLuke Lau  %y = zext <4 x i16> %splat to <4 x i64>
17159dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
17259dd10faSLuke Lau  ret <4 x i64> %z
17359dd10faSLuke Lau}
17459dd10faSLuke Lau
17559dd10faSLuke Laudefine <4 x i64> @vwsll_vx_i8_v4i64_sext(<4 x i32> %a, i8 %b) {
17659dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i8_v4i64_sext:
17759dd10faSLuke Lau; CHECK:       # %bb.0:
17859dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
17959dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
18059dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
18159dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
18259dd10faSLuke Lau; CHECK-NEXT:    vsext.vf8 v12, v9
18359dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
18459dd10faSLuke Lau; CHECK-NEXT:    ret
18559dd10faSLuke Lau;
18659dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i8_v4i64_sext:
18759dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
18807d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
18907d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v10, v8, a0
19007d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
19159dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
19259dd10faSLuke Lau  %head = insertelement <4 x i8> poison, i8 %b, i32 0
19359dd10faSLuke Lau  %splat = shufflevector <4 x i8> %head, <4 x i8> poison, <4 x i32> zeroinitializer
19459dd10faSLuke Lau  %x = zext <4 x i32> %a to <4 x i64>
19559dd10faSLuke Lau  %y = sext <4 x i8> %splat to <4 x i64>
19659dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
19759dd10faSLuke Lau  ret <4 x i64> %z
19859dd10faSLuke Lau}
19959dd10faSLuke Lau
20059dd10faSLuke Laudefine <4 x i64> @vwsll_vx_i8_v4i64_zext(<4 x i32> %a, i8 %b) {
20159dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i8_v4i64_zext:
20259dd10faSLuke Lau; CHECK:       # %bb.0:
20359dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
20459dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
20559dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
20659dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
20759dd10faSLuke Lau; CHECK-NEXT:    vzext.vf8 v12, v9
20859dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
20959dd10faSLuke Lau; CHECK-NEXT:    ret
21059dd10faSLuke Lau;
21159dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i8_v4i64_zext:
21259dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
21307d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
21407d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v10, v8, a0
21507d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
21659dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
21759dd10faSLuke Lau  %head = insertelement <4 x i8> poison, i8 %b, i32 0
21859dd10faSLuke Lau  %splat = shufflevector <4 x i8> %head, <4 x i8> poison, <4 x i32> zeroinitializer
21959dd10faSLuke Lau  %x = zext <4 x i32> %a to <4 x i64>
22059dd10faSLuke Lau  %y = zext <4 x i8> %splat to <4 x i64>
22159dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
22259dd10faSLuke Lau  ret <4 x i64> %z
22359dd10faSLuke Lau}
22459dd10faSLuke Lau
22559dd10faSLuke Laudefine <4 x i64> @vwsll_vi_v4i64(<4 x i32> %a) {
22659dd10faSLuke Lau; CHECK-LABEL: vwsll_vi_v4i64:
22759dd10faSLuke Lau; CHECK:       # %bb.0:
22859dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
22959dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
23059dd10faSLuke Lau; CHECK-NEXT:    vsll.vi v8, v10, 2
23159dd10faSLuke Lau; CHECK-NEXT:    ret
23259dd10faSLuke Lau;
23359dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vi_v4i64:
23459dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
23507d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
23607d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vi v10, v8, 2
23707d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
23859dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
23959dd10faSLuke Lau  %x = zext <4 x i32> %a to <4 x i64>
24059dd10faSLuke Lau  %z = shl <4 x i64> %x, splat (i64 2)
24159dd10faSLuke Lau  ret <4 x i64> %z
24259dd10faSLuke Lau}
24359dd10faSLuke Lau
24459dd10faSLuke Lau; ==============================================================================
24559dd10faSLuke Lau; i16 -> i32
24659dd10faSLuke Lau; ==============================================================================
24759dd10faSLuke Lau
24859dd10faSLuke Laudefine <8 x i32> @vwsll_vv_v8i32_sext(<8 x i16> %a, <8 x i16> %b) {
24959dd10faSLuke Lau; CHECK-LABEL: vwsll_vv_v8i32_sext:
25059dd10faSLuke Lau; CHECK:       # %bb.0:
25159dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
25259dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
25359dd10faSLuke Lau; CHECK-NEXT:    vsext.vf2 v12, v9
25459dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
25559dd10faSLuke Lau; CHECK-NEXT:    ret
25659dd10faSLuke Lau;
25759dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vv_v8i32_sext:
25859dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
25907d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
26007d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vv v10, v8, v9
26107d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
26259dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
26359dd10faSLuke Lau  %x = zext <8 x i16> %a to <8 x i32>
26459dd10faSLuke Lau  %y = sext <8 x i16> %b to <8 x i32>
26559dd10faSLuke Lau  %z = shl <8 x i32> %x, %y
26659dd10faSLuke Lau  ret <8 x i32> %z
26759dd10faSLuke Lau}
26859dd10faSLuke Lau
26959dd10faSLuke Laudefine <8 x i32> @vwsll_vv_v8i32_zext(<8 x i16> %a, <8 x i16> %b) {
27059dd10faSLuke Lau; CHECK-LABEL: vwsll_vv_v8i32_zext:
27159dd10faSLuke Lau; CHECK:       # %bb.0:
27259dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
27359dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
27459dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v12, v9
27559dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
27659dd10faSLuke Lau; CHECK-NEXT:    ret
27759dd10faSLuke Lau;
27859dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vv_v8i32_zext:
27959dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
28007d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
28107d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vv v10, v8, v9
28207d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
28359dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
28459dd10faSLuke Lau  %x = zext <8 x i16> %a to <8 x i32>
28559dd10faSLuke Lau  %y = zext <8 x i16> %b to <8 x i32>
28659dd10faSLuke Lau  %z = shl <8 x i32> %x, %y
28759dd10faSLuke Lau  ret <8 x i32> %z
28859dd10faSLuke Lau}
28959dd10faSLuke Lau
29059dd10faSLuke Laudefine <8 x i32> @vwsll_vx_i64_v8i32(<8 x i16> %a, i64 %b) {
29159dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i64_v8i32:
29259dd10faSLuke Lau; CHECK:       # %bb.0:
29359dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
29459dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
29559dd10faSLuke Lau; CHECK-NEXT:    vsll.vx v8, v10, a0
29659dd10faSLuke Lau; CHECK-NEXT:    ret
29759dd10faSLuke Lau;
29859dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i64_v8i32:
29959dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
30007d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
30107d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v10, v8, a0
30207d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
30359dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
30459dd10faSLuke Lau  %head = insertelement <8 x i64> poison, i64 %b, i32 0
30559dd10faSLuke Lau  %splat = shufflevector <8 x i64> %head, <8 x i64> poison, <8 x i32> zeroinitializer
30659dd10faSLuke Lau  %x = zext <8 x i16> %a to <8 x i32>
30759dd10faSLuke Lau  %y = trunc <8 x i64> %splat to <8 x i32>
30859dd10faSLuke Lau  %z = shl <8 x i32> %x, %y
30959dd10faSLuke Lau  ret <8 x i32> %z
31059dd10faSLuke Lau}
31159dd10faSLuke Lau
31259dd10faSLuke Laudefine <8 x i32> @vwsll_vx_i32_v8i32(<8 x i16> %a, i32 %b) {
31359dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i32_v8i32:
31459dd10faSLuke Lau; CHECK:       # %bb.0:
31559dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
31659dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
31759dd10faSLuke Lau; CHECK-NEXT:    vsll.vx v8, v10, a0
31859dd10faSLuke Lau; CHECK-NEXT:    ret
31959dd10faSLuke Lau;
32059dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i32_v8i32:
32159dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
32207d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
32307d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v10, v8, a0
32407d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
32559dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
32659dd10faSLuke Lau  %head = insertelement <8 x i32> poison, i32 %b, i32 0
32759dd10faSLuke Lau  %splat = shufflevector <8 x i32> %head, <8 x i32> poison, <8 x i32> zeroinitializer
32859dd10faSLuke Lau  %x = zext <8 x i16> %a to <8 x i32>
32959dd10faSLuke Lau  %z = shl <8 x i32> %x, %splat
33059dd10faSLuke Lau  ret <8 x i32> %z
33159dd10faSLuke Lau}
33259dd10faSLuke Lau
33359dd10faSLuke Laudefine <8 x i32> @vwsll_vx_i16_v8i32_sext(<8 x i16> %a, i16 %b) {
33459dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i16_v8i32_sext:
33559dd10faSLuke Lau; CHECK:       # %bb.0:
33659dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
33759dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
33859dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
33959dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
34059dd10faSLuke Lau; CHECK-NEXT:    vsext.vf2 v12, v9
34159dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
34259dd10faSLuke Lau; CHECK-NEXT:    ret
34359dd10faSLuke Lau;
34459dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i16_v8i32_sext:
34559dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
34659dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
34759dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vmv.v.x v9, a0
34807d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vv v10, v8, v9
34907d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
35059dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
35159dd10faSLuke Lau  %head = insertelement <8 x i16> poison, i16 %b, i32 0
35259dd10faSLuke Lau  %splat = shufflevector <8 x i16> %head, <8 x i16> poison, <8 x i32> zeroinitializer
35359dd10faSLuke Lau  %x = zext <8 x i16> %a to <8 x i32>
35459dd10faSLuke Lau  %y = sext <8 x i16> %splat to <8 x i32>
35559dd10faSLuke Lau  %z = shl <8 x i32> %x, %y
35659dd10faSLuke Lau  ret <8 x i32> %z
35759dd10faSLuke Lau}
35859dd10faSLuke Lau
35959dd10faSLuke Laudefine <8 x i32> @vwsll_vx_i16_v8i32_zext(<8 x i16> %a, i16 %b) {
36059dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i16_v8i32_zext:
36159dd10faSLuke Lau; CHECK:       # %bb.0:
36259dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
36359dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
36459dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
36559dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
36659dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v12, v9
36759dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
36859dd10faSLuke Lau; CHECK-NEXT:    ret
36959dd10faSLuke Lau;
37059dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i16_v8i32_zext:
37159dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
37259dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
3739c660362SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v10, v8, a0
37407d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
37559dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
37659dd10faSLuke Lau  %head = insertelement <8 x i16> poison, i16 %b, i32 0
37759dd10faSLuke Lau  %splat = shufflevector <8 x i16> %head, <8 x i16> poison, <8 x i32> zeroinitializer
37859dd10faSLuke Lau  %x = zext <8 x i16> %a to <8 x i32>
37959dd10faSLuke Lau  %y = zext <8 x i16> %splat to <8 x i32>
38059dd10faSLuke Lau  %z = shl <8 x i32> %x, %y
38159dd10faSLuke Lau  ret <8 x i32> %z
38259dd10faSLuke Lau}
38359dd10faSLuke Lau
38459dd10faSLuke Laudefine <8 x i32> @vwsll_vx_i8_v8i32_sext(<8 x i16> %a, i8 %b) {
38559dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i8_v8i32_sext:
38659dd10faSLuke Lau; CHECK:       # %bb.0:
38759dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
38859dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
38959dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
39059dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
39159dd10faSLuke Lau; CHECK-NEXT:    vsext.vf4 v12, v9
39259dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
39359dd10faSLuke Lau; CHECK-NEXT:    ret
39459dd10faSLuke Lau;
39559dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i8_v8i32_sext:
39659dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
39707d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
39807d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v10, v8, a0
39907d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
40059dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
40159dd10faSLuke Lau  %head = insertelement <8 x i8> poison, i8 %b, i32 0
40259dd10faSLuke Lau  %splat = shufflevector <8 x i8> %head, <8 x i8> poison, <8 x i32> zeroinitializer
40359dd10faSLuke Lau  %x = zext <8 x i16> %a to <8 x i32>
40459dd10faSLuke Lau  %y = sext <8 x i8> %splat to <8 x i32>
40559dd10faSLuke Lau  %z = shl <8 x i32> %x, %y
40659dd10faSLuke Lau  ret <8 x i32> %z
40759dd10faSLuke Lau}
40859dd10faSLuke Lau
40959dd10faSLuke Laudefine <8 x i32> @vwsll_vx_i8_v8i32_zext(<8 x i16> %a, i8 %b) {
41059dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i8_v8i32_zext:
41159dd10faSLuke Lau; CHECK:       # %bb.0:
41259dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
41359dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
41459dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
41559dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
41659dd10faSLuke Lau; CHECK-NEXT:    vzext.vf4 v12, v9
41759dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
41859dd10faSLuke Lau; CHECK-NEXT:    ret
41959dd10faSLuke Lau;
42059dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i8_v8i32_zext:
42159dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
42207d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
42307d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v10, v8, a0
42407d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
42559dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
42659dd10faSLuke Lau  %head = insertelement <8 x i8> poison, i8 %b, i32 0
42759dd10faSLuke Lau  %splat = shufflevector <8 x i8> %head, <8 x i8> poison, <8 x i32> zeroinitializer
42859dd10faSLuke Lau  %x = zext <8 x i16> %a to <8 x i32>
42959dd10faSLuke Lau  %y = zext <8 x i8> %splat to <8 x i32>
43059dd10faSLuke Lau  %z = shl <8 x i32> %x, %y
43159dd10faSLuke Lau  ret <8 x i32> %z
43259dd10faSLuke Lau}
43359dd10faSLuke Lau
43459dd10faSLuke Laudefine <8 x i32> @vwsll_vi_v8i32(<8 x i16> %a) {
43559dd10faSLuke Lau; CHECK-LABEL: vwsll_vi_v8i32:
43659dd10faSLuke Lau; CHECK:       # %bb.0:
43759dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
43859dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
43959dd10faSLuke Lau; CHECK-NEXT:    vsll.vi v8, v10, 2
44059dd10faSLuke Lau; CHECK-NEXT:    ret
44159dd10faSLuke Lau;
44259dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vi_v8i32:
44359dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
44407d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
44507d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vi v10, v8, 2
44607d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
44759dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
44859dd10faSLuke Lau  %x = zext <8 x i16> %a to <8 x i32>
44959dd10faSLuke Lau  %z = shl <8 x i32> %x, splat (i32 2)
45059dd10faSLuke Lau  ret <8 x i32> %z
45159dd10faSLuke Lau}
45259dd10faSLuke Lau
45359dd10faSLuke Lau; ==============================================================================
45459dd10faSLuke Lau; i8 -> i16
45559dd10faSLuke Lau; ==============================================================================
45659dd10faSLuke Lau
45759dd10faSLuke Laudefine <16 x i16> @vwsll_vv_v16i16_sext(<16 x i8> %a, <16 x i8> %b) {
45859dd10faSLuke Lau; CHECK-LABEL: vwsll_vv_v16i16_sext:
45959dd10faSLuke Lau; CHECK:       # %bb.0:
46059dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
46159dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
46259dd10faSLuke Lau; CHECK-NEXT:    vsext.vf2 v12, v9
46359dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
46459dd10faSLuke Lau; CHECK-NEXT:    ret
46559dd10faSLuke Lau;
46659dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vv_v16i16_sext:
46759dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
46807d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
46907d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vv v10, v8, v9
47007d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
47159dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
47259dd10faSLuke Lau  %x = zext <16 x i8> %a to <16 x i16>
47359dd10faSLuke Lau  %y = sext <16 x i8> %b to <16 x i16>
47459dd10faSLuke Lau  %z = shl <16 x i16> %x, %y
47559dd10faSLuke Lau  ret <16 x i16> %z
47659dd10faSLuke Lau}
47759dd10faSLuke Lau
47859dd10faSLuke Laudefine <16 x i16> @vwsll_vv_v16i16_zext(<16 x i8> %a, <16 x i8> %b) {
47959dd10faSLuke Lau; CHECK-LABEL: vwsll_vv_v16i16_zext:
48059dd10faSLuke Lau; CHECK:       # %bb.0:
48159dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
48259dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
48359dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v12, v9
48459dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
48559dd10faSLuke Lau; CHECK-NEXT:    ret
48659dd10faSLuke Lau;
48759dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vv_v16i16_zext:
48859dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
48907d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
49007d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vv v10, v8, v9
49107d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
49259dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
49359dd10faSLuke Lau  %x = zext <16 x i8> %a to <16 x i16>
49459dd10faSLuke Lau  %y = zext <16 x i8> %b to <16 x i16>
49559dd10faSLuke Lau  %z = shl <16 x i16> %x, %y
49659dd10faSLuke Lau  ret <16 x i16> %z
49759dd10faSLuke Lau}
49859dd10faSLuke Lau
49959dd10faSLuke Laudefine <16 x i16> @vwsll_vx_i64_v16i16(<16 x i8> %a, i64 %b) {
50089ebb561SCraig Topper; RV32-LABEL: vwsll_vx_i64_v16i16:
50189ebb561SCraig Topper; RV32:       # %bb.0:
50289ebb561SCraig Topper; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
50389ebb561SCraig Topper; RV32-NEXT:    vmv.v.x v16, a0
50489ebb561SCraig Topper; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
50589ebb561SCraig Topper; RV32-NEXT:    vrgather.vi v24, v16, 0
50689ebb561SCraig Topper; RV32-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
50789ebb561SCraig Topper; RV32-NEXT:    vzext.vf2 v10, v8
50889ebb561SCraig Topper; RV32-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
50989ebb561SCraig Topper; RV32-NEXT:    vnsrl.wi v12, v24, 0
51089ebb561SCraig Topper; RV32-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
51189ebb561SCraig Topper; RV32-NEXT:    vnsrl.wi v8, v12, 0
51289ebb561SCraig Topper; RV32-NEXT:    vsll.vv v8, v10, v8
51389ebb561SCraig Topper; RV32-NEXT:    ret
51489ebb561SCraig Topper;
51589ebb561SCraig Topper; RV64-LABEL: vwsll_vx_i64_v16i16:
51689ebb561SCraig Topper; RV64:       # %bb.0:
51789ebb561SCraig Topper; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
51889ebb561SCraig Topper; RV64-NEXT:    vmv.v.x v16, a0
51989ebb561SCraig Topper; RV64-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
52089ebb561SCraig Topper; RV64-NEXT:    vzext.vf2 v10, v8
52189ebb561SCraig Topper; RV64-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
52289ebb561SCraig Topper; RV64-NEXT:    vnsrl.wi v12, v16, 0
52389ebb561SCraig Topper; RV64-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
52489ebb561SCraig Topper; RV64-NEXT:    vnsrl.wi v8, v12, 0
52589ebb561SCraig Topper; RV64-NEXT:    vsll.vv v8, v10, v8
52689ebb561SCraig Topper; RV64-NEXT:    ret
52789ebb561SCraig Topper;
52889ebb561SCraig Topper; CHECK-ZVBB-RV32-LABEL: vwsll_vx_i64_v16i16:
52989ebb561SCraig Topper; CHECK-ZVBB-RV32:       # %bb.0:
53089ebb561SCraig Topper; CHECK-ZVBB-RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
53189ebb561SCraig Topper; CHECK-ZVBB-RV32-NEXT:    vmv.v.x v16, a0
53289ebb561SCraig Topper; CHECK-ZVBB-RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
53389ebb561SCraig Topper; CHECK-ZVBB-RV32-NEXT:    vrgather.vi v24, v16, 0
53489ebb561SCraig Topper; CHECK-ZVBB-RV32-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
53589ebb561SCraig Topper; CHECK-ZVBB-RV32-NEXT:    vzext.vf2 v10, v8
53689ebb561SCraig Topper; CHECK-ZVBB-RV32-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
53789ebb561SCraig Topper; CHECK-ZVBB-RV32-NEXT:    vnsrl.wi v12, v24, 0
53889ebb561SCraig Topper; CHECK-ZVBB-RV32-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
53989ebb561SCraig Topper; CHECK-ZVBB-RV32-NEXT:    vnsrl.wi v8, v12, 0
54089ebb561SCraig Topper; CHECK-ZVBB-RV32-NEXT:    vsll.vv v8, v10, v8
54189ebb561SCraig Topper; CHECK-ZVBB-RV32-NEXT:    ret
54289ebb561SCraig Topper;
54389ebb561SCraig Topper; CHECK-ZVBB-RV64-LABEL: vwsll_vx_i64_v16i16:
54489ebb561SCraig Topper; CHECK-ZVBB-RV64:       # %bb.0:
54589ebb561SCraig Topper; CHECK-ZVBB-RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
54689ebb561SCraig Topper; CHECK-ZVBB-RV64-NEXT:    vwsll.vx v10, v8, a0
54789ebb561SCraig Topper; CHECK-ZVBB-RV64-NEXT:    vmv2r.v v8, v10
54889ebb561SCraig Topper; CHECK-ZVBB-RV64-NEXT:    ret
54959dd10faSLuke Lau  %head = insertelement <8 x i64> poison, i64 %b, i32 0
55059dd10faSLuke Lau  %splat = shufflevector <8 x i64> %head, <8 x i64> poison, <16 x i32> zeroinitializer
55159dd10faSLuke Lau  %x = zext <16 x i8> %a to <16 x i16>
55259dd10faSLuke Lau  %y = trunc <16 x i64> %splat to <16 x i16>
55359dd10faSLuke Lau  %z = shl <16 x i16> %x, %y
55459dd10faSLuke Lau  ret <16 x i16> %z
55559dd10faSLuke Lau}
55659dd10faSLuke Lau
55759dd10faSLuke Laudefine <16 x i16> @vwsll_vx_i32_v16i16(<16 x i8> %a, i32 %b) {
55859dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i32_v16i16:
55959dd10faSLuke Lau; CHECK:       # %bb.0:
56059dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
56159dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v12, a0
56259dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
56359dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
56459dd10faSLuke Lau; CHECK-NEXT:    vnsrl.wi v8, v12, 0
56559dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v8
56659dd10faSLuke Lau; CHECK-NEXT:    ret
56759dd10faSLuke Lau;
56859dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i32_v16i16:
56959dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
57007d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
57107d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v10, v8, a0
57207d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
57359dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
57459dd10faSLuke Lau  %head = insertelement <16 x i32> poison, i32 %b, i32 0
57559dd10faSLuke Lau  %splat = shufflevector <16 x i32> %head, <16 x i32> poison, <16 x i32> zeroinitializer
57659dd10faSLuke Lau  %x = zext <16 x i8> %a to <16 x i16>
57759dd10faSLuke Lau  %y = trunc <16 x i32> %splat to <16 x i16>
57859dd10faSLuke Lau  %z = shl <16 x i16> %x, %y
57959dd10faSLuke Lau  ret <16 x i16> %z
58059dd10faSLuke Lau}
58159dd10faSLuke Lau
58259dd10faSLuke Laudefine <16 x i16> @vwsll_vx_i16_v16i16(<16 x i8> %a, i16 %b) {
58359dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i16_v16i16:
58459dd10faSLuke Lau; CHECK:       # %bb.0:
58559dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
58659dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
58759dd10faSLuke Lau; CHECK-NEXT:    vsll.vx v8, v10, a0
58859dd10faSLuke Lau; CHECK-NEXT:    ret
58959dd10faSLuke Lau;
59059dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i16_v16i16:
59159dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
59207d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
59307d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v10, v8, a0
59407d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
59559dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
59659dd10faSLuke Lau  %head = insertelement <16 x i16> poison, i16 %b, i32 0
59759dd10faSLuke Lau  %splat = shufflevector <16 x i16> %head, <16 x i16> poison, <16 x i32> zeroinitializer
59859dd10faSLuke Lau  %x = zext <16 x i8> %a to <16 x i16>
59959dd10faSLuke Lau  %z = shl <16 x i16> %x, %splat
60059dd10faSLuke Lau  ret <16 x i16> %z
60159dd10faSLuke Lau}
60259dd10faSLuke Lau
60359dd10faSLuke Laudefine <16 x i16> @vwsll_vx_i8_v16i16_sext(<16 x i8> %a, i8 %b) {
60459dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i8_v16i16_sext:
60559dd10faSLuke Lau; CHECK:       # %bb.0:
60659dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
60759dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
60859dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
60959dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
61059dd10faSLuke Lau; CHECK-NEXT:    vsext.vf2 v12, v9
61159dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
61259dd10faSLuke Lau; CHECK-NEXT:    ret
61359dd10faSLuke Lau;
61459dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i8_v16i16_sext:
61559dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
61659dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
61759dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vmv.v.x v9, a0
61807d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vv v10, v8, v9
61907d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
62059dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
62159dd10faSLuke Lau  %head = insertelement <16 x i8> poison, i8 %b, i32 0
62259dd10faSLuke Lau  %splat = shufflevector <16 x i8> %head, <16 x i8> poison, <16 x i32> zeroinitializer
62359dd10faSLuke Lau  %x = zext <16 x i8> %a to <16 x i16>
62459dd10faSLuke Lau  %y = sext <16 x i8> %splat to <16 x i16>
62559dd10faSLuke Lau  %z = shl <16 x i16> %x, %y
62659dd10faSLuke Lau  ret <16 x i16> %z
62759dd10faSLuke Lau}
62859dd10faSLuke Lau
62959dd10faSLuke Laudefine <16 x i16> @vwsll_vx_i8_v16i16_zext(<16 x i8> %a, i8 %b) {
63059dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i8_v16i16_zext:
63159dd10faSLuke Lau; CHECK:       # %bb.0:
63259dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
63359dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
63459dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
63559dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
63659dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v12, v9
63759dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
63859dd10faSLuke Lau; CHECK-NEXT:    ret
63959dd10faSLuke Lau;
64059dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i8_v16i16_zext:
64159dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
64259dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
6439c660362SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v10, v8, a0
64407d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
64559dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
64659dd10faSLuke Lau  %head = insertelement <16 x i8> poison, i8 %b, i32 0
64759dd10faSLuke Lau  %splat = shufflevector <16 x i8> %head, <16 x i8> poison, <16 x i32> zeroinitializer
64859dd10faSLuke Lau  %x = zext <16 x i8> %a to <16 x i16>
64959dd10faSLuke Lau  %y = zext <16 x i8> %splat to <16 x i16>
65059dd10faSLuke Lau  %z = shl <16 x i16> %x, %y
65159dd10faSLuke Lau  ret <16 x i16> %z
65259dd10faSLuke Lau}
65359dd10faSLuke Lau
65459dd10faSLuke Laudefine <16 x i16> @vwsll_vi_v16i16(<16 x i8> %a) {
65559dd10faSLuke Lau; CHECK-LABEL: vwsll_vi_v16i16:
65659dd10faSLuke Lau; CHECK:       # %bb.0:
65759dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
65859dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v10, v8
65959dd10faSLuke Lau; CHECK-NEXT:    vsll.vi v8, v10, 2
66059dd10faSLuke Lau; CHECK-NEXT:    ret
66159dd10faSLuke Lau;
66259dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vi_v16i16:
66359dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
66407d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
66507d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vi v10, v8, 2
66607d5f491SLuke Lau; CHECK-ZVBB-NEXT:    vmv2r.v v8, v10
66759dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
66859dd10faSLuke Lau  %x = zext <16 x i8> %a to <16 x i16>
66959dd10faSLuke Lau  %z = shl <16 x i16> %x, splat (i16 2)
67059dd10faSLuke Lau  ret <16 x i16> %z
67159dd10faSLuke Lau}
67259dd10faSLuke Lau
67359dd10faSLuke Lau; ==============================================================================
67459dd10faSLuke Lau; i8 -> i64
67559dd10faSLuke Lau; ==============================================================================
67659dd10faSLuke Lau
67759dd10faSLuke Laudefine <4 x i64> @vwsll_vv_v4i64_v4i8_sext(<4 x i8> %a, <4 x i8> %b) {
67859dd10faSLuke Lau; CHECK-LABEL: vwsll_vv_v4i64_v4i8_sext:
67959dd10faSLuke Lau; CHECK:       # %bb.0:
68059dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
68159dd10faSLuke Lau; CHECK-NEXT:    vzext.vf8 v10, v8
68259dd10faSLuke Lau; CHECK-NEXT:    vsext.vf8 v12, v9
68359dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
68459dd10faSLuke Lau; CHECK-NEXT:    ret
68559dd10faSLuke Lau;
68659dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vv_v4i64_v4i8_sext:
68759dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
68859dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
68959dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vzext.vf8 v10, v8
69059dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsext.vf8 v12, v9
69159dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsll.vv v8, v10, v12
69259dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
69359dd10faSLuke Lau  %x = zext <4 x i8> %a to <4 x i64>
69459dd10faSLuke Lau  %y = sext <4 x i8> %b to <4 x i64>
69559dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
69659dd10faSLuke Lau  ret <4 x i64> %z
69759dd10faSLuke Lau}
69859dd10faSLuke Lau
69959dd10faSLuke Laudefine <4 x i64> @vwsll_vv_v4i64_v4i8_zext(<4 x i8> %a, <4 x i8> %b) {
70059dd10faSLuke Lau; CHECK-LABEL: vwsll_vv_v4i64_v4i8_zext:
70159dd10faSLuke Lau; CHECK:       # %bb.0:
70259dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
70359dd10faSLuke Lau; CHECK-NEXT:    vzext.vf8 v10, v8
70459dd10faSLuke Lau; CHECK-NEXT:    vzext.vf8 v12, v9
70559dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
70659dd10faSLuke Lau; CHECK-NEXT:    ret
70759dd10faSLuke Lau;
70859dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vv_v4i64_v4i8_zext:
70959dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
7109c660362SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
7119c660362SLuke Lau; CHECK-ZVBB-NEXT:    vzext.vf4 v10, v8
7129c660362SLuke Lau; CHECK-ZVBB-NEXT:    vzext.vf4 v11, v9
7139c660362SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vv v8, v10, v11
71459dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
71559dd10faSLuke Lau  %x = zext <4 x i8> %a to <4 x i64>
71659dd10faSLuke Lau  %y = zext <4 x i8> %b to <4 x i64>
71759dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
71859dd10faSLuke Lau  ret <4 x i64> %z
71959dd10faSLuke Lau}
72059dd10faSLuke Lau
72159dd10faSLuke Laudefine <4 x i64> @vwsll_vx_i64_v4i64_v4i8(<4 x i8> %a, i64 %b) {
72259dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i64_v4i64_v4i8:
72359dd10faSLuke Lau; CHECK:       # %bb.0:
72459dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
72559dd10faSLuke Lau; CHECK-NEXT:    vzext.vf8 v10, v8
72659dd10faSLuke Lau; CHECK-NEXT:    vsll.vx v8, v10, a0
72759dd10faSLuke Lau; CHECK-NEXT:    ret
72859dd10faSLuke Lau;
72959dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i64_v4i64_v4i8:
73059dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
73159dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
73259dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vzext.vf8 v10, v8
73359dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsll.vx v8, v10, a0
73459dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
73559dd10faSLuke Lau  %head = insertelement <4 x i64> poison, i64 %b, i32 0
73659dd10faSLuke Lau  %splat = shufflevector <4 x i64> %head, <4 x i64> poison, <4 x i32> zeroinitializer
73759dd10faSLuke Lau  %x = zext <4 x i8> %a to <4 x i64>
73859dd10faSLuke Lau  %z = shl <4 x i64> %x, %splat
73959dd10faSLuke Lau  ret <4 x i64> %z
74059dd10faSLuke Lau}
74159dd10faSLuke Lau
74259dd10faSLuke Laudefine <4 x i64> @vwsll_vx_i32_v4i64_v4i8_sext(<4 x i8> %a, i32 %b) {
74359dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i32_v4i64_v4i8_sext:
74459dd10faSLuke Lau; CHECK:       # %bb.0:
74559dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
74659dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
74759dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
74859dd10faSLuke Lau; CHECK-NEXT:    vzext.vf8 v10, v8
74959dd10faSLuke Lau; CHECK-NEXT:    vsext.vf2 v12, v9
75059dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
75159dd10faSLuke Lau; CHECK-NEXT:    ret
75259dd10faSLuke Lau;
75359dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i32_v4i64_v4i8_sext:
75459dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
75559dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
75659dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vmv.v.x v9, a0
75759dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
75859dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vzext.vf8 v10, v8
75959dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsext.vf2 v12, v9
76059dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsll.vv v8, v10, v12
76159dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
76259dd10faSLuke Lau  %head = insertelement <4 x i32> poison, i32 %b, i32 0
76359dd10faSLuke Lau  %splat = shufflevector <4 x i32> %head, <4 x i32> poison, <4 x i32> zeroinitializer
76459dd10faSLuke Lau  %x = zext <4 x i8> %a to <4 x i64>
76559dd10faSLuke Lau  %y = sext <4 x i32> %splat to <4 x i64>
76659dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
76759dd10faSLuke Lau  ret <4 x i64> %z
76859dd10faSLuke Lau}
76959dd10faSLuke Lau
77059dd10faSLuke Laudefine <4 x i64> @vwsll_vx_i32_v4i64_v4i8_zext(<4 x i8> %a, i32 %b) {
77159dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i32_v4i64_v4i8_zext:
77259dd10faSLuke Lau; CHECK:       # %bb.0:
77359dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
77459dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
77559dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
77659dd10faSLuke Lau; CHECK-NEXT:    vzext.vf8 v10, v8
77759dd10faSLuke Lau; CHECK-NEXT:    vzext.vf2 v12, v9
77859dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
77959dd10faSLuke Lau; CHECK-NEXT:    ret
78059dd10faSLuke Lau;
78159dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i32_v4i64_v4i8_zext:
78259dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
78359dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
7849c660362SLuke Lau; CHECK-ZVBB-NEXT:    vzext.vf4 v10, v8
7859c660362SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v8, v10, a0
78659dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
78759dd10faSLuke Lau  %head = insertelement <4 x i32> poison, i32 %b, i32 0
78859dd10faSLuke Lau  %splat = shufflevector <4 x i32> %head, <4 x i32> poison, <4 x i32> zeroinitializer
78959dd10faSLuke Lau  %x = zext <4 x i8> %a to <4 x i64>
79059dd10faSLuke Lau  %y = zext <4 x i32> %splat to <4 x i64>
79159dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
79259dd10faSLuke Lau  ret <4 x i64> %z
79359dd10faSLuke Lau}
79459dd10faSLuke Lau
79559dd10faSLuke Laudefine <4 x i64> @vwsll_vx_i16_v4i64_v4i8_sext(<4 x i8> %a, i16 %b) {
79659dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i16_v4i64_v4i8_sext:
79759dd10faSLuke Lau; CHECK:       # %bb.0:
79859dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
79959dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
80059dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
80159dd10faSLuke Lau; CHECK-NEXT:    vzext.vf8 v10, v8
80259dd10faSLuke Lau; CHECK-NEXT:    vsext.vf4 v12, v9
80359dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
80459dd10faSLuke Lau; CHECK-NEXT:    ret
80559dd10faSLuke Lau;
80659dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i16_v4i64_v4i8_sext:
80759dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
80859dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
80959dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vmv.v.x v9, a0
81059dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
81159dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vzext.vf8 v10, v8
81259dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsext.vf4 v12, v9
81359dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsll.vv v8, v10, v12
81459dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
81559dd10faSLuke Lau  %head = insertelement <4 x i16> poison, i16 %b, i32 0
81659dd10faSLuke Lau  %splat = shufflevector <4 x i16> %head, <4 x i16> poison, <4 x i32> zeroinitializer
81759dd10faSLuke Lau  %x = zext <4 x i8> %a to <4 x i64>
81859dd10faSLuke Lau  %y = sext <4 x i16> %splat to <4 x i64>
81959dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
82059dd10faSLuke Lau  ret <4 x i64> %z
82159dd10faSLuke Lau}
82259dd10faSLuke Lau
82359dd10faSLuke Laudefine <4 x i64> @vwsll_vx_i16_v4i64_v4i8_zext(<4 x i8> %a, i16 %b) {
82459dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i16_v4i64_v4i8_zext:
82559dd10faSLuke Lau; CHECK:       # %bb.0:
82659dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
82759dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
82859dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
82959dd10faSLuke Lau; CHECK-NEXT:    vzext.vf8 v10, v8
83059dd10faSLuke Lau; CHECK-NEXT:    vzext.vf4 v12, v9
83159dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
83259dd10faSLuke Lau; CHECK-NEXT:    ret
83359dd10faSLuke Lau;
83459dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i16_v4i64_v4i8_zext:
83559dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
8369c660362SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
8379c660362SLuke Lau; CHECK-ZVBB-NEXT:    vzext.vf4 v10, v8
8389c660362SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v8, v10, a0
83959dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
84059dd10faSLuke Lau  %head = insertelement <4 x i16> poison, i16 %b, i32 0
84159dd10faSLuke Lau  %splat = shufflevector <4 x i16> %head, <4 x i16> poison, <4 x i32> zeroinitializer
84259dd10faSLuke Lau  %x = zext <4 x i8> %a to <4 x i64>
84359dd10faSLuke Lau  %y = zext <4 x i16> %splat to <4 x i64>
84459dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
84559dd10faSLuke Lau  ret <4 x i64> %z
84659dd10faSLuke Lau}
84759dd10faSLuke Lau
84859dd10faSLuke Laudefine <4 x i64> @vwsll_vx_i8_v4i64_v4i8_sext(<4 x i8> %a, i8 %b) {
84959dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i8_v4i64_v4i8_sext:
85059dd10faSLuke Lau; CHECK:       # %bb.0:
85159dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
85259dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
85359dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
85459dd10faSLuke Lau; CHECK-NEXT:    vzext.vf8 v10, v8
85559dd10faSLuke Lau; CHECK-NEXT:    vsext.vf8 v12, v9
85659dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
85759dd10faSLuke Lau; CHECK-NEXT:    ret
85859dd10faSLuke Lau;
85959dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i8_v4i64_v4i8_sext:
86059dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
86159dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
86259dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vmv.v.x v9, a0
86359dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
86459dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vzext.vf8 v10, v8
86559dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsext.vf8 v12, v9
86659dd10faSLuke Lau; CHECK-ZVBB-NEXT:    vsll.vv v8, v10, v12
86759dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
86859dd10faSLuke Lau  %head = insertelement <4 x i8> poison, i8 %b, i32 0
86959dd10faSLuke Lau  %splat = shufflevector <4 x i8> %head, <4 x i8> poison, <4 x i32> zeroinitializer
87059dd10faSLuke Lau  %x = zext <4 x i8> %a to <4 x i64>
87159dd10faSLuke Lau  %y = sext <4 x i8> %splat to <4 x i64>
87259dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
87359dd10faSLuke Lau  ret <4 x i64> %z
87459dd10faSLuke Lau}
87559dd10faSLuke Lau
87659dd10faSLuke Laudefine <4 x i64> @vwsll_vx_i8_v4i64_v4i8_zext(<4 x i8> %a, i8 %b) {
87759dd10faSLuke Lau; CHECK-LABEL: vwsll_vx_i8_v4i64_v4i8_zext:
87859dd10faSLuke Lau; CHECK:       # %bb.0:
87959dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
88059dd10faSLuke Lau; CHECK-NEXT:    vmv.v.x v9, a0
88159dd10faSLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
88259dd10faSLuke Lau; CHECK-NEXT:    vzext.vf8 v10, v8
88359dd10faSLuke Lau; CHECK-NEXT:    vzext.vf8 v12, v9
88459dd10faSLuke Lau; CHECK-NEXT:    vsll.vv v8, v10, v12
88559dd10faSLuke Lau; CHECK-NEXT:    ret
88659dd10faSLuke Lau;
88759dd10faSLuke Lau; CHECK-ZVBB-LABEL: vwsll_vx_i8_v4i64_v4i8_zext:
88859dd10faSLuke Lau; CHECK-ZVBB:       # %bb.0:
8899c660362SLuke Lau; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
8909c660362SLuke Lau; CHECK-ZVBB-NEXT:    vzext.vf4 v10, v8
8919c660362SLuke Lau; CHECK-ZVBB-NEXT:    vwsll.vx v8, v10, a0
89259dd10faSLuke Lau; CHECK-ZVBB-NEXT:    ret
89359dd10faSLuke Lau  %head = insertelement <4 x i8> poison, i8 %b, i32 0
89459dd10faSLuke Lau  %splat = shufflevector <4 x i8> %head, <4 x i8> poison, <4 x i32> zeroinitializer
89559dd10faSLuke Lau  %x = zext <4 x i8> %a to <4 x i64>
89659dd10faSLuke Lau  %y = zext <4 x i8> %splat to <4 x i64>
89759dd10faSLuke Lau  %z = shl <4 x i64> %x, %y
89859dd10faSLuke Lau  ret <4 x i64> %z
89959dd10faSLuke Lau}
90059dd10faSLuke Lau
90159dd10faSLuke Laudefine <4 x i64> @vwsll_vi_v4i64_v4i8(<4 x i8> %a) {
90259dd10faSLuke Lau; CHECK-LABEL: vwsll_vi_v4i64_v4i8:
90359dd10faSLuke Lau; CHECK:       # %bb.0:
90459dd10faSLuke Lau; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
90559dd10faSLuke Lau; CHECK-NEXT:    vzext.vf8 v10, v8
90659dd10faSLuke Lau; CHECK-NEXT:    vsll.vi v8, v10, 2
90759dd10faSLuke Lau; CHECK-NEXT:    ret
90859dd10faSLuke Lau;
909*d85f1054SCraig Topper; CHECK-ZVBB-LABEL: vwsll_vi_v4i64_v4i8:
910*d85f1054SCraig Topper; CHECK-ZVBB:       # %bb.0:
911*d85f1054SCraig Topper; CHECK-ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
912*d85f1054SCraig Topper; CHECK-ZVBB-NEXT:    vzext.vf4 v10, v8
913*d85f1054SCraig Topper; CHECK-ZVBB-NEXT:    vwsll.vi v8, v10, 2
914*d85f1054SCraig Topper; CHECK-ZVBB-NEXT:    ret
91559dd10faSLuke Lau  %x = zext <4 x i8> %a to <4 x i64>
91659dd10faSLuke Lau  %z = shl <4 x i64> %x, splat (i64 2)
91759dd10faSLuke Lau  ret <4 x i64> %z
91859dd10faSLuke Lau}
919