On Sat, Oct 27, 2012 at 11:49 PM, Steven Bosscher wrote: > So I'm going to revert this patch.
Or actually better, this lighter-weight patch. Will commit after the usual testing. * ira.c (ira): Remove DF_LIVE if the problem is in the stack. (do_reload): Add it back at the end. Index: ira.c =================================================================== --- ira.c (revision 192878) +++ ira.c (working copy) @@ -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 ();