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.
Showing
- gcc/config/riscv/autovec-opt.md 160 additions, 0 deletionsgcc/config/riscv/autovec-opt.md
- gcc/config/riscv/riscv-protos.h 1 addition, 0 deletionsgcc/config/riscv/riscv-protos.h
- gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-8.c 27 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-8.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-9.c 23 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-9.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-complicate-5.c 32 additions, 0 deletions...e/gcc.target/riscv/rvv/autovec/widen/widen-complicate-5.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen-complicate-6.c 30 additions, 0 deletions...e/gcc.target/riscv/rvv/autovec/widen/widen-complicate-6.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_run-8.c 38 additions, 0 deletions...estsuite/gcc.target/riscv/rvv/autovec/widen/widen_run-8.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_run-9.c 35 additions, 0 deletions...estsuite/gcc.target/riscv/rvv/autovec/widen/widen_run-9.c
Loading
Please register or sign in to comment