r208862 - in /trunk/gcc: ChangeLog config/aarch...

mshawcroft@gcc.gnu.org mshawcroft@gcc.gnu.org
Thu Mar 27 10:13:00 GMT 2014


Author: mshawcroft
Date: Thu Mar 27 10:13:50 2014
New Revision: 208862

URL: http://gcc.gnu.org/viewcvs?rev=208862&root=gcc&view=rev
Log:
[PR 60580, AArch64] Fix __attribute__ ((optimize("no-omit-frame-pointer")))

The implementation of -m[no-]omit-leaf-frame-pointer and
-f[no-]omit-frame-pointer in the AArch64 target does not behave
correctly in the presence of __attribute__ optimize.

This patch adjusts the implementation to work in a similar fashion to
the same functionality in the i386 target.

The problem occurs because the current implementation uses a global
'faked_omit_frame_pointer' to retain the original value of
flag_omit_frame_pointer.  The global does not form part of the
optimization save state.

This solution removes the global and instead tracks required behaviour
using only flag_omit_frame_pointer and flag_omit_leaf_frame_pointer.
These two form part of the optimziation save state and target save
state respectively.

The additional complication for AArch64 is that the PCS requires that
given -fno-omit-frame-pointer -momit-leave-frame-pointer, a leaf
function that kills LR must create a frame record.  This is readily
handled in aarch64_frame_pointer_required().  I've dropped logic in
aarch64_can_eliminate() that attempts to detect this scenario since it


Added:
    trunk/gcc/testsuite/gcc.target/aarch64/pr60580_1.c
    trunk/gcc/testsuite/gcc.target/aarch64/test_fp_attribute_1.c
    trunk/gcc/testsuite/gcc.target/aarch64/test_fp_attribute_2.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/aarch64/aarch64.c
    trunk/gcc/testsuite/ChangeLog



More information about the Gcc-cvs mailing list