diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -557,10 +557,11 @@ !subst("_B64", "", !subst("_MASK", "", !subst("_COMMUTABLE", "", + !subst("_TIED", "", !subst("F16", "F", !subst("F32", "F", !subst("F64", "F", - !subst("Pseudo", "", PseudoInst)))))))))))))))))))); + !subst("Pseudo", "", PseudoInst))))))))))))))))))))); } // The destination vector register group for a masked vector instruction cannot @@ -955,6 +956,27 @@ let BaseInstr = !cast(PseudoToVInst.VInst); } +// Special version of VPseudoBinaryMask where we pretend the first source is +// tied to the destination so we can workaround the earlyclobber constraint. +// This allows maskedoff and rs2 to be the same register. +class VPseudoTiedBinaryMask : + Pseudo<(outs GetVRegNoV0.R:$rd), + (ins GetVRegNoV0.R:$merge, + Op2Class:$rs1, + VMaskOp:$vm, GPR:$vl, ixlenimm:$sew), []>, + RISCVVPseudo { + let mayLoad = 0; + let mayStore = 0; + let hasSideEffects = 0; + let Constraints = Join<[Constraint, "$rd = $merge"], ",">.ret; + let HasVLOp = 1; + let HasSEWOp = 1; + let HasMergeOp = 0; // Merge is also rs2. + let BaseInstr = !cast(PseudoToVInst.VInst); +} + class VPseudoBinaryCarryIn { + let VLMul = MInfo.value in { + def "_" # MInfo.MX # "_MASK_TIED" : VPseudoTiedBinaryMask; + } +} + multiclass VPseudoBinaryV_VV { foreach m = MxList.m in defm _VV : VPseudoBinary; @@ -1534,9 +1566,12 @@ } multiclass VPseudoBinaryW_WV { - foreach m = MxList.m[0-5] in + foreach m = MxList.m[0-5] in { defm _WV : VPseudoBinary; + defm _WV : VPseudoTiedBinary; + } } multiclass VPseudoBinaryW_WX { @@ -2224,6 +2259,25 @@ (op2_type op2_kind:$rs2), (mask_type V0), GPR:$vl, sew)>; +class VPatTiedBinaryMask : + Pat<(result_type (!cast(intrinsic_name#"_mask") + (result_type result_reg_class:$merge), + (result_type result_reg_class:$merge), + (op2_type op2_kind:$rs2), + (mask_type V0), + (XLenVT (VLOp GPR:$vl)))), + (!cast(inst#"_MASK_TIED") + (result_type result_reg_class:$merge), + (op2_type op2_kind:$rs2), + (mask_type V0), GPR:$vl, sew)>; + class VPatTernaryNoMask; defm : VPatBinary @llvm.riscv.vfwadd.w.mask.nxv1f32.nxv1f16( @@ -845,9 +843,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv2f32_nxv2f32_nxv2f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vfwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vfwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv2f32.nxv2f16( @@ -864,9 +860,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv4f32_nxv4f32_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vfwadd.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vfwadd.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv4f32.nxv4f16( @@ -883,9 +877,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv8f32_nxv8f32_nxv8f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vfwadd.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vfwadd.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv8f32.nxv8f16( @@ -902,9 +894,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv16f32_nxv16f32_nxv16f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vfwadd.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vfwadd.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16( @@ -921,9 +911,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv1f64_nxv1f64_nxv1f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vfwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vfwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv1f64.nxv1f32( @@ -940,9 +928,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv2f64_nxv2f64_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vfwadd.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vfwadd.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv2f64.nxv2f32( @@ -959,9 +945,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv4f64_nxv4f64_nxv4f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vfwadd.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vfwadd.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv4f64.nxv4f32( @@ -978,9 +962,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv8f64_nxv8f64_nxv8f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vfwadd.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vfwadd.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfwadd.w-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vfwadd.w-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfwadd.w-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfwadd.w-rv64.ll @@ -826,9 +826,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv1f32_nxv1f32_nxv1f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vfwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vfwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv1f32.nxv1f16( @@ -845,9 +843,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv2f32_nxv2f32_nxv2f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vfwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vfwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv2f32.nxv2f16( @@ -864,9 +860,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv4f32_nxv4f32_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vfwadd.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vfwadd.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv4f32.nxv4f16( @@ -883,9 +877,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv8f32_nxv8f32_nxv8f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vfwadd.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vfwadd.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv8f32.nxv8f16( @@ -902,9 +894,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv16f32_nxv16f32_nxv16f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vfwadd.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vfwadd.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16( @@ -921,9 +911,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv1f64_nxv1f64_nxv1f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vfwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vfwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv1f64.nxv1f32( @@ -940,9 +928,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv2f64_nxv2f64_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vfwadd.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vfwadd.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv2f64.nxv2f32( @@ -959,9 +945,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv4f64_nxv4f64_nxv4f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vfwadd.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vfwadd.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv4f64.nxv4f32( @@ -978,9 +962,7 @@ ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv8f64_nxv8f64_nxv8f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vfwadd.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vfwadd.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfwsub.w-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vfwsub.w-rv32.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfwsub.w-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfwsub.w-rv32.ll @@ -826,9 +826,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv1f32_nxv1f32_nxv1f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vfwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vfwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv1f32.nxv1f16( @@ -845,9 +843,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv2f32_nxv2f32_nxv2f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vfwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vfwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv2f32.nxv2f16( @@ -864,9 +860,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv4f32_nxv4f32_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vfwsub.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vfwsub.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv4f32.nxv4f16( @@ -883,9 +877,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv8f32_nxv8f32_nxv8f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vfwsub.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vfwsub.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv8f32.nxv8f16( @@ -902,9 +894,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv16f32_nxv16f32_nxv16f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vfwsub.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vfwsub.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16( @@ -921,9 +911,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv1f64_nxv1f64_nxv1f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vfwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vfwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv1f64.nxv1f32( @@ -940,9 +928,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv2f64_nxv2f64_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vfwsub.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vfwsub.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv2f64.nxv2f32( @@ -959,9 +945,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv4f64_nxv4f64_nxv4f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vfwsub.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vfwsub.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv4f64.nxv4f32( @@ -978,9 +962,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv8f64_nxv8f64_nxv8f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vfwsub.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vfwsub.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfwsub.w-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vfwsub.w-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfwsub.w-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfwsub.w-rv64.ll @@ -826,9 +826,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv1f32_nxv1f32_nxv1f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vfwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vfwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv1f32.nxv1f16( @@ -845,9 +843,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv2f32_nxv2f32_nxv2f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vfwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vfwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv2f32.nxv2f16( @@ -864,9 +860,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv4f32_nxv4f32_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vfwsub.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vfwsub.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv4f32.nxv4f16( @@ -883,9 +877,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv8f32_nxv8f32_nxv8f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vfwsub.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vfwsub.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv8f32.nxv8f16( @@ -902,9 +894,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv16f32_nxv16f32_nxv16f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vfwsub.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vfwsub.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16( @@ -921,9 +911,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv1f64_nxv1f64_nxv1f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vfwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vfwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv1f64.nxv1f32( @@ -940,9 +928,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv2f64_nxv2f64_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vfwsub.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vfwsub.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv2f64.nxv2f32( @@ -959,9 +945,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv4f64_nxv4f64_nxv4f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vfwsub.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vfwsub.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv4f64.nxv4f32( @@ -978,9 +962,7 @@ ; CHECK-LABEL: intrinsic_vfwsub.w_mask_wv_tie_nxv8f64_nxv8f64_nxv8f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vfwsub.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vfwsub.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vwadd.w-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vwadd.w-rv32.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwadd.w-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwadd.w-rv32.ll @@ -1343,9 +1343,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv1i16_nxv1i16_nxv1i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf8,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv1i16.nxv1i8( @@ -1362,9 +1360,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv2i16_nxv2i16_nxv2i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv2i16.nxv2i8( @@ -1381,9 +1377,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv4i16_nxv4i16_nxv4i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv4i16.nxv4i8( @@ -1400,9 +1394,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv8i16_nxv8i16_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwadd.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwadd.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv8i16.nxv8i8( @@ -1419,9 +1411,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv16i16_nxv16i16_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwadd.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwadd.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv16i16.nxv16i8( @@ -1438,9 +1428,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv32i16_nxv32i16_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwadd.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwadd.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv32i16.nxv32i8( @@ -1457,9 +1445,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv1i32_nxv1i32_nxv1i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv1i32.nxv1i16( @@ -1476,9 +1462,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv2i32_nxv2i32_nxv2i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv2i32.nxv2i16( @@ -1495,9 +1479,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv4i32_nxv4i32_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwadd.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwadd.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv4i32.nxv4i16( @@ -1514,9 +1496,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv8i32_nxv8i32_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwadd.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwadd.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv8i32.nxv8i16( @@ -1533,9 +1513,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv16i32_nxv16i32_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwadd.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwadd.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv16i32.nxv16i16( @@ -1552,9 +1530,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv1i64_nxv1i64_nxv1i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv1i64.nxv1i32( @@ -1571,9 +1547,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv2i64_nxv2i64_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwadd.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwadd.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv2i64.nxv2i32( @@ -1590,9 +1564,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv4i64_nxv4i64_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwadd.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwadd.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv4i64.nxv4i32( @@ -1609,9 +1581,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv8i64_nxv8i64_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwadd.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwadd.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv8i64.nxv8i32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vwadd.w-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vwadd.w-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwadd.w-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwadd.w-rv64.ll @@ -1343,9 +1343,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv1i16_nxv1i16_nxv1i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf8,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv1i16.nxv1i8( @@ -1362,9 +1360,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv2i16_nxv2i16_nxv2i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv2i16.nxv2i8( @@ -1381,9 +1377,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv4i16_nxv4i16_nxv4i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv4i16.nxv4i8( @@ -1400,9 +1394,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv8i16_nxv8i16_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwadd.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwadd.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv8i16.nxv8i8( @@ -1419,9 +1411,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv16i16_nxv16i16_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwadd.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwadd.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv16i16.nxv16i8( @@ -1438,9 +1428,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv32i16_nxv32i16_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwadd.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwadd.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv32i16.nxv32i8( @@ -1457,9 +1445,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv1i32_nxv1i32_nxv1i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv1i32.nxv1i16( @@ -1476,9 +1462,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv2i32_nxv2i32_nxv2i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv2i32.nxv2i16( @@ -1495,9 +1479,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv4i32_nxv4i32_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwadd.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwadd.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv4i32.nxv4i16( @@ -1514,9 +1496,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv8i32_nxv8i32_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwadd.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwadd.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv8i32.nxv8i16( @@ -1533,9 +1513,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv16i32_nxv16i32_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwadd.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwadd.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv16i32.nxv16i16( @@ -1552,9 +1530,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv1i64_nxv1i64_nxv1i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwadd.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwadd.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv1i64.nxv1i32( @@ -1571,9 +1547,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv2i64_nxv2i64_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwadd.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwadd.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv2i64.nxv2i32( @@ -1590,9 +1564,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv4i64_nxv4i64_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwadd.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwadd.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv4i64.nxv4i32( @@ -1609,9 +1581,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_mask_wv_tie_nxv8i64_nxv8i64_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwadd.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwadd.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.mask.nxv8i64.nxv8i32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vwaddu.w-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vwaddu.w-rv32.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwaddu.w-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwaddu.w-rv32.ll @@ -1343,9 +1343,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv1i16_nxv1i16_nxv1i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf8,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwaddu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwaddu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv1i16.nxv1i8( @@ -1362,9 +1360,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv2i16_nxv2i16_nxv2i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwaddu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwaddu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv2i16.nxv2i8( @@ -1381,9 +1377,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv4i16_nxv4i16_nxv4i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwaddu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwaddu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv4i16.nxv4i8( @@ -1400,9 +1394,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv8i16_nxv8i16_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwaddu.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwaddu.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv8i16.nxv8i8( @@ -1419,9 +1411,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv16i16_nxv16i16_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwaddu.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwaddu.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv16i16.nxv16i8( @@ -1438,9 +1428,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv32i16_nxv32i16_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwaddu.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwaddu.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv32i16.nxv32i8( @@ -1457,9 +1445,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv1i32_nxv1i32_nxv1i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwaddu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwaddu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv1i32.nxv1i16( @@ -1476,9 +1462,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv2i32_nxv2i32_nxv2i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwaddu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwaddu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv2i32.nxv2i16( @@ -1495,9 +1479,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv4i32_nxv4i32_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwaddu.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwaddu.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv4i32.nxv4i16( @@ -1514,9 +1496,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv8i32_nxv8i32_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwaddu.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwaddu.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv8i32.nxv8i16( @@ -1533,9 +1513,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv16i32_nxv16i32_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwaddu.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwaddu.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv16i32.nxv16i16( @@ -1552,9 +1530,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv1i64_nxv1i64_nxv1i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwaddu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwaddu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv1i64.nxv1i32( @@ -1571,9 +1547,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv2i64_nxv2i64_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwaddu.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwaddu.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv2i64.nxv2i32( @@ -1590,9 +1564,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv4i64_nxv4i64_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwaddu.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwaddu.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv4i64.nxv4i32( @@ -1609,9 +1581,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv8i64_nxv8i64_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwaddu.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwaddu.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv8i64.nxv8i32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vwaddu.w-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vwaddu.w-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwaddu.w-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwaddu.w-rv64.ll @@ -1343,9 +1343,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv1i16_nxv1i16_nxv1i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf8,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwaddu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwaddu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv1i16.nxv1i8( @@ -1362,9 +1360,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv2i16_nxv2i16_nxv2i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwaddu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwaddu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv2i16.nxv2i8( @@ -1381,9 +1377,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv4i16_nxv4i16_nxv4i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwaddu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwaddu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv4i16.nxv4i8( @@ -1400,9 +1394,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv8i16_nxv8i16_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwaddu.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwaddu.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv8i16.nxv8i8( @@ -1419,9 +1411,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv16i16_nxv16i16_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwaddu.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwaddu.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv16i16.nxv16i8( @@ -1438,9 +1428,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv32i16_nxv32i16_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwaddu.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwaddu.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv32i16.nxv32i8( @@ -1457,9 +1445,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv1i32_nxv1i32_nxv1i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwaddu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwaddu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv1i32.nxv1i16( @@ -1476,9 +1462,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv2i32_nxv2i32_nxv2i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwaddu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwaddu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv2i32.nxv2i16( @@ -1495,9 +1479,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv4i32_nxv4i32_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwaddu.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwaddu.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv4i32.nxv4i16( @@ -1514,9 +1496,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv8i32_nxv8i32_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwaddu.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwaddu.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv8i32.nxv8i16( @@ -1533,9 +1513,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv16i32_nxv16i32_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwaddu.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwaddu.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv16i32.nxv16i16( @@ -1552,9 +1530,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv1i64_nxv1i64_nxv1i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwaddu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwaddu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv1i64.nxv1i32( @@ -1571,9 +1547,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv2i64_nxv2i64_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwaddu.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwaddu.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv2i64.nxv2i32( @@ -1590,9 +1564,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv4i64_nxv4i64_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwaddu.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwaddu.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv4i64.nxv4i32( @@ -1609,9 +1581,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_mask_wv_tie_nxv8i64_nxv8i64_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwaddu.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwaddu.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.mask.nxv8i64.nxv8i32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vwsub.w-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vwsub.w-rv32.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwsub.w-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwsub.w-rv32.ll @@ -1343,9 +1343,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv1i16_nxv1i16_nxv1i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf8,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv1i16.nxv1i8( @@ -1362,9 +1360,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv2i16_nxv2i16_nxv2i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv2i16.nxv2i8( @@ -1381,9 +1377,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv4i16_nxv4i16_nxv4i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv4i16.nxv4i8( @@ -1400,9 +1394,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv8i16_nxv8i16_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwsub.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwsub.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv8i16.nxv8i8( @@ -1419,9 +1411,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv16i16_nxv16i16_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwsub.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwsub.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv16i16.nxv16i8( @@ -1438,9 +1428,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv32i16_nxv32i16_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwsub.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsub.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv32i16.nxv32i8( @@ -1457,9 +1445,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv1i32_nxv1i32_nxv1i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv1i32.nxv1i16( @@ -1476,9 +1462,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv2i32_nxv2i32_nxv2i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv2i32.nxv2i16( @@ -1495,9 +1479,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv4i32_nxv4i32_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwsub.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwsub.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv4i32.nxv4i16( @@ -1514,9 +1496,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv8i32_nxv8i32_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwsub.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwsub.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv8i32.nxv8i16( @@ -1533,9 +1513,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv16i32_nxv16i32_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwsub.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsub.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv16i32.nxv16i16( @@ -1552,9 +1530,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv1i64_nxv1i64_nxv1i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv1i64.nxv1i32( @@ -1571,9 +1547,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv2i64_nxv2i64_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwsub.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwsub.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv2i64.nxv2i32( @@ -1590,9 +1564,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv4i64_nxv4i64_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwsub.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwsub.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv4i64.nxv4i32( @@ -1609,9 +1581,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv8i64_nxv8i64_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwsub.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsub.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv8i64.nxv8i32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vwsub.w-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vwsub.w-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwsub.w-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwsub.w-rv64.ll @@ -1343,9 +1343,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv1i16_nxv1i16_nxv1i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf8,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv1i16.nxv1i8( @@ -1362,9 +1360,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv2i16_nxv2i16_nxv2i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv2i16.nxv2i8( @@ -1381,9 +1377,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv4i16_nxv4i16_nxv4i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv4i16.nxv4i8( @@ -1400,9 +1394,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv8i16_nxv8i16_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwsub.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwsub.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv8i16.nxv8i8( @@ -1419,9 +1411,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv16i16_nxv16i16_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwsub.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwsub.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv16i16.nxv16i8( @@ -1438,9 +1428,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv32i16_nxv32i16_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwsub.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsub.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv32i16.nxv32i8( @@ -1457,9 +1445,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv1i32_nxv1i32_nxv1i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv1i32.nxv1i16( @@ -1476,9 +1462,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv2i32_nxv2i32_nxv2i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv2i32.nxv2i16( @@ -1495,9 +1479,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv4i32_nxv4i32_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwsub.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwsub.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv4i32.nxv4i16( @@ -1514,9 +1496,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv8i32_nxv8i32_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwsub.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwsub.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv8i32.nxv8i16( @@ -1533,9 +1513,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv16i32_nxv16i32_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwsub.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsub.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv16i32.nxv16i16( @@ -1552,9 +1530,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv1i64_nxv1i64_nxv1i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsub.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsub.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv1i64.nxv1i32( @@ -1571,9 +1547,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv2i64_nxv2i64_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwsub.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwsub.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv2i64.nxv2i32( @@ -1590,9 +1564,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv4i64_nxv4i64_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwsub.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwsub.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv4i64.nxv4i32( @@ -1609,9 +1581,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_mask_wv_tie_nxv8i64_nxv8i64_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwsub.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsub.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.mask.nxv8i64.nxv8i32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vwsubu.w-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vwsubu.w-rv32.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwsubu.w-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwsubu.w-rv32.ll @@ -1343,9 +1343,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv1i16_nxv1i16_nxv1i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf8,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsubu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsubu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv1i16.nxv1i8( @@ -1362,9 +1360,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv2i16_nxv2i16_nxv2i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsubu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsubu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv2i16.nxv2i8( @@ -1381,9 +1377,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv4i16_nxv4i16_nxv4i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsubu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsubu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv4i16.nxv4i8( @@ -1400,9 +1394,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv8i16_nxv8i16_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwsubu.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwsubu.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv8i16.nxv8i8( @@ -1419,9 +1411,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv16i16_nxv16i16_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwsubu.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwsubu.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv16i16.nxv16i8( @@ -1438,9 +1428,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv32i16_nxv32i16_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwsubu.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsubu.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv32i16.nxv32i8( @@ -1457,9 +1445,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv1i32_nxv1i32_nxv1i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsubu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsubu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv1i32.nxv1i16( @@ -1476,9 +1462,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv2i32_nxv2i32_nxv2i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsubu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsubu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv2i32.nxv2i16( @@ -1495,9 +1479,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv4i32_nxv4i32_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwsubu.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwsubu.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv4i32.nxv4i16( @@ -1514,9 +1496,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv8i32_nxv8i32_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwsubu.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwsubu.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv8i32.nxv8i16( @@ -1533,9 +1513,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv16i32_nxv16i32_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwsubu.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsubu.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv16i32.nxv16i16( @@ -1552,9 +1530,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv1i64_nxv1i64_nxv1i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsubu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsubu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv1i64.nxv1i32( @@ -1571,9 +1547,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv2i64_nxv2i64_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwsubu.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwsubu.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv2i64.nxv2i32( @@ -1590,9 +1564,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv4i64_nxv4i64_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwsubu.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwsubu.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv4i64.nxv4i32( @@ -1609,9 +1581,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv8i64_nxv8i64_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwsubu.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsubu.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv8i64.nxv8i32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vwsubu.w-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vwsubu.w-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwsubu.w-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwsubu.w-rv64.ll @@ -1343,9 +1343,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv1i16_nxv1i16_nxv1i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf8,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsubu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsubu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv1i16.nxv1i8( @@ -1362,9 +1360,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv2i16_nxv2i16_nxv2i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsubu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsubu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv2i16.nxv2i8( @@ -1381,9 +1377,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv4i16_nxv4i16_nxv4i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsubu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsubu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv4i16.nxv4i8( @@ -1400,9 +1394,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv8i16_nxv8i16_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwsubu.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwsubu.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv8i16.nxv8i8( @@ -1419,9 +1411,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv16i16_nxv16i16_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwsubu.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwsubu.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv16i16.nxv16i8( @@ -1438,9 +1428,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv32i16_nxv32i16_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwsubu.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsubu.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv32i16.nxv32i8( @@ -1457,9 +1445,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv1i32_nxv1i32_nxv1i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf4,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsubu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsubu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv1i32.nxv1i16( @@ -1476,9 +1462,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv2i32_nxv2i32_nxv2i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsubu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsubu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv2i32.nxv2i16( @@ -1495,9 +1479,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv4i32_nxv4i32_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwsubu.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwsubu.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv4i32.nxv4i16( @@ -1514,9 +1496,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv8i32_nxv8i32_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwsubu.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwsubu.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv8i32.nxv8i16( @@ -1533,9 +1513,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv16i32_nxv16i32_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwsubu.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsubu.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv16i32.nxv16i16( @@ -1552,9 +1530,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv1i64_nxv1i64_nxv1i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,mf2,tu,mu -; CHECK-NEXT: vmv1r.v v25, v8 -; CHECK-NEXT: vwsubu.wv v25, v8, v9, v0.t -; CHECK-NEXT: vmv1r.v v8, v25 +; CHECK-NEXT: vwsubu.wv v8, v8, v9, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv1i64.nxv1i32( @@ -1571,9 +1547,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv2i64_nxv2i64_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m1,tu,mu -; CHECK-NEXT: vmv2r.v v26, v8 -; CHECK-NEXT: vwsubu.wv v26, v8, v10, v0.t -; CHECK-NEXT: vmv2r.v v8, v26 +; CHECK-NEXT: vwsubu.wv v8, v8, v10, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv2i64.nxv2i32( @@ -1590,9 +1564,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv4i64_nxv4i64_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m2,tu,mu -; CHECK-NEXT: vmv4r.v v28, v8 -; CHECK-NEXT: vwsubu.wv v28, v8, v12, v0.t -; CHECK-NEXT: vmv4r.v v8, v28 +; CHECK-NEXT: vwsubu.wv v8, v8, v12, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv4i64.nxv4i32( @@ -1609,9 +1581,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_mask_wv_tie_nxv8i64_nxv8i64_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32,m4,tu,mu -; CHECK-NEXT: vmv8r.v v24, v8 -; CHECK-NEXT: vwsubu.wv v24, v8, v16, v0.t -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsubu.wv v8, v8, v16, v0.t ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.mask.nxv8i64.nxv8i32(