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 <wdijk...@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.greenha...@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; > }