PR60580: Fix frame pointer option magic
commitd8469e2264e8da1f78174caf25780a8fe5ccac05
authorwilco <wilco@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 24 Oct 2017 16:58:02 +0000 (24 16:58 +0000)
committerwilco <wilco@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 24 Oct 2017 16:58:02 +0000 (24 16:58 +0000)
tree99bc19b4dda4e1334a78125b182efe17320df8bd
parentec873e792428443c5f17c584f8ee7a54e907bd20
PR60580: Fix frame pointer option magic

To fix PR60580 simplify the logic in aarch64_override_options_after_change_1 ().
If the frame pointer is enabled, set it to a special value that behaves similar
to frame pointer omission.  If we don't do this all leaf functions will get a
frame pointer even if flag_omit_leaf_frame_pointer is set.

If flag_omit_frame_pointer has this special value, we must force the frame
pointer if not in a leaf function.  We also need to force it in a leaf function
if flag_omit_frame_pointer is not set or if LR is used.

Doing this allows both -fomit-frame-pointer and -fomit-leaf-frame-pointer to be
independently set and changed in each function with the expected behaviour.

    gcc/
PR middle-end/60580
* config/aarch64/aarch64.c (aarch64_frame_pointer_required)
Check special value of flag_omit_frame_pointer.
(aarch64_can_eliminate): Likewise.
(aarch64_override_options_after_change_1): Simplify handling of
-fomit-frame-pointer and -fomit-leaf-frame-pointer.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@254052 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/config/aarch64/aarch64.c