r243347 - in /trunk/gcc: ChangeLog ira.c
wilco@gcc.gnu.org
wilco@gcc.gnu.org
Wed Dec 7 14:55:00 GMT 2016
Author: wilco
Date: Wed Dec 7 14:55:31 2016
New Revision: 243347
URL: https://gcc.gnu.org/viewcvs?rev=243347&root=gcc&view=rev
Log:
GCC caches the whether a function is a leaf in crtl->is_leaf. Using this
in the backend is best as leaf_function_p may not work correctly (eg. while
emitting prolog or epilog code). There are many reads of crtl->is_leaf
before it is initialized. Many targets do in targetm.frame_pointer_required
(eg. arm, aarch64, i386, mips, sparc), which is called before register
allocation by ira_setup_eliminable_regset and sched_init.
Additionally, SHRINK_WRAPPING_ENABLED calls targetm.have_simple_return,
which evaluates the condition of the simple_return instruction. On ARM
this results in a call to use_simple_return_p which requires crtl->is_leaf
to be set correctly.
To fix this, initialize crtl->is_leaf in ira_setup_eliminable_regset and
early on in ira. A bootstrap did not find any uninitialized reads of
crtl->is_leaf on Thumb-2. A follow-up patch will remove incorrect uses
of leaf_function_p from the ARM backend.
gcc/
* gcc/ira.c (ira_setup_eliminable_regset): Initialize crtl->is_leaf.
(ira): Move initialization of crtl->is_leaf earlier.
Modified:
trunk/gcc/ChangeLog
trunk/gcc/ira.c
More information about the Gcc-cvs
mailing list