diff options
author | Steven Bosscher <steven@gcc.gnu.org> | 2012-10-28 11:52:11 +0000 |
---|---|---|
committer | Steven Bosscher <steven@gcc.gnu.org> | 2012-10-28 11:52:11 +0000 |
commit | 5d517141037264e94ae503a0f883f074aad2b8fb (patch) | |
tree | 33dd73f7055ebe2827ac8d5bbc019cafd1b54a0e /gcc/ira.c | |
parent | 68cc8feb2f06207424b05f9f938a2b549f12cb9e (diff) | |
download | gcc-5d517141037264e94ae503a0f883f074aad2b8fb.zip gcc-5d517141037264e94ae503a0f883f074aad2b8fb.tar.gz gcc-5d517141037264e94ae503a0f883f074aad2b8fb.tar.bz2 |
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
Diffstat (limited to 'gcc/ira.c')
-rw-r--r-- | gcc/ira.c | 16 |
1 files changed, 16 insertions, 0 deletions
@@ -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 (); |