; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc < %s -mtriple=riscv64 -mattr=+v | FileCheck %s define @vwadd_tu( %arg, %arg1, i32 signext %arg2) { ; CHECK-LABEL: vwadd_tu: ; CHECK: # %bb.0: # %bb ; CHECK-NEXT: slli a0, a0, 32 ; CHECK-NEXT: srli a0, a0, 32 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma ; CHECK-NEXT: vsext.vf2 v10, v8 ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, tu, ma ; CHECK-NEXT: vwadd.wv v9, v9, v10 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret bb: %tmp = call @llvm.vp.sext.nxv2i32.nxv2i8( %arg, splat (i1 true), i32 %arg2) %tmp3 = call @llvm.vp.add.nxv2i32( %arg1, %tmp, splat (i1 true), i32 %arg2) %tmp4 = call @llvm.vp.merge.nxv2i32( splat (i1 true), %tmp3, %arg1, i32 %arg2) ret %tmp4 } define @vwaddu_tu( %arg, %arg1, i32 signext %arg2) { ; CHECK-LABEL: vwaddu_tu: ; CHECK: # %bb.0: # %bb ; CHECK-NEXT: slli a0, a0, 32 ; CHECK-NEXT: srli a0, a0, 32 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma ; CHECK-NEXT: vzext.vf2 v10, v8 ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, tu, ma ; CHECK-NEXT: vwaddu.wv v9, v9, v10 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret bb: %tmp = call @llvm.vp.zext.nxv2i32.nxv2i8( %arg, splat (i1 true), i32 %arg2) %tmp3 = call @llvm.vp.add.nxv2i32( %arg1, %tmp, splat (i1 true), i32 %arg2) %tmp4 = call @llvm.vp.merge.nxv2i32( splat (i1 true), %tmp3, %arg1, i32 %arg2) ret %tmp4 } define @vwadd_vv_vpnxv2i32_vpnxv2i16_vpnxv2i16( %x, %y, %m, i32 signext %evl) { ; CHECK-LABEL: vwadd_vv_vpnxv2i32_vpnxv2i16_vpnxv2i16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma ; CHECK-NEXT: vwadd.vv v10, v8, v9 ; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %x.sext = call @llvm.vp.sext.nxv2i32.nxv2i16( %x, %m, i32 %evl) %y.sext = call @llvm.vp.sext.nxv2i32.nxv2i16( %y, %m, i32 %evl) %add = call @llvm.vp.add.nxv2i32( %x.sext, %y.sext, %m, i32 %evl) ret %add } define @vwadd_vv_vpnxv2i32_vpnxv2i16_nxv2i16( %x, %y, %m, i32 signext %evl) { ; CHECK-LABEL: vwadd_vv_vpnxv2i32_vpnxv2i16_nxv2i16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma ; CHECK-NEXT: vwadd.vv v10, v8, v9 ; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %x.sext = call @llvm.vp.sext.nxv2i32.nxv2i16( %x, %m, i32 %evl) %y.sext = sext %y to %add = call @llvm.vp.add.nxv2i32( %x.sext, %y.sext, %m, i32 %evl) ret %add } define @vwadd_vv_vpnxv2i32_nxv2i16_nxv2i16( %x, %y, %m, i32 signext %evl) { ; CHECK-LABEL: vwadd_vv_vpnxv2i32_nxv2i16_nxv2i16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma ; CHECK-NEXT: vwadd.vv v10, v8, v9 ; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %x.sext = sext %x to %y.sext = sext %y to %add = call @llvm.vp.add.nxv2i32( %x.sext, %y.sext, %m, i32 %evl) ret %add } define @vwadd_vv_nxv2i32_vpnxv2i16_vpnxv2i16( %x, %y, %m, i32 signext %evl) { ; CHECK-LABEL: vwadd_vv_nxv2i32_vpnxv2i16_vpnxv2i16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma ; CHECK-NEXT: vwadd.vv v10, v8, v9 ; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %x.sext = call @llvm.vp.sext.nxv2i32.nxv2i16( %x, %m, i32 %evl) %y.sext = call @llvm.vp.sext.nxv2i32.nxv2i16( %y, %m, i32 %evl) %add = add %x.sext, %y.sext ret %add }