]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/38474 (compile time explosion in dataflow_set_preserve_mem_locs...
authorMichael Matz <matz@suse.de>
Tue, 8 Dec 2009 13:56:06 +0000 (13:56 +0000)
committerMichael Matz <matz@gcc.gnu.org>
Tue, 8 Dec 2009 13:56:06 +0000 (13:56 +0000)
PR middle-end/38474
* function.c (free_temp_slots): Only walk the temp slot
addresses and combine slots if we actually changes something.
(pop_temp_slots): Ditto.

From-SVN: r155087

gcc/ChangeLog
gcc/function.c

index 22fd5cce7839eee73afe205958e86078a91afe23..186fe581d47ba8ca2166f4b91dd4ac7f60d8fc0c 100644 (file)
@@ -1,3 +1,10 @@
+2009-12-08  Michael Matz  <matz@suse.de>
+
+       PR middle-end/38474
+       * function.c (free_temp_slots): Only walk the temp slot
+       addresses and combine slots if we actually changes something.
+       (pop_temp_slots): Ditto.
+
 2009-12-08  Olga Golovanevsky  <olga@il.ibm.com>
 
        PR middle-end/41843
index b8042d08551897be55660ba4098f00b1694a8fc4..ac5ba94f9d1af3e2b74e0c19297669f34fb7300c 100644 (file)
@@ -1164,17 +1164,24 @@ void
 free_temp_slots (void)
 {
   struct temp_slot *p, *next;
+  bool some_available = false;
 
   for (p = *temp_slots_at_level (temp_slot_level); p; p = next)
     {
       next = p->next;
 
       if (!p->keep)
-       make_slot_available (p);
+       {
+         make_slot_available (p);
+         some_available = true;
+       }
     }
 
-  remove_unused_temp_slot_addresses ();
-  combine_temp_slots ();
+  if (some_available)
+    {
+      remove_unused_temp_slot_addresses ();
+      combine_temp_slots ();
+    }
 }
 
 /* Push deeper into the nesting level for stack temporaries.  */
@@ -1192,15 +1199,20 @@ void
 pop_temp_slots (void)
 {
   struct temp_slot *p, *next;
+  bool some_available = false;
 
   for (p = *temp_slots_at_level (temp_slot_level); p; p = next)
     {
       next = p->next;
       make_slot_available (p);
+      some_available = true;
     }
 
-  remove_unused_temp_slot_addresses ();
-  combine_temp_slots ();
+  if (some_available)
+    {
+      remove_unused_temp_slot_addresses ();
+      combine_temp_slots ();
+    }
 
   temp_slot_level--;
 }