]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/46590 (long compile time with -O2 and many loops)
authorMichael Matz <matz@suse.de>
Mon, 3 Sep 2012 15:39:15 +0000 (15:39 +0000)
committerMichael Matz <matz@gcc.gnu.org>
Mon, 3 Sep 2012 15:39:15 +0000 (15:39 +0000)
PR tree-optimization/46590
* tree-cfg.c (gimple_duplicate_sese_region): Don't update
SSA web here ...
* tree-ssa-loop-ch.c (copy_loop_headers): ... but here.

From-SVN: r190897

gcc/ChangeLog
gcc/tree-cfg.c
gcc/tree-ssa-loop-ch.c

index a92a5f25467eaf2685186b4e1261df959b415bcb..fa72f0b843b35bf03e658a9ee551cab086ec5abe 100644 (file)
@@ -1,3 +1,10 @@
+2012-09-03  Michael Matz  <matz@suse.de>
+
+       PR tree-optimization/46590
+       * tree-cfg.c (gimple_duplicate_sese_region): Don't update
+       SSA web here ...
+       * tree-ssa-loop-ch.c (copy_loop_headers): ... but here.
+
 2012-09-03  Sandra Loosemore  <sandra@codesourcery.com>
 
        * doc/invoke.texi: Fix numerous typos and punctuation/grammatical
index 247f6166a9deb6ceb3c94a7cf38f496829ab2f54..9b2ae50bc6f73d7b8c1b13b53466c827ce2ef38d 100644 (file)
@@ -5530,9 +5530,10 @@ add_phi_args_after_copy (basic_block *region_copy, unsigned n_region,
    important exit edge EXIT.  By important we mean that no SSA name defined
    inside region is live over the other exit edges of the region.  All entry
    edges to the region must go to ENTRY->dest.  The edge ENTRY is redirected
-   to the duplicate of the region.  SSA form, dominance and loop information
-   is updated.  The new basic blocks are stored to REGION_COPY in the same
-   order as they had in REGION, provided that REGION_COPY is not NULL.
+   to the duplicate of the region.  Dominance and loop information is
+   updated, but not the SSA web.  The new basic blocks are stored to
+   REGION_COPY in the same order as they had in REGION, provided that
+   REGION_COPY is not NULL.
    The function returns false if it is unable to copy the region,
    true otherwise.  */
 
@@ -5593,8 +5594,6 @@ gimple_duplicate_sese_region (edge entry, edge exit,
       free_region_copy = true;
     }
 
-  gcc_assert (!need_ssa_update_p (cfun));
-
   /* Record blocks outside the region that are dominated by something
      inside.  */
   doms = NULL;
@@ -5663,9 +5662,6 @@ gimple_duplicate_sese_region (edge entry, edge exit,
   /* Add the other PHI node arguments.  */
   add_phi_args_after_copy (region_copy, n_region, NULL);
 
-  /* Update the SSA web.  */
-  update_ssa (TODO_update_ssa);
-
   if (free_region_copy)
     free (region_copy);
 
index 46097c2bea3eb2cf3294111a5b5768bddd0ee027..c43819ab3d878b8c4da0f4178f1ff91ca8eae621 100644 (file)
@@ -241,6 +241,7 @@ copy_loop_headers (void)
       split_edge (loop_latch_edge (loop));
     }
 
+  update_ssa (TODO_update_ssa);
   free (bbs);
   free (copied_bbs);