From 4ccf8f43ce30db2991656165ddd8839598751075 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 5 Mar 2013 16:50:38 +0100 Subject: [PATCH] re PR middle-end/56461 (GCC is leaking lots of memory) 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. From-SVN: r196468 --- gcc/ChangeLog | 6 ++++++ gcc/lra.c | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 573f22431ea..4734403f9f8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2013-03-05 Jakub Jelinek + 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. 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 (); -- 2.30.2