diff options
author | Robin Dapp <rdapp@ventanamicro.com> | 2025-04-04 17:06:44 +0200 |
---|---|---|
committer | Robin Dapp <rdapp@ventanamicro.com> | 2025-04-15 17:20:59 +0200 |
commit | 517f7e3f02b4c945d2b4bdabb490961cf986391e (patch) | |
tree | b912ceb1778db918fd46334360e1a0d6308fc4cb /libstdc++-v3/include/std/numeric | |
parent | f62e5d720de829cf346b799f3463fee53728ba6c (diff) | |
download | gcc-517f7e3f02b4c945d2b4bdabb490961cf986391e.zip gcc-517f7e3f02b4c945d2b4bdabb490961cf986391e.tar.gz gcc-517f7e3f02b4c945d2b4bdabb490961cf986391e.tar.bz2 |
RISC-V: Do not lift up vsetvl into non-transparent blocks [PR119547].
When lifting up a vsetvl into a block we currently don't consider the
block's transparency with respect to the vsetvl as in other parts of the
pass. This patch does not perform the lift when transparency is not
guaranteed.
This condition is more restrictive than necessary as we can still
perform a vsetvl lift if the conflicting register is only every used
in vsetvls and no regular insns but given how late we are in the GCC 15
cycle it seems better to defer this. Therefore
gcc.target/riscv/rvv/vsetvl/avl_single-68.c is XFAILed for now.
This issue was found in OpenCV where it manifests as a runtime error.
Zhijin Zeng debugged PR119547 and provided an initial patch.
Reported-By: 曾治金 <zhijin.zeng@spacemit.com>
PR target/119547
gcc/ChangeLog:
* config/riscv/riscv-vsetvl.cc (pre_vsetvl::earliest_fuse_vsetvl_info):
Do not perform lift if block is not transparent.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/vsetvl/avl_single-68.c: xfail.
* g++.target/riscv/rvv/autovec/pr119547.C: New test.
* g++.target/riscv/rvv/autovec/pr119547-2.C: New test.
* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c: Adjust.
Diffstat (limited to 'libstdc++-v3/include/std/numeric')
0 files changed, 0 insertions, 0 deletions