; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s declare @llvm.vp.sext.nxv1i32.nxv1i16(, , i32) declare @llvm.vp.trunc.nxv1i16.nxv1i32(, , i32) declare @llvm.vp.ashr.nxv1i32(, , , i32) define @vsra_vv_nxv1i16( %a, %b, %m, i32 zeroext %evl) { ; CHECK-LABEL: vsra_vv_nxv1i16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma ; CHECK-NEXT: vnsra.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer %bext = call @llvm.vp.sext.nxv1i32.nxv1i16( %b, %allones, i32 %evl) %v = call @llvm.vp.ashr.nxv1i32( %a, %bext, %allones, i32 %evl) %vr = call @llvm.vp.trunc.nxv1i16.nxv1i32( %v, %m, i32 %evl) ret %vr } define @vsra_vv_nxv1i16_unmasked( %a, %b, i32 zeroext %evl) { ; CHECK-LABEL: vsra_vv_nxv1i16_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma ; CHECK-NEXT: vnsra.wv v8, v8, v9 ; CHECK-NEXT: ret %head = insertelement poison, i1 -1, i32 0 %allones = shufflevector %head, poison, zeroinitializer %bext = call @llvm.vp.sext.nxv1i32.nxv1i16( %b, %allones, i32 %evl) %v = call @llvm.vp.ashr.nxv1i32( %a, %bext, %allones, i32 %evl) %vr = call @llvm.vp.trunc.nxv1i16.nxv1i32( %v, %allones, i32 %evl) ret %vr } declare @llvm.vp.sext.nxv1i64.nxv1i32(, , i32) declare @llvm.vp.trunc.nxv1i32.nxv1i64(, , i32) declare @llvm.vp.ashr.nxv1i64(, , , i32) define @vsra_vv_nxv1i64( %a, %b, %m, i32 zeroext %evl) { ; CHECK-LABEL: vsra_vv_nxv1i64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma ; CHECK-NEXT: vnsra.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer %bext = call @llvm.vp.sext.nxv1i64.nxv1i32( %b, %allones, i32 %evl) %v = call @llvm.vp.ashr.nxv1i64( %a, %bext, %allones, i32 %evl) %vr = call @llvm.vp.trunc.nxv1i32.nxv1i64( %v, %m, i32 %evl) ret %vr } define @vsra_vv_nxv1i64_unmasked( %a, %b, %m, i32 zeroext %evl) { ; CHECK-LABEL: vsra_vv_nxv1i64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma ; CHECK-NEXT: vnsra.wv v8, v8, v9 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer %bext = call @llvm.vp.sext.nxv1i64.nxv1i32( %b, %allones, i32 %evl) %v = call @llvm.vp.ashr.nxv1i64( %a, %bext, %allones, i32 %evl) %vr = call @llvm.vp.trunc.nxv1i32.nxv1i64( %v, %allones, i32 %evl) ret %vr }