summaryrefslogtreecommitdiff
path: root/gcc/lra.c
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@gcc.gnu.org>2013-04-19 03:57:22 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2013-04-19 03:57:22 +0000
commit72ea0d4721166aa3c2c3abf7a7a5bbd2248e14c8 (patch)
tree5b0327b9fb3d3fdd57343fdfd1bcc9b35af18699 /gcc/lra.c
parentebad3a4f1bb5222eedd29994c5060aeb180a55cb (diff)
downloadgcc-72ea0d4721166aa3c2c3abf7a7a5bbd2248e14c8.tar.gz
[multiple changes]
2013-04-18 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/56992 * lra-coalesce.c (coalescable_pseudo_p): Remove 2nd parameter and related code. (lra_coalesce): Remove split_origin_bitmap and related code. * lra.c (lra): Coalesce after undoing inheritance. Recreate live ranges if necessary. 2013-04-18 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/56992 * g++.dg/opt/pr56999.C: New test. From-SVN: r198082
Diffstat (limited to 'gcc/lra.c')
-rw-r--r--gcc/lra.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/lra.c b/gcc/lra.c
index e7fa888df57..3ea4a6507d2 100644
--- a/gcc/lra.c
+++ b/gcc/lra.c
@@ -2295,11 +2295,20 @@ lra (FILE *f)
lra_assign ();
else
{
- /* Do coalescing only for regular algorithms. */
- if (! lra_assign () && lra_coalesce ())
- live_p = false;
+ bool spill_p = !lra_assign ();
+
if (lra_undo_inheritance ())
live_p = false;
+ if (spill_p)
+ {
+ if (! live_p)
+ {
+ lra_create_live_ranges (true);
+ live_p = true;
+ }
+ if (lra_coalesce ())
+ live_p = false;
+ }
if (! live_p)
lra_clear_live_ranges ();
}