re PR c++/82768 (ICE in synthesize_implicit_template_parm, at cp/parser.c:39338)
authorWilco Dijkstra <wdijkstr@arm.com>
Fri, 3 Nov 2017 16:29:47 +0000 (16:29 +0000)
committerWilco Dijkstra <wilco@gcc.gnu.org>
Fri, 3 Nov 2017 16:29:47 +0000 (16:29 +0000)
Fix PR82768

Forcing LR at the bottom of the frame caused a few test failures.
Since there are some cases that generate worse code, revert this
part, and the frame tests pass again.

    gcc/
PR target/82786
* config/aarch64/aarch64.c (aarch64_layout_frame):
Undo forcing of LR at bottom of frame.

From-SVN: r254384

gcc/ChangeLog
gcc/config/aarch64/aarch64.c

index 2fc7db4..949f3cb 100644 (file)
@@ -1,3 +1,9 @@
+2017-11-03  Wilco Dijkstra  <wdijkstr@arm.com>
+
+       PR target/82786
+       * config/aarch64/aarch64.c (aarch64_layout_frame):
+       Undo forcing of LR at bottom of frame.
+
 2017-11-03  Jeff Law  <law@redhat.com>
 
        * cfganal.c (single_pred_edge_ignoring_loop_edges): New function
index 1e12645..12f247d 100644 (file)
@@ -2908,8 +2908,7 @@ aarch64_frame_pointer_required (void)
 
 /* Mark the registers that need to be saved by the callee and calculate
    the size of the callee-saved registers area and frame record (both FP
-   and LR may be omitted).  If the function is not a leaf, ensure LR is
-   saved at the bottom of the callee-save area.  */
+   and LR may be omitted).  */
 static void
 aarch64_layout_frame (void)
 {
@@ -2966,13 +2965,6 @@ aarch64_layout_frame (void)
       cfun->machine->frame.wb_candidate2 = R30_REGNUM;
       offset = 2 * UNITS_PER_WORD;
     }
-  else if (!crtl->is_leaf)
-    {
-      /* Ensure LR is saved at the bottom of the callee-saves.  */
-      cfun->machine->frame.reg_offset[R30_REGNUM] = 0;
-      cfun->machine->frame.wb_candidate1 = R30_REGNUM;
-      offset = UNITS_PER_WORD;
-    }
 
   /* Now assign stack slots for them.  */
   for (regno = R0_REGNUM; regno <= R30_REGNUM; regno++)