]> git.ipfire.org Git - thirdparty/gcc.git/commit
RISC-V: Add patterns for vector-scalar IEEE floating-point max
authorPaul-Antoine Arras <parras@baylibre.com>
Mon, 1 Sep 2025 13:54:26 +0000 (15:54 +0200)
committerPaul-Antoine Arras <parras@baylibre.com>
Mon, 8 Sep 2025 10:26:09 +0000 (12:26 +0200)
commitf8a1436462abb212e8de0d5bc5ccc0d9f9e0b974
treef4de6815dd36115371eab3a228235278829ea8c7
parent592bafb26eb1fd50979f6cdf2176897c4a02c281
RISC-V: Add patterns for vector-scalar IEEE floating-point max

These patterns enable the combine pass (or late-combine, depending on the case)
to merge a vec_duplicate into an unspec_vfmax RTL instruction.

Before this patch, we have two instructions, e.g.:
  vfmv.v.f       v2,fa0
  vfmax.vv       v1,v2,v1

After, we get only one:
  vfmax.vf       v1,v1,fa0

In some cases, it also shaves off one vsetvli.

gcc/ChangeLog:

* config/riscv/autovec-opt.md (*vfmin_vf_ieee_<mode>): Rename into...
(*v<ieee_fmaxmin_op>_vf_<mode>): New pattern to combine vec_duplicate +
vf{max,min}.vv (unspec) into vf{max,min}.vf.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/autovec/vx_vf/vf-5-f16.c: Add vfmax.
* gcc.target/riscv/rvv/autovec/vx_vf/vf-5-f32.c: Likewise.
* gcc.target/riscv/rvv/autovec/vx_vf/vf-5-f64.c: Likewise.
* gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f16.c: Likewise.
* gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f32.c: Likewise.
* gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f64.c: Likewise.
* gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f16.c: Likewise.
* gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f32.c: Likewise.
* gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f64.c: Likewise.
* gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f16.c: Add vfmax. Also add
missing -fno-fast-math.
* gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f32.c: Likewise.
* gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f64.c: Likewise.
13 files changed:
gcc/config/riscv/autovec-opt.md
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-5-f16.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-5-f32.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-5-f64.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f16.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f32.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f64.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f16.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f32.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f64.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f16.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f32.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f64.c