diff options
author | Jeff Law <jeffreyalaw@gmail.com> | 2022-11-22 18:12:45 -0500 |
---|---|---|
committer | Jeff Law <jeffreyalaw@gmail.com> | 2022-11-22 18:12:45 -0500 |
commit | ca73d4c80ea06087d9dd22594e5670bb15e21066 (patch) | |
tree | 351893a8857ff58a70c25557b2dc26f8e6eee83a | |
parent | e5cfb9cac1d7aba9a8ea73bfe7922cfaff9d61f3 (diff) | |
download | gcc-ca73d4c80ea06087d9dd22594e5670bb15e21066.zip gcc-ca73d4c80ea06087d9dd22594e5670bb15e21066.tar.gz gcc-ca73d4c80ea06087d9dd22594e5670bb15e21066.tar.bz2 |
Fix recent rvv/base/spill testcase failures
he core issue is we're expecting the frame to have a constant size, but it
doesn't. So when using the to_constant method we abort.
The safest thing to do is to set no shrink-wrapping components when the
frame size is not fixed. We might be able to do better later -- iff we
know the offset to the GPRs/FPRs is fixed and fits into the appropriate
number of bits.
Bootstrapped and regression tested (C-only) on riscv64-linux-gnu. As
expected, it fixes a bucketload of failures in rvv/base/spill-*.c.
gcc/
* config/riscv/riscv.cc (riscv_get_separate_components): Do not
do shrink-wrapping for a frame with a variable size.
-rw-r--r-- | gcc/config/riscv/riscv.cc | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 7ec4ce9..7bfc0e9 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -5340,7 +5340,8 @@ riscv_get_separate_components (void) bitmap_clear (components); if (riscv_use_save_libcall (&cfun->machine->frame) - || cfun->machine->interrupt_handler_p) + || cfun->machine->interrupt_handler_p + || !cfun->machine->frame.gp_sp_offset.is_constant ()) return components; offset = cfun->machine->frame.gp_sp_offset.to_constant (); |