This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH, PR 60580, AArch64] Fix __attribute__ ((optimize("no-omit-frame-pointer")))


Hi,

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 appears to me to be superflous.

I'll leave this on the list for 24h for folks to comment and to give the RM's the chance to object before committing.

Cheers
/Marcus

2014-03-25  Marcus Shawcroft  <marcus.shawcroft@arm.com>

	PR target/60580
	* config/aarch64/aarch64.c (faked_omit_frame_pointer): Remove.
	(aarch64_frame_pointer_required): Adjust logic.
	(aarch64_can_eliminate): Adjust logic.
	(aarch64_override_options_after_change): Adjust logic.

Attachment: gcc-60580.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]