Hi all, This patch wraps aarch64_frame_pointer_required into a TARGET_OMIT_LEAF_FRAME_POINTER macro and initializes aarch64_frame_pointer_required to 2 instead of 1, allowing us to detect from aarch64_frame_pointer_required whether the user explicitly specified -momit-leaf-frame-pointer or -mno-omit-leaf-frame-pointer. No functional changes in this patch.
Bootstrapped and tested as part of series on aarch64. Ok for trunk? Thanks, Kyrill 2015-07-16 Kyrylo Tkachov <kyrylo.tkac...@arm.com> * config/aarch64/aarch64.opt (momit-leaf-frame-pointer): Initialize flag_omit_leaf_frame_pointer to 2. * config/aarch64/aarch64.h (TARGET_OMIT_LEAF_FRAME_POINTER): New macro. * config/aarch64.aarch64.c (aarch64_frame_pointer_required): Use above. (aarch64_can_eliminate): Likewise.
commit fa05c48a4ede4f29583b129fa213c42aa2da3a73 Author: Kyrylo Tkachov <kyrylo.tkac...@arm.com> Date: Thu May 21 09:57:23 2015 +0100 [AArch64][5/N] Make flag_omit_leaf_frame_pointer intialize to 2. Define and use TARGET_OMIT_LEAF_FRAME_POINTER diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index aff23d6..bb404ac 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -2205,7 +2205,7 @@ aarch64_frame_pointer_required (void) flag_omit_leaf_frame_pointer turns off the frame pointer by default. Turn it back on now if we've not got a leaf function. */ - if (flag_omit_leaf_frame_pointer + if (TARGET_OMIT_LEAF_FRAME_POINTER && (!crtl->is_leaf || df_regs_ever_live_p (LR_REGNUM))) return true; @@ -4981,7 +4981,7 @@ aarch64_can_eliminate (const int from, const int to) LR in the function, then we'll want a frame pointer after all, so prevent this elimination to ensure a frame pointer is used. */ if (to == STACK_POINTER_REGNUM - && flag_omit_leaf_frame_pointer + && TARGET_OMIT_LEAF_FRAME_POINTER && df_regs_ever_live_p (LR_REGNUM)) return false; } diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index d2d1ebf..e91541a 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -247,6 +247,9 @@ extern unsigned long aarch64_isa_flags; ((aarch64_fix_a53_err835769 == 2) \ ? TARGET_FIX_ERR_A53_835769_DEFAULT : aarch64_fix_a53_err835769) +/* Omit frame pointer in leaf functions. */ +#define TARGET_OMIT_LEAF_FRAME_POINTER (flag_omit_leaf_frame_pointer != 0) + /* Standard register usage. */ /* 31 64-bit general purpose registers R0-R30: diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt index c9c0aff..e29d606 100644 --- a/gcc/config/aarch64/aarch64.opt +++ b/gcc/config/aarch64/aarch64.opt @@ -77,7 +77,7 @@ Target Report RejectNegative Mask(STRICT_ALIGN) Don't assume that unaligned accesses are handled by the system momit-leaf-frame-pointer -Target Report Save Var(flag_omit_leaf_frame_pointer) Init(1) +Target Report Save Var(flag_omit_leaf_frame_pointer) Init(2) Omit the frame pointer in leaf functions mtls-dialect=