https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119100

--- Comment #9 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Paul-Antoine Arras <par...@gcc.gnu.org>:

https://gcc.gnu.org/g:6e24814d9e09019bf42b33b66827648ceff6e7c0

commit r16-1777-g6e24814d9e09019bf42b33b66827648ceff6e7c0
Author: Paul-Antoine Arras <par...@baylibre.com>
Date:   Thu Jun 26 13:20:49 2025 +0000

    RISC-V: Vector-scalar negate-multiply-(subtract-)accumulate [PR119100]

    This pattern enables the combine pass (or late-combine, depending on the
case)
    to merge a vec_duplicate into a (possibly negated) minus-mult RTL
instruction.

    Before this patch, we have two instructions, e.g.:
      vfmv.v.f        v6,fa0
      vfnmacc.vv      v2,v6,v4

    After, we get only one:
      vfnmacc.vf      v2,fa0,v4

            PR target/119100

    gcc/ChangeLog:

            * config/riscv/autovec-opt.md (*vfnmsub_<mode>,*vfnmadd_<mode>):
Handle
            both add and acc variants.
            * config/riscv/vector.md
(*pred_mul_neg_<optab><mode>_scalar_undef): New
            pattern.

    gcc/testsuite/ChangeLog:

            * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c: Add vfnmacc and
            vfnmsac.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c: Likewise.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f64.c: Likewise.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c: Likewise.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c: Likewise.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c: Likewise.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c: Likewise.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c: Likewise.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c: Likewise.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c: Likewise.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c: Likewise.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c: Likewise.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop.h
(DEF_VF_MULOP_CASE_1):
            Fix return type.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c: New
test.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f32.c: New
test.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f64.c: New
test.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c: New
test.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f32.c: New
test.
            * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f64.c: New
test.

Reply via email to