]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/18519 (ICE: Segmentation fault with optimization)
authorDaniel Berlin <dberlin@dberlin.org>
Wed, 17 Nov 2004 02:01:35 +0000 (02:01 +0000)
committerDaniel Berlin <dberlin@gcc.gnu.org>
Wed, 17 Nov 2004 02:01:35 +0000 (02:01 +0000)
2004-11-16  Daniel Berlin  <dberlin@dberlin.org>

Fix PR tree-optimization/18519

* tree-optimize (execute_todo): Add case for TODO_cleanup_cfg.
* tree-pass.h: Add TODO_cleanup_cfg.
* tree-ssa-ccp.c (pass_ccp): Use TODO_cleanup_cfg.
(ccp_finalize): Remove call to cleanup_cfg.
* tree-ssa-dce.c (pass_dce): Use TODO_cleanup_cfg and TODO_dump_func.
(pass_cd_dce): Ditto.
(perform_tree_ssa_dce): Remove call to cleanup_cfg,
dump_function_to_file.
* tree-ssa-loop-ch.c (copy_loop_headers): Remove call
to cleanup_cfg.
(pass_ch): Add TODO_cleanup_cfg.
* tree-ssa-loop.c (tree_ssa_loop_done): Remove call to
cleanup_cfg.
(pass_loop_done): Add TODO_cleanup_cfg.
* tree-ssa-phiopt.c (pass_phiopt): Ditto.
(tree_ssa_phiopt): Remove call to cleanup_cfg.

From-SVN: r90783

gcc/ChangeLog
gcc/tree-optimize.c
gcc/tree-pass.h
gcc/tree-ssa-ccp.c
gcc/tree-ssa-dce.c
gcc/tree-ssa-loop-ch.c
gcc/tree-ssa-loop.c
gcc/tree-ssa-phiopt.c

index 6f7fba24ab731c27ab69340d5844fba497feb00f..e54898105caf033230fca9283745a0c3bb46f961 100644 (file)
@@ -1,3 +1,24 @@
+2004-11-16  Daniel Berlin  <dberlin@dberlin.org>
+
+       Fix PR tree-optimization/18519
+       
+       * tree-optimize (execute_todo): Add case for TODO_cleanup_cfg.
+       * tree-pass.h: Add TODO_cleanup_cfg.
+       * tree-ssa-ccp.c (pass_ccp): Use TODO_cleanup_cfg.
+       (ccp_finalize): Remove call to cleanup_cfg.
+       * tree-ssa-dce.c (pass_dce): Use TODO_cleanup_cfg and TODO_dump_func.
+       (pass_cd_dce): Ditto.
+       (perform_tree_ssa_dce): Remove call to cleanup_cfg, 
+       dump_function_to_file.
+       * tree-ssa-loop-ch.c (copy_loop_headers): Remove call
+       to cleanup_cfg.
+       (pass_ch): Add TODO_cleanup_cfg.
+       * tree-ssa-loop.c (tree_ssa_loop_done): Remove call to
+       cleanup_cfg.
+       (pass_loop_done): Add TODO_cleanup_cfg.
+       * tree-ssa-phiopt.c (pass_phiopt): Ditto.
+       (tree_ssa_phiopt): Remove call to cleanup_cfg.  
+       
 2004-11-16  Devang Patel  <dpatel@apple.com>
 
        * optabs.c (vector_compare_rtx): Fix COMPARISON_CLASS_P use.
index da7a2e7e6e3fb4f5f48e663e498f8777905cd131..53356b94d551e48949c5adb15466c2452a92fd44 100644 (file)
@@ -426,6 +426,9 @@ execute_todo (int properties, unsigned int flags)
       bitmap_clear (vars_to_rename);
     }
 
+  if (flags & TODO_cleanup_cfg)
+    cleanup_tree_cfg ();
+
   if ((flags & TODO_dump_func) && dump_file)
     {
       if (properties & PROP_trees)
index 71407665679d2cd4aa782f3c4ad5d7878f15478f..8900bcc6d423dc59f198bde3098c2a49ac9fb777 100644 (file)
@@ -107,6 +107,7 @@ struct dump_file_info
 #define TODO_verify_flow       (1 << 4)
 #define TODO_verify_stmts      (1 << 5)
 #define TODO_fix_def_def_chains (1 << 6)        /* rewrite def-def chains  */
+#define TODO_cleanup_cfg        (1 << 7)        /* cleanup the cfg.  */
 
 #define TODO_verify_all \
   (TODO_verify_ssa | TODO_verify_flow | TODO_verify_stmts)
index 42094805b41bb2b9639a30726e2690ff5b143a9e..1815ebd4d736274c0cae259613c96390698cf005 100644 (file)
@@ -629,9 +629,6 @@ ccp_finalize (void)
   /* Perform substitutions based on the known constant values.  */
   substitute_and_fold ();
 
-  /* Now cleanup any unreachable code.  */
-  cleanup_tree_cfg ();
-
   free (value_vector);
 }
 
@@ -1229,7 +1226,7 @@ struct tree_opt_pass pass_ccp =
   0,                                   /* properties_provided */
   0,                                   /* properties_destroyed */
   0,                                   /* todo_flags_start */
-  TODO_dump_func | TODO_rename_vars
+  TODO_cleanup_cfg | TODO_dump_func | TODO_rename_vars
     | TODO_ggc_collect | TODO_verify_ssa
     | TODO_verify_stmts,               /* todo_flags_finish */
   0                                    /* letter */
index 54733541a0e9f34e51f898481cc2390b9c31b6d5..589fc5b4f8aebce6802c6323d6255ec79928e290 100644 (file)
@@ -951,14 +951,9 @@ perform_tree_ssa_dce (bool aggressive)
   if (aggressive)
     free_dominance_info (CDI_POST_DOMINATORS);
 
-  cleanup_tree_cfg ();
-
   /* Debugging dumps.  */
   if (dump_file)
-    {
-      dump_function_to_file (current_function_decl, dump_file, dump_flags);
-      print_stats ();
-    }
+    print_stats ();
 
   tree_dce_done (aggressive);
 
@@ -997,7 +992,7 @@ struct tree_opt_pass pass_dce =
   0,                                   /* properties_provided */
   0,                                   /* properties_destroyed */
   0,                                   /* todo_flags_start */
-  TODO_fix_def_def_chains |TODO_ggc_collect | TODO_verify_ssa, /* todo_flags_finish */
+  TODO_dump_func | TODO_fix_def_def_chains | TODO_cleanup_cfg | TODO_ggc_collect | TODO_verify_ssa,    /* todo_flags_finish */
   0                                    /* letter */
 };
 
@@ -1014,7 +1009,7 @@ struct tree_opt_pass pass_cd_dce =
   0,                                   /* properties_provided */
   0,                                   /* properties_destroyed */
   0,                                   /* todo_flags_start */
-  TODO_fix_def_def_chains | TODO_ggc_collect | TODO_verify_ssa | TODO_verify_flow,
+  TODO_dump_func | TODO_fix_def_def_chains | TODO_cleanup_cfg | TODO_ggc_collect | TODO_verify_ssa | TODO_verify_flow,
                                        /* todo_flags_finish */
   0                                    /* letter */
 };
index ecdf6f2cc2c90ac62634928730e9b61e8ac3320f..71d1bf2162c23e6942d4932ef3666418d9858335 100644 (file)
@@ -214,11 +214,6 @@ copy_loop_headers (void)
 #endif
 
   loop_optimizer_finalize (loops, NULL);
-
-  /* Run cleanup_tree_cfg here regardless of whether we have done anything, so
-     that we cleanup the blocks created in order to get the loops into a
-     canonical shape.  */
-  cleanup_tree_cfg ();
 }
 
 static bool
@@ -240,7 +235,7 @@ struct tree_opt_pass pass_ch =
   0,                                   /* properties_provided */
   0,                                   /* properties_destroyed */
   0,                                   /* todo_flags_start */
-  (TODO_dump_func
-   | TODO_verify_ssa),                 /* todo_flags_finish */
+  TODO_cleanup_cfg | TODO_dump_func 
+  | TODO_verify_ssa,                   /* todo_flags_finish */
   0                                    /* letter */
 };
index 8ec9c3de3491915bef61bfdf08ccd1bc78904ac3..570dd4203405f0ec1e4cd36941f3de1cd7501bb1 100644 (file)
@@ -411,7 +411,6 @@ tree_ssa_loop_done (void)
   loop_optimizer_finalize (current_loops,
                           (dump_flags & TDF_DETAILS ? dump_file : NULL));
   current_loops = NULL;
-  cleanup_tree_cfg ();
 }
   
 struct tree_opt_pass pass_loop_done = 
@@ -427,7 +426,7 @@ struct tree_opt_pass pass_loop_done =
   0,                                   /* properties_provided */
   0,                                   /* properties_destroyed */
   0,                                   /* todo_flags_start */
-  TODO_dump_func,                      /* todo_flags_finish */
+  TODO_cleanup_cfg | TODO_dump_func,   /* todo_flags_finish */
   0                                    /* letter */
 };
 
index 1d871d008733e986f30ad8ad4386b97a5b190be1..3c241e43fc54de713d0f7560e547ceaa3c5d2b31 100644 (file)
@@ -137,11 +137,6 @@ tree_ssa_phiopt (void)
              }
        }
     }
-
-  /* If we removed any PHIs, then we have unreachable blocks and blocks
-     which need to be merged in the CFG.  */
-  if (removed_phis)
-    cleanup_tree_cfg ();
 }
 
 /* Return TRUE if block BB has no executable statements, otherwise return
@@ -668,7 +663,7 @@ struct tree_opt_pass pass_phiopt =
   0,                                   /* properties_provided */
   0,                                   /* properties_destroyed */
   0,                                   /* todo_flags_start */
-  TODO_dump_func | TODO_ggc_collect    /* todo_flags_finish */
+  TODO_cleanup_cfg | TODO_dump_func | TODO_ggc_collect /* todo_flags_finish */
     | TODO_verify_ssa | TODO_rename_vars
     | TODO_verify_flow,
   0                                    /* letter */