--- /dev/null
+--- 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 */
+ };