diff mbox

[AArch64] Simplify aarch64_can_eliminate

Message ID DB6PR0801MB2053154CE220461410BD4DF5838D0@DB6PR0801MB2053.eurprd08.prod.outlook.com
State New
Headers show

Commit Message

Wilco Dijkstra Aug. 15, 2017, 4:25 p.m. UTC
ping


From: Wilco Dijkstra
Sent: 07 August 2017 15:13
To: GCC Patches; James Greenhalgh
Cc: nd; Richard Earnshaw
Subject: [PATCH][AArch64] Simplify aarch64_can_eliminate
    
Simplify aarch64_can_eliminate - if we need a frame pointer, we must
eliminate to HARD_FRAME_POINTER_REGNUM.  Rather than hardcoding all
combinations from the ELIMINABLE_REGS list, just do the correct check.

ChangeLog:
2017-08-07  Wilco Dijkstra  <wdijkstr@arm.com>

    gcc/
        * config/aarch64/aarch64.c (aarch64_can_eliminate): Simplify logic.
--

Comments

James Greenhalgh Nov. 7, 2017, 5:11 p.m. UTC | #1
On Tue, Aug 15, 2017 at 05:25:06PM +0100, Wilco Dijkstra wrote:
> 
> ping
> 
> 
> From: Wilco Dijkstra
> Sent: 07 August 2017 15:13
> To: GCC Patches; James Greenhalgh
> Cc: nd; Richard Earnshaw
> Subject: [PATCH][AArch64] Simplify aarch64_can_eliminate
>     
> Simplify aarch64_can_eliminate - if we need a frame pointer, we must
> eliminate to HARD_FRAME_POINTER_REGNUM.  Rather than hardcoding all
> combinations from the ELIMINABLE_REGS list, just do the correct check.
> 
> ChangeLog:
> 2017-08-07  Wilco Dijkstra  <wdijkstr@arm.com>
> 
>     gcc/
>         * config/aarch64/aarch64.c (aarch64_can_eliminate): Simplify logic.
> --
> 
> diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
> index 9463edf63ffe770062b4120fada090e20c93a269..fbb4244cb58d2a25203aa27342c2f7988c30bd98 100644
> --- a/gcc/config/aarch64/aarch64.c
> +++ b/gcc/config/aarch64/aarch64.c
> @@ -5858,26 +5858,12 @@ aarch64_secondary_reload (bool in_p ATTRIBUTE_UNUSED, rtx x,
>  }
>  
>  static bool
> -aarch64_can_eliminate (const int from, const int to)
> +aarch64_can_eliminate (const int from ATTRIBUTE_UNUSED, const int to)
>  {
> -  /* If we need a frame pointer, we must eliminate FRAME_POINTER_REGNUM into
> -     HARD_FRAME_POINTER_REGNUM and not into STACK_POINTER_REGNUM.  */
> -
> +  /* If we need a frame pointer, ARG_POINTER_REGNUM and FRAME_POINTER_REGNUM
> +     can only eliminate to HARD_FRAME_POINTER_REGNUM.  */

Please add an assert in here,

  (from == ARG_POINTER_REGNUM || from == FRAME_POINTER_REGNUM)

Otherwise, OK (please test this against a recent trunk).

Reviewed-By: James Greenhalgh <james.greenhalgh@arm.com>

Thanks,
James

>    if (frame_pointer_needed)
> -    {
> -      if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
> -       return true;
> -      if (from == ARG_POINTER_REGNUM && to == STACK_POINTER_REGNUM)
> -       return false;
> -      if (from == FRAME_POINTER_REGNUM && to == STACK_POINTER_REGNUM
> -         && !cfun->calls_alloca)
> -       return true;
> -      if (from == FRAME_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
> -       return true;
> -
> -      return false;
> -    }
> -
> +    return to == HARD_FRAME_POINTER_REGNUM;
>    return true;
>  }
diff mbox

Patch

diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 9463edf63ffe770062b4120fada090e20c93a269..fbb4244cb58d2a25203aa27342c2f7988c30bd98 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -5858,26 +5858,12 @@  aarch64_secondary_reload (bool in_p ATTRIBUTE_UNUSED, rtx x,
 }
 
 static bool
-aarch64_can_eliminate (const int from, const int to)
+aarch64_can_eliminate (const int from ATTRIBUTE_UNUSED, const int to)
 {
-  /* If we need a frame pointer, we must eliminate FRAME_POINTER_REGNUM into
-     HARD_FRAME_POINTER_REGNUM and not into STACK_POINTER_REGNUM.  */
-
+  /* If we need a frame pointer, ARG_POINTER_REGNUM and FRAME_POINTER_REGNUM
+     can only eliminate to HARD_FRAME_POINTER_REGNUM.  */
   if (frame_pointer_needed)
-    {
-      if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
-       return true;
-      if (from == ARG_POINTER_REGNUM && to == STACK_POINTER_REGNUM)
-       return false;
-      if (from == FRAME_POINTER_REGNUM && to == STACK_POINTER_REGNUM
-         && !cfun->calls_alloca)
-       return true;
-      if (from == FRAME_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
-       return true;
-
-      return false;
-    }
-
+    return to == HARD_FRAME_POINTER_REGNUM;
   return true;
 }