diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/lra.c | 7 |
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 573f22431ea..4734403f9f8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2013-03-05 Jakub Jelinek <jakub@redhat.com> PR middle-end/56461 + * lra.c (lra): Call lra_clear_live_ranges if live_p, + right before calling lra_create_live_ranges, also call it + when clearing live_p. Only call lra_clear_live_ranges + at the end if live_p. + + PR middle-end/56461 * sched-deps.c (delete_dep_node): Free DEP_REPLACE. 2013-03-05 Richard Biener <rguenther@suse.de> diff --git a/gcc/lra.c b/gcc/lra.c index 875c7afddab..9df24b5ba9a 100644 --- a/gcc/lra.c +++ b/gcc/lra.c @@ -2291,6 +2291,8 @@ lra (FILE *f) /* Do inheritance only for regular algorithms. */ if (! lra_simple_p) lra_inheritance (); + if (live_p) + lra_clear_live_ranges (); /* We need live ranges for lra_assign -- so build them. */ lra_create_live_ranges (true); live_p = true; @@ -2308,6 +2310,8 @@ lra (FILE *f) live_p = false; if (lra_undo_inheritance ()) live_p = false; + if (! live_p) + lra_clear_live_ranges (); } } bitmap_clear (&lra_optional_reload_pseudos); @@ -2334,7 +2338,8 @@ lra (FILE *f) lra_eliminate (true); lra_final_code_change (); lra_in_progress = 0; - lra_clear_live_ranges (); + if (live_p) + lra_clear_live_ranges (); lra_live_ranges_finish (); lra_constraints_finish (); finish_reg_info (); |