; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK define @vwadd_wv_mask_v8i32( %x, %y) { ; CHECK-LABEL: vwadd_wv_mask_v8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma ; CHECK-NEXT: vmv4r.v v24, v8 ; CHECK-NEXT: li a0, 42 ; CHECK-NEXT: vmslt.vx v0, v8, a0 ; CHECK-NEXT: vmv8r.v v8, v16 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, tu, mu ; CHECK-NEXT: vwadd.wv v8, v8, v24, v0.t ; CHECK-NEXT: ret %mask = icmp slt %x, splat (i32 42) %a = select %mask, %x, zeroinitializer %sa = sext %a to %ret = add %sa, %y ret %ret } define @vwaddu_wv_mask_v8i32( %x, %y) { ; CHECK-LABEL: vwaddu_wv_mask_v8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma ; CHECK-NEXT: vmv4r.v v24, v8 ; CHECK-NEXT: li a0, 42 ; CHECK-NEXT: vmslt.vx v0, v8, a0 ; CHECK-NEXT: vmv8r.v v8, v16 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, tu, mu ; CHECK-NEXT: vwaddu.wv v8, v8, v24, v0.t ; CHECK-NEXT: ret %mask = icmp slt %x, splat (i32 42) %a = select %mask, %x, zeroinitializer %sa = zext %a to %ret = add %sa, %y ret %ret } define @vwaddu_vv_mask_v8i32( %x, %y) { ; CHECK-LABEL: vwaddu_vv_mask_v8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma ; CHECK-NEXT: vmv4r.v v16, v12 ; CHECK-NEXT: li a0, 42 ; CHECK-NEXT: vmslt.vx v0, v8, a0 ; CHECK-NEXT: vmv.v.i v12, 0 ; CHECK-NEXT: vmerge.vvm v20, v12, v8, v0 ; CHECK-NEXT: vwaddu.vv v8, v20, v16 ; CHECK-NEXT: ret %mask = icmp slt %x, splat (i32 42) %a = select %mask, %x, zeroinitializer %sa = zext %a to %sy = zext %y to %ret = add %sa, %sy ret %ret } define @vwadd_wv_mask_v8i32_commutative( %x, %y) { ; CHECK-LABEL: vwadd_wv_mask_v8i32_commutative: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma ; CHECK-NEXT: vmv4r.v v24, v8 ; CHECK-NEXT: li a0, 42 ; CHECK-NEXT: vmslt.vx v0, v8, a0 ; CHECK-NEXT: vmv8r.v v8, v16 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, tu, mu ; CHECK-NEXT: vwadd.wv v8, v8, v24, v0.t ; CHECK-NEXT: ret %mask = icmp slt %x, splat (i32 42) %a = select %mask, %x, zeroinitializer %sa = sext %a to %ret = add %y, %sa ret %ret } define @vwadd_wv_mask_v8i32_nonzero( %x, %y) { ; CHECK-LABEL: vwadd_wv_mask_v8i32_nonzero: ; CHECK: # %bb.0: ; CHECK-NEXT: li a0, 42 ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma ; CHECK-NEXT: vmslt.vx v0, v8, a0 ; CHECK-NEXT: vmv.v.i v12, 1 ; CHECK-NEXT: vmerge.vvm v24, v12, v8, v0 ; CHECK-NEXT: vwadd.wv v8, v16, v24 ; CHECK-NEXT: ret %mask = icmp slt %x, splat (i32 42) %a = select %mask, %x, splat (i32 1) %sa = sext %a to %ret = add %sa, %y ret %ret }