[Bug target/117544] Lack of vsetvli after function call for whole register move
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Nov 25 15:08:28 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117544
--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Robin Dapp <rdapp@gcc.gnu.org>:
https://gcc.gnu.org/g:b82a5810e7bcc82b933e16f9067879b9d22b85c7
commit r15-5653-gb82a5810e7bcc82b933e16f9067879b9d22b85c7
Author: Robin Dapp <rdapp@ventanamicro.com>
Date: Thu Nov 21 14:49:53 2024 +0100
RISC-V: Ensure vtype for full-register moves [PR117544].
As discussed in PR117544 the VTYPE register is not preserved across
function calls. Even though vmv1r-like instructions operate
independently of the actual vtype they still require a valid vtype. As
we cannot guarantee that the vtype is valid we must make sure to emit a
vsetvl between a function call and a vmv1r.v.
This patch makes the necessary changes by splitting the full-reg-move
insns into patterns that use the vtype register and adding vmov to the
types of instructions requiring a vset.
PR target/117544
gcc/ChangeLog:
* config/riscv/vector.md (*mov<mode>_whole): Split.
(*mov<mode>_fract): Ditto.
(*mov<mode>): Ditto.
(*mov<mode>_vls): Ditto.
(*mov<mode>_reg_whole_vtype): New pattern with vtype use.
(*mov<mode>_fract_vtype): Ditto.
(*mov<mode>_vtype): Ditto.
(*mov<mode>_vls_vtype): Ditto.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/base/abi-call-args-4.c: Expect vsetvl.
* gcc.target/riscv/rvv/base/pr117544.c: New test.
More information about the Gcc-bugs
mailing list