SOURCES (GCC_4_1): gcc-pr26209.patch (NEW) - major regression fix.

pluto pluto at pld-linux.org
Thu Feb 16 09:33:37 CET 2006


Author: pluto                        Date: Thu Feb 16 08:33:37 2006 GMT
Module: SOURCES                       Tag: GCC_4_1
---- Log message:
- major regression fix.

---- Files affected:
SOURCES:
   gcc-pr26209.patch (NONE -> 1.1.2.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/gcc-pr26209.patch
diff -u /dev/null SOURCES/gcc-pr26209.patch:1.1.2.1
--- /dev/null	Thu Feb 16 09:33:37 2006
+++ SOURCES/gcc-pr26209.patch	Thu Feb 16 09:33:32 2006
@@ -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 */
+ };
================================================================


More information about the pld-cvs-commit mailing list