aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <jeffreyalaw@gmail.com>2022-11-22 18:12:45 -0500
committerJeff Law <jeffreyalaw@gmail.com>2022-11-22 18:12:45 -0500
commitca73d4c80ea06087d9dd22594e5670bb15e21066 (patch)
tree351893a8857ff58a70c25557b2dc26f8e6eee83a
parente5cfb9cac1d7aba9a8ea73bfe7922cfaff9d61f3 (diff)
downloadgcc-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.cc3
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 ();