]> git.ipfire.org Git - thirdparty/gcc.git/commit
RISC-V: Add RVV vwmacc/vwmaccu/vwmaccsu combine lowering optmization
authorJuzhe-Zhong <juzhe.zhong@rivai.ai>
Tue, 6 Jun 2023 12:04:33 +0000 (20:04 +0800)
committerPan Li <pan2.li@intel.com>
Tue, 6 Jun 2023 15:14:16 +0000 (23:14 +0800)
commit88604bd17c3d0c82792020b4b0da95627b1caa9d
treee8c99d193baea5acf04da8d16f8728b4abe57682
parent4ede915d5dde935a16df2c6640aee5ab22348d30
RISC-V: Add RVV vwmacc/vwmaccu/vwmaccsu combine lowering optmization

Fix according to comments from Robin of V1 patch.

This patch add combine optimization for following case:
__attribute__ ((noipa)) void
vwmaccsu (int16_t *__restrict dst, int8_t *__restrict a, uint8_t *__restrict b,
  int n)
{
  for (int i = 0; i < n; i++)
    dst[i] += (int16_t) a[i] * (int16_t) b[i];
}

Before this patch:
...
vsext.vf2
vzext.vf2
vmadd.vv
..

After this patch:
...
vwmaccsu.vv
...

gcc/ChangeLog:

* config/riscv/autovec-opt.md (*<optab>_fma<mode>): New pattern.
(*single_<optab>mult_plus<mode>): Ditto.
(*double_<optab>mult_plus<mode>): Ditto.
(*sign_zero_extend_fma): Ditto.
(*zero_sign_extend_fma): Ditto.
* config/riscv/riscv-protos.h (enum insn_type): New enum.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/autovec/widen/widen-8.c: New test.
* gcc.target/riscv/rvv/autovec/widen/widen-9.c: New test.
* gcc.target/riscv/rvv/autovec/widen/widen-complicate-5.c: New test.
* gcc.target/riscv/rvv/autovec/widen/widen-complicate-6.c: New test.
* gcc.target/riscv/rvv/autovec/widen/widen_run-8.c: New test.
* gcc.target/riscv/rvv/autovec/widen/widen_run-9.c: New test.
gcc/config/riscv/autovec-opt.md
gcc/config/riscv/riscv-protos.h
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-8.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-9.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-complicate-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-complicate-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_run-8.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_run-9.c [new file with mode: 0644]