-
- Downloads
RISC-V: Fix LRA issue for LMUL < 1 vector spillings [PR109244]
In order to decrease the memory traffic, we don't use whole register load/store for the LMUL less than 1 and mask mode, so those case will require one extra general purpose register for setting up VL register, but it's not allowed during LRA process, so we defined few special move patterns used for LRA, which will defer the expansion after LRA. gcc/ChangeLog: PR target/109244 * config/riscv/riscv-protos.h (emit_vlmax_vsetvl): Define as global. (emit_vlmax_op): Ditto. * config/riscv/riscv-v.cc (get_sew): New function. (emit_vlmax_vsetvl): Adapt function. (emit_pred_op): Ditto. (emit_vlmax_op): Ditto. (emit_nonvlmax_op): Ditto. (legitimize_move): Fix LRA ICE. (gen_no_side_effects_vsetvl_rtx): Adapt function. * config/riscv/vector.md (@mov<V_FRACT:mode><P:mode>_lra): New pattern. (@mov<VB:mode><P:mode>_lra): Ditto. (*mov<V_FRACT:mode><P:mode>_lra): Ditto. (*mov<VB:mode><P:mode>_lra): Ditto. gcc/testsuite/ChangeLog: PR target/109244 * g++.target/riscv/rvv/base/pr109244.C: New test. * gcc.target/riscv/rvv/base/binop_vv_constraint-4.c: Adapt testcase. * gcc.target/riscv/rvv/base/binop_vv_constraint-6.c: Ditto. * gcc.target/riscv/rvv/base/binop_vx_constraint-127.c: Ditto. * gcc.target/riscv/rvv/base/spill-1.c: Ditto. * gcc.target/riscv/rvv/base/spill-2.c: Ditto. * gcc.target/riscv/rvv/base/spill-3.c: Ditto. * gcc.target/riscv/rvv/base/spill-5.c: Ditto. * gcc.target/riscv/rvv/base/spill-7.c: Ditto. * g++.target/riscv/rvv/base/bug-18.C: New test. * gcc.target/riscv/rvv/base/merge_constraint-3.c: New test. * gcc.target/riscv/rvv/base/merge_constraint-4.c: New test.
Showing
- gcc/config/riscv/riscv-protos.h 2 additions, 0 deletionsgcc/config/riscv/riscv-protos.h
- gcc/config/riscv/riscv-v.cc 49 additions, 18 deletionsgcc/config/riscv/riscv-v.cc
- gcc/config/riscv/vector.md 56 additions, 0 deletionsgcc/config/riscv/vector.md
- gcc/testsuite/g++.target/riscv/rvv/base/bug-18.C 139 additions, 0 deletionsgcc/testsuite/g++.target/riscv/rvv/base/bug-18.C
- gcc/testsuite/g++.target/riscv/rvv/base/pr109244.C 76 additions, 0 deletionsgcc/testsuite/g++.target/riscv/rvv/base/pr109244.C
- gcc/testsuite/gcc.target/riscv/rvv/base/binop_vv_constraint-4.c 1 addition, 0 deletions...stsuite/gcc.target/riscv/rvv/base/binop_vv_constraint-4.c
- gcc/testsuite/gcc.target/riscv/rvv/base/binop_vv_constraint-6.c 1 addition, 0 deletions...stsuite/gcc.target/riscv/rvv/base/binop_vv_constraint-6.c
- gcc/testsuite/gcc.target/riscv/rvv/base/binop_vx_constraint-127.c 1 addition, 1 deletion...suite/gcc.target/riscv/rvv/base/binop_vx_constraint-127.c
- gcc/testsuite/gcc.target/riscv/rvv/base/merge_constraint-3.c 95 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/rvv/base/merge_constraint-3.c
- gcc/testsuite/gcc.target/riscv/rvv/base/merge_constraint-4.c 28 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/rvv/base/merge_constraint-4.c
- gcc/testsuite/gcc.target/riscv/rvv/base/spill-1.c 97 additions, 97 deletionsgcc/testsuite/gcc.target/riscv/rvv/base/spill-1.c
- gcc/testsuite/gcc.target/riscv/rvv/base/spill-2.c 68 additions, 68 deletionsgcc/testsuite/gcc.target/riscv/rvv/base/spill-2.c
- gcc/testsuite/gcc.target/riscv/rvv/base/spill-3.c 38 additions, 38 deletionsgcc/testsuite/gcc.target/riscv/rvv/base/spill-3.c
- gcc/testsuite/gcc.target/riscv/rvv/base/spill-5.c 18 additions, 18 deletionsgcc/testsuite/gcc.target/riscv/rvv/base/spill-5.c
- gcc/testsuite/gcc.target/riscv/rvv/base/spill-7.c 82 additions, 79 deletionsgcc/testsuite/gcc.target/riscv/rvv/base/spill-7.c
Loading
Please register or sign in to comment