re PR rtl-optimization/38711 (ira should not be using df-lr except at -O1.)
PR rtl-optimization/38711 * ira.c (ira): Remove DF_LIVE if the problem is in the stack. (do_reload): Add it back at the end for -O2 and higher. * function.c (thread_prologue_and_epilogue_insns): Use REG_SET_TO_HARD_REG_SET instead of CLEAR_HARD_REG_SET and reg_set_to_hard_reg_set. From-SVN: r192890
This commit is contained in:
parent
68cc8feb2f
commit
5d51714103
@ -1,3 +1,13 @@
|
||||
2012-10-28 Steven Bosscher <steven@gcc.gnu.org>
|
||||
|
||||
PR rtl-optimization/38711
|
||||
* ira.c (ira): Remove DF_LIVE if the problem is in the stack.
|
||||
(do_reload): Add it back at the end for -O2 and higher.
|
||||
|
||||
* function.c (thread_prologue_and_epilogue_insns): Use
|
||||
REG_SET_TO_HARD_REG_SET instead of CLEAR_HARD_REG_SET and
|
||||
reg_set_to_hard_reg_set.
|
||||
|
||||
2012-10-28 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* ipa-inline.c (edge_badness): Reduce precision; use scc hints.
|
||||
|
@ -6176,8 +6176,7 @@ thread_prologue_and_epilogue_insns (void)
|
||||
CLEAR_HARD_REG_BIT (prologue_clobbered, STACK_POINTER_REGNUM);
|
||||
if (frame_pointer_needed)
|
||||
CLEAR_HARD_REG_BIT (prologue_clobbered, HARD_FRAME_POINTER_REGNUM);
|
||||
CLEAR_HARD_REG_SET (live_on_edge);
|
||||
reg_set_to_hard_reg_set (&live_on_edge,
|
||||
REG_SET_TO_HARD_REG_SET (live_on_edge,
|
||||
df_get_live_in (entry_edge->dest));
|
||||
if (hard_reg_set_intersect_p (live_on_edge, prologue_clobbered))
|
||||
{
|
||||
|
16
gcc/ira.c
16
gcc/ira.c
@ -4399,6 +4399,16 @@ ira (FILE *f)
|
||||
setup_prohibited_mode_move_regs ();
|
||||
|
||||
df_note_add_problem ();
|
||||
|
||||
/* DF_LIVE can't be used in the register allocator, too many other
|
||||
parts of the compiler depend on using the "classic" liveness
|
||||
interpretation of the DF_LR problem. See PR38711.
|
||||
Remove the problem, so that we don't spend time updating it in
|
||||
any of the df_analyze() calls during IRA/LRA. */
|
||||
if (optimize > 1)
|
||||
df_remove_problem (df_live);
|
||||
gcc_checking_assert (df_live == NULL);
|
||||
|
||||
#ifdef ENABLE_CHECKING
|
||||
df->changeable_flags |= DF_VERIFY_SCHEDULED;
|
||||
#endif
|
||||
@ -4678,6 +4688,12 @@ do_reload (void)
|
||||
df_scan_alloc (NULL);
|
||||
df_scan_blocks ();
|
||||
|
||||
if (optimize > 1)
|
||||
{
|
||||
df_live_add_problem ();
|
||||
df_live_set_all_dirty ();
|
||||
}
|
||||
|
||||
if (optimize)
|
||||
df_analyze ();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user