]> git.pld-linux.org Git - packages/gcc.git/commitdiff
- major regression fix.
authorPaweł Sikora <pluto@pld-linux.org>
Thu, 16 Feb 2006 08:33:32 +0000 (08:33 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    gcc-pr26209.patch -> 1.1.2.1

gcc-pr26209.patch [new file with mode: 0644]

diff --git a/gcc-pr26209.patch b/gcc-pr26209.patch
new file mode 100644 (file)
index 0000000..1466498
--- /dev/null
@@ -0,0 +1,123 @@
+--- gcc-4_1-branch/gcc/Makefile.in.orig        2006-02-16 08:20:14.000000000 +0000
++++ gcc-4_1-branch/gcc/Makefile.in     2006-02-16 08:24:15.000000000 +0000
+@@ -1842,7 +1842,7 @@
+    $(DIAGNOSTIC_H) errors.h function.h $(TIMEVAR_H) $(TM_H) coretypes.h \
+    $(TREE_DUMP_H) except.h langhooks.h $(CFGLOOP_H) tree-pass.h \
+    $(CFGLAYOUT_H) $(BASIC_BLOCK_H) hard-reg-set.h $(HASHTAB_H) toplev.h \
+-   tree-ssa-propagate.h
++   tree-ssa-propagate.h $(SCEV_H)
+ tree-tailcall.o : tree-tailcall.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
+    $(RTL_H) $(TREE_H) $(TM_P_H) function.h $(TM_H) coretypes.h \
+    $(TREE_DUMP_H) $(DIAGNOSTIC_H) except.h tree-pass.h $(FLAGS_H) langhooks.h \
+--- gcc-4_1-branch/gcc/tree-cfg.c.orig 2006-02-10 08:46:43.000000000 +0000
++++ gcc-4_1-branch/gcc/tree-cfg.c      2006-02-16 08:23:29.000000000 +0000
+@@ -1274,10 +1274,7 @@
+       if (TREE_CODE (rhs) == ADDR_EXPR)
+       recompute_tree_invarant_for_addr_expr (rhs);
+-      /* If the statement could throw and now cannot, we need to prune cfg.  */
+-      if (maybe_clean_or_replace_eh_stmt (stmt, stmt))
+-      tree_purge_dead_eh_edges (bb_for_stmt (stmt));
+-
++      maybe_clean_or_replace_eh_stmt (stmt, stmt);
+       mark_new_vars_to_rename (stmt);
+     }
+--- gcc-4_1-branch/gcc/tree-cfgcleanup.c.orig  2006-02-16 08:23:15.000000000 +0000
++++ gcc-4_1-branch/gcc/tree-cfgcleanup.c       2006-02-16 08:24:15.000000000 +0000
+@@ -45,6 +45,7 @@
+ #include "cfglayout.h"
+ #include "hashtab.h"
+ #include "tree-ssa-propagate.h"
++#include "tree-scalar-evolution.h"
+ /* Remove any fallthru edge from EV.  Return true if an edge was removed.  */
+@@ -157,19 +158,24 @@
+     {
+       bsi = bsi_last (bb);
++      /* If the last statement of the block could throw and now cannot,
++       we need to prune cfg.  */
++      tree_purge_dead_eh_edges (bb);
++
+       if (bsi_end_p (bsi))
+       continue;
+       stmt = bsi_stmt (bsi);
++
+       if (TREE_CODE (stmt) == COND_EXPR
+         || TREE_CODE (stmt) == SWITCH_EXPR)
+       retval |= cleanup_control_expr_graph (bb, bsi);
+-
+       /* If we had a computed goto which has a compile-time determinable
+        destination, then we can eliminate the goto.  */
+-      if (TREE_CODE (stmt) == GOTO_EXPR
+-        && TREE_CODE (GOTO_DESTINATION (stmt)) == ADDR_EXPR
+-        && TREE_CODE (TREE_OPERAND (GOTO_DESTINATION (stmt), 0)) == LABEL_DECL)
++      else if (TREE_CODE (stmt) == GOTO_EXPR
++             && TREE_CODE (GOTO_DESTINATION (stmt)) == ADDR_EXPR
++             && (TREE_CODE (TREE_OPERAND (GOTO_DESTINATION (stmt), 0))
++                 == LABEL_DECL))
+       {
+         edge e;
+         tree label;
+@@ -213,7 +219,7 @@
+       /* Check for indirect calls that have been turned into
+        noreturn calls.  */
+-      if (noreturn_call_p (stmt) && remove_fallthru_edge (bb->succs))
++      else if (noreturn_call_p (stmt) && remove_fallthru_edge (bb->succs))
+       {
+         free_dominance_info (CDI_DOMINATORS);
+         retval = true;
+@@ -570,23 +576,26 @@
+ void
+ cleanup_tree_cfg_loop (void)
+ {
+-  bitmap changed_bbs = BITMAP_ALLOC (NULL);
+-
+-  cleanup_tree_cfg ();
++  bool changed = cleanup_tree_cfg ();
+-  fix_loop_structure (current_loops, changed_bbs);
+-  calculate_dominance_info (CDI_DOMINATORS);
++  if (changed)
++    {
++      bitmap changed_bbs = BITMAP_ALLOC (NULL);
++      fix_loop_structure (current_loops, changed_bbs);
++      calculate_dominance_info (CDI_DOMINATORS);
+-  /* This usually does nothing.  But sometimes parts of cfg that originally
+-     were inside a loop get out of it due to edge removal (since they
+-     become unreachable by back edges from latch).  */
+-  rewrite_into_loop_closed_ssa (changed_bbs, TODO_update_ssa);
++      /* This usually does nothing.  But sometimes parts of cfg that originally
++       were inside a loop get out of it due to edge removal (since they
++       become unreachable by back edges from latch).  */
++      rewrite_into_loop_closed_ssa (changed_bbs, TODO_update_ssa);
+-  BITMAP_FREE (changed_bbs);
++      BITMAP_FREE (changed_bbs);
+ #ifdef ENABLE_CHECKING
+-  verify_loop_structure (current_loops);
++      verify_loop_structure (current_loops);
+ #endif
++      scev_reset ();
++    }
+ }
+ /* Merge the PHI nodes at BB into those at BB's sole successor.  */
+--- gcc-4_1-branch/gcc/tree-ssa-loop.c.orig    2005-11-30 11:16:27.000000000 +0000
++++ gcc-4_1-branch/gcc/tree-ssa-loop.c 2006-02-16 08:23:29.000000000 +0000
+@@ -303,7 +303,8 @@
+   0,                                  /* properties_provided */
+   0,                                  /* properties_destroyed */
+   0,                                  /* todo_flags_start */
+-  TODO_dump_func | TODO_update_ssa_only_virtuals,
++  TODO_dump_func | TODO_cleanup_cfg
++    | TODO_update_ssa_only_virtuals,
+                                       /* todo_flags_finish */
+   0                                   /* letter */
+ };
This page took 0.076603 seconds and 4 git commands to generate.