re PR middle-end/50251 (Revision 178353 caused many test failures)
2011-09-14 Tom de Vries <tom@codesourcery.com> PR middle-end/50251 * explow.c (emit_stack_restore): Set crtl->need_drap if stack_restore is emitted. From-SVN: r178853
This commit is contained in:
parent
86b601168a
commit
50025f916d
2 changed files with 20 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2011-09-14 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR middle-end/50251
|
||||
* explow.c (emit_stack_restore): Set crtl->need_drap if
|
||||
stack_restore is emitted.
|
||||
|
||||
2011-09-14 Julian Brown <julian@codesourcery.com>
|
||||
|
||||
* config/arm/arm.c (arm_override_options): Add unaligned_access
|
||||
|
|
14
gcc/explow.c
14
gcc/explow.c
|
@ -1062,6 +1062,20 @@ emit_stack_restore (enum save_level save_level, rtx sa)
|
|||
/* The default is that we use a move insn. */
|
||||
rtx (*fcn) (rtx, rtx) = gen_move_insn;
|
||||
|
||||
/* If stack_realign_drap, the x86 backend emits a prologue that aligns both
|
||||
STACK_POINTER and HARD_FRAME_POINTER.
|
||||
If stack_realign_fp, the x86 backend emits a prologue that aligns only
|
||||
STACK_POINTER. This renders the HARD_FRAME_POINTER unusable for accessing
|
||||
aligned variables, which is reflected in ix86_can_eliminate.
|
||||
We normally still have the realigned STACK_POINTER that we can use.
|
||||
But if there is a stack restore still present at reload, it can trigger
|
||||
mark_not_eliminable for the STACK_POINTER, leaving no way to eliminate
|
||||
FRAME_POINTER into a hard reg.
|
||||
To prevent this situation, we force need_drap if we emit a stack
|
||||
restore. */
|
||||
if (SUPPORTS_STACK_ALIGNMENT)
|
||||
crtl->need_drap = true;
|
||||
|
||||
/* See if this machine has anything special to do for this kind of save. */
|
||||
switch (save_level)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue