]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/21846 (segfault in fold_binary compiling vpr with -O2 -funroll-loops)
authorZdenek Dvorak <dvorakz@suse.cz>
Sun, 5 Jun 2005 18:07:43 +0000 (20:07 +0200)
committerZdenek Dvorak <rakdver@gcc.gnu.org>
Sun, 5 Jun 2005 18:07:43 +0000 (18:07 +0000)
PR tree-optimization/21846
* tree-cfg.c (replace_uses_by): Update information stored at loops.
* tree-flow.h (substitute_in_loop_info): Declare.
* tree-scalar-evolution.c (initialize_scalar_evolutions_analyzer):
Ensure that chrec_dont_know and chrec_known have a type.
* tree-ssa-loop-niter.c (substitute_in_loop_info): New function.

From-SVN: r100631

gcc/ChangeLog
gcc/tree-cfg.c
gcc/tree-flow.h
gcc/tree-scalar-evolution.c
gcc/tree-ssa-loop-niter.c

index d0a38c6444c0ca8feacfc99cc3fe585bf0b469b4..50916eebdf77060fa0b738f4924d438495d6b86e 100644 (file)
@@ -1,3 +1,12 @@
+2005-06-05  Zdenek Dvorak  <dvorakz@suse.cz>
+
+       PR tree-optimization/21846
+       * tree-cfg.c (replace_uses_by): Update information stored at loops.
+       * tree-flow.h (substitute_in_loop_info): Declare.
+       * tree-scalar-evolution.c (initialize_scalar_evolutions_analyzer):
+       Ensure that chrec_dont_know and chrec_known have a type.
+       * tree-ssa-loop-niter.c (substitute_in_loop_info): New function.
+
 2005-06-05  Steven Bosscher  <stevenb@suse.de>
 
        * config/i386/i386.c (x86_use_loop): Remove.
index 2776f21600a945dc344934d7bb0281bc368620b6..6108dd87622ba0cfc4cadee6b5b312f45b80e4ef 100644 (file)
@@ -1264,6 +1264,19 @@ replace_uses_by (tree name, tree val)
     }
 
   VEC_free (tree, heap, stmts);
+
+  /* Also update the trees stored in loop structures.  */
+  if (current_loops)
+    {
+      struct loop *loop;
+
+      for (i = 0; i < current_loops->num; i++)
+       {
+         loop = current_loops->parray[i];
+         if (loop)
+           substitute_in_loop_info (loop, name, val);
+       }
+    }
 }
 
 /* Merge block B into block A.  */
index 584e42b6594311e7d63d4e0a65b68f22bdd42fb1..51a2051947db96facc4ac2d62334eb0e0523f854 100644 (file)
@@ -679,6 +679,7 @@ bool tree_duplicate_loop_to_header_edge (struct loop *, edge, struct loops *,
 struct loop *tree_ssa_loop_version (struct loops *, struct loop *, tree,
                                    basic_block *);
 tree expand_simple_operations (tree);
+void substitute_in_loop_info (struct loop *, tree, tree);
 
 /* In tree-ssa-loop-im.c  */
 /* The possibilities of statement movement.  */
index 82cbc2f6b82d1fada2f02d8c0539bc309676a4da..27531864c3c39263ea02b41b2a2d9bb8667c974b 100644 (file)
@@ -2503,8 +2503,8 @@ initialize_scalar_evolutions_analyzer (void)
       chrec_not_analyzed_yet = NULL_TREE;
       chrec_dont_know = make_node (SCEV_NOT_KNOWN);
       chrec_known = make_node (SCEV_KNOWN);
-      TREE_TYPE (chrec_dont_know) = NULL_TREE;
-      TREE_TYPE (chrec_known) = NULL_TREE;
+      TREE_TYPE (chrec_dont_know) = void_type_node;
+      TREE_TYPE (chrec_known) = void_type_node;
     }
 }
 
index 38f7b42d46c7dacc589e5714575d89c4a9e10f97..78f14e9accf3dc3363012fff1b2463f634dbd2d0 100644 (file)
@@ -1600,3 +1600,21 @@ free_numbers_of_iterations_estimates (struct loops *loops)
        free_numbers_of_iterations_estimates_loop (loop);
     }
 }
+
+/* Substitute value VAL for ssa name NAME inside expressions held
+   at LOOP.  */
+
+void
+substitute_in_loop_info (struct loop *loop, tree name, tree val)
+{
+  struct nb_iter_bound *bound;
+
+  loop->nb_iterations = simplify_replace_tree (loop->nb_iterations, name, val);
+  loop->estimated_nb_iterations
+         = simplify_replace_tree (loop->estimated_nb_iterations, name, val);
+  for (bound = loop->bounds; bound; bound = bound->next)
+    {
+      bound->bound = simplify_replace_tree (bound->bound, name, val);
+      bound->additional = simplify_replace_tree (bound->additional, name, val);
+    }
+}