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