https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118939

--- Comment #13 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
Possible kludge to work around the questionable mechanism:

diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc
index 59b41e3d046..2d51874a05b 100644
--- a/gcc/config/arm/arm.cc
+++ b/gcc/config/arm/arm.cc
@@ -30887,7 +30887,17 @@ arm_frame_pointer_required (void)
       && arm_except_unwind_info (&global_options) == UI_TARGET
       && cfun->can_throw_non_call_exceptions)
     {
-      HOST_WIDE_INT size = get_frame_size ();
+      HOST_WIDE_INT size;
+
+      /* ??? We need to return the same answer during IRA and LRA,
+        the problem being that get_frame_size does not do so, so
+        use the offsets computed by arm_compute_frame_layout to
+        get back to the early IRA value.  */
+      if (lra_in_progress)
+       size = cfun->machine->stack_offsets.locals_base
+                 - cfun->machine->stack_offsets.soft_frame;
+      else
+       size = ROUND_UP_WORD (get_frame_size ());

       /* That's irrelevant if there is no stack adjustment.  */
       if (size <= 0)

Reply via email to