Revert r174848,174849
authorXinliang David Li <davidxl@gcc.gnu.org>
Thu, 9 Jun 2011 22:49:12 +0000 (22:49 +0000)
committerXinliang David Li <davidxl@gcc.gnu.org>
Thu, 9 Jun 2011 22:49:12 +0000 (22:49 +0000)
From-SVN: r174864

12 files changed:
gcc/cgraphunit.c
gcc/common.opt
gcc/cprop.c
gcc/doc/invoke.texi
gcc/except.c
gcc/gcse.c
gcc/passes.c
gcc/testsuite/gcc.dg/dump-pass.c
gcc/tree-complex.c
gcc/tree-eh.c
gcc/tree-pass.h
gcc/tree-stdarg.c

index 66e7117b96eb972c8dd3c237dc4d97b8efb42ce1..614b7858a3f9ab585ff5a71a7af9fb4118f691a6 100644 (file)
@@ -1117,9 +1117,6 @@ cgraph_finalize_compilation_unit (void)
       fflush (stderr);
     }
 
-  if (flag_dump_passes)
-    dump_passes ();
-
   /* Gimplify and lower all functions, compute reachability and
      remove unreachable nodes.  */
   cgraph_analyze_functions ();
index 53c4983d1bf789f91f6c80a65902089374c20830..5a5360785bd9f69dec016a9d1e6ef82fa354dae5 100644 (file)
@@ -1012,10 +1012,6 @@ fdump-noaddr
 Common Report Var(flag_dump_noaddr)
 Suppress output of addresses in debugging dumps
 
-fdump-passes
-Common Var(flag_dump_passes) Init(0)
-Dump optimization passes
-
 fdump-unnumbered
 Common Report Var(flag_dump_unnumbered)
 Suppress output of instruction numbers, line number notes and addresses in debugging dumps
index a81a80862ddb31164c8f2237c2ae4028c1a17250..b7b17b19387f7b4c2b818c0228ed98cb72cfb601 100644 (file)
@@ -1843,17 +1843,15 @@ one_cprop_pass (void)
 static bool
 gate_rtl_cprop (void)
 {
-  return optimize > 0 && flag_gcse;
+  return optimize > 0 && flag_gcse
+    && !cfun->calls_setjmp
+    && dbg_cnt (cprop);
 }
 
 static unsigned int
 execute_rtl_cprop (void)
 {
   int changed;
-
-  if (cfun->calls_setjmp || !dbg_cnt (cprop))
-    return 0;
-
   delete_unreachable_blocks ();
   df_set_flags (DF_LR_RUN_DCE);
   df_analyze ();
@@ -1884,3 +1882,4 @@ struct rtl_opt_pass pass_rtl_cprop =
   TODO_verify_flow | TODO_ggc_collect   /* todo_flags_finish */
  }
 };
+
index 9062152b4f21ba897e9194b3b7f4b4bc909373f1..0069f788edb061c14c55606a38026a9ba2062a5a 100644 (file)
@@ -291,7 +291,6 @@ Objective-C and Objective-C++ Dialects}.
 -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
 -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol
--fdump-passes @gol
 -fdump-statistics @gol
 -fdump-tree-all @gol
 -fdump-tree-original@r{[}-@var{n}@r{]}  @gol
@@ -5072,8 +5071,7 @@ pair seperated by a colon.  The range is inclusive in both ends.  If the range
 is trivial, the number pair can be simplified as a single number.  If the
 function's cgraph node's @var{uid} is falling within one of the specified ranges,
 the @var{pass} is disabled for that function.  The @var{uid} is shown in the
-function header of a dump file, and pass names can be dumped by using option
-@option{-fdump-passes}.
+function header of a dump file.
 
 @item -fdisable-tree-@var{pass}
 @item -fdisable-tree-@var{pass}=@var{range-list}
@@ -5497,11 +5495,6 @@ Dump after function inlining.
 
 @end table
 
-@item -fdump-passes
-@opindex fdump-passes
-Dump the list of optimization passes that are turned on and off by
-the current command line options.
-
 @item -fdump-statistics-@var{option}
 @opindex fdump-statistics
 Enable and control dumping of pass statistics in a separate file.  The
index a8bb7a94d92eae2da1f6eafe49bd956ba11c6e02..1e5c291055fe700f62a6f2cea7906262cb1ce05c 100644 (file)
@@ -1440,17 +1440,14 @@ finish_eh_generation (void)
 static bool
 gate_handle_eh (void)
 {
-  return true;
+  /* Nothing to do if no regions created.  */
+  return cfun->eh->region_tree != NULL;
 }
 
 /* Complete generation of exception handling code.  */
 static unsigned int
 rest_of_handle_eh (void)
 {
-  /* Nothing to do if no regions created.  */
-  if (cfun->eh->region_tree == NULL)
-    return 0;
-
   finish_eh_generation ();
   cleanup_cfg (CLEANUP_NO_INSN_DEL);
   return 0;
@@ -2395,9 +2392,6 @@ convert_to_eh_region_ranges (void)
   int min_labelno = 0, max_labelno = 0;
   int saved_call_site_base = call_site_base;
 
-  if (cfun->eh->region_tree == NULL)
-    return 0;
-
   crtl->eh.action_record_data = VEC_alloc (uchar, gc, 64);
 
   ar_hash = htab_create (31, action_record_hash, action_record_eq, free);
@@ -2649,6 +2643,8 @@ static bool
 gate_convert_to_eh_region_ranges (void)
 {
   /* Nothing to do for SJLJ exceptions or if no regions created.  */
+  if (cfun->eh->region_tree == NULL)
+    return false;
   if (targetm.except_unwind_info (&global_options) == UI_SJLJ)
     return false;
   return true;
index fd1455f07902b0a1006cbcbeea19f90e00a3157c..41fff7ab86b2bf9579b5486593a8aded98d212e5 100644 (file)
@@ -3713,17 +3713,15 @@ static bool
 gate_rtl_pre (void)
 {
   return optimize > 0 && flag_gcse
-         && optimize_function_for_speed_p (cfun);
+    && !cfun->calls_setjmp
+    && optimize_function_for_speed_p (cfun)
+    && dbg_cnt (pre);
 }
 
 static unsigned int
 execute_rtl_pre (void)
 {
   int changed;
-
-  if (cfun->calls_setjmp || !dbg_cnt (pre))
-    return 0;
-
   delete_unreachable_blocks ();
   df_analyze ();
   changed = one_pre_gcse_pass ();
@@ -3737,20 +3735,18 @@ static bool
 gate_rtl_hoist (void)
 {
   return optimize > 0 && flag_gcse
-        /* It does not make sense to run code hoisting unless we are optimizing
-         for code size -- it rarely makes programs faster, and can make then
-         bigger if we did PRE (when optimizing for space, we don't run PRE).  */
-        && optimize_function_for_size_p (cfun);
+    && !cfun->calls_setjmp
+    /* It does not make sense to run code hoisting unless we are optimizing
+       for code size -- it rarely makes programs faster, and can make then
+       bigger if we did PRE (when optimizing for space, we don't run PRE).  */
+    && optimize_function_for_size_p (cfun)
+    && dbg_cnt (hoist);
 }
 
 static unsigned int
 execute_rtl_hoist (void)
 {
   int changed;
-
-  if (cfun->calls_setjmp || !dbg_cnt (hoist))
-      return 0;
-
   delete_unreachable_blocks ();
   df_analyze ();
   changed = one_code_hoisting_pass ();
@@ -3803,3 +3799,4 @@ struct rtl_opt_pass pass_rtl_hoist =
 };
 
 #include "gt-gcse.h"
+
index 4c31a23b850adb77d188053e77f9719e21c6b12f..f06a67c4d90d6a6f0cc60279e37e13c2ae30a40d 100644 (file)
@@ -478,7 +478,7 @@ passr_eq (const void *p1, const void *p2)
   return !strcmp (s1->unique_name, s2->unique_name);
 }
 
-static htab_t name_to_pass_map = NULL;
+static htab_t pass_name_tab = NULL;
 
 /* Register PASS with NAME.  */
 
@@ -488,11 +488,11 @@ register_pass_name (struct opt_pass *pass, const char *name)
   struct pass_registry **slot;
   struct pass_registry pr;
 
-  if (!name_to_pass_map)
-    name_to_pass_map = htab_create (256, passr_hash, passr_eq, NULL);
+  if (!pass_name_tab)
+    pass_name_tab = htab_create (256, passr_hash, passr_eq, NULL);
 
   pr.unique_name = name;
-  slot = (struct pass_registry **) htab_find_slot (name_to_pass_map, &pr, INSERT);
+  slot = (struct pass_registry **) htab_find_slot (pass_name_tab, &pr, INSERT);
   if (!*slot)
     {
       struct pass_registry *new_pr;
@@ -506,101 +506,6 @@ register_pass_name (struct opt_pass *pass, const char *name)
     return; /* Ignore plugin passes.  */
 }
 
-/* Map from pass id to canonicalized pass name.  */
-
-typedef const char *char_ptr;
-DEF_VEC_P(char_ptr);
-DEF_VEC_ALLOC_P(char_ptr, heap);
-static VEC(char_ptr, heap) *pass_tab = NULL;
-
-/* Callback function for traversing NAME_TO_PASS_MAP.  */
-
-static int
-pass_traverse (void **slot, void *data ATTRIBUTE_UNUSED)
-{
-  struct pass_registry **p = (struct pass_registry **)slot;
-  struct opt_pass *pass = (*p)->pass;
-
-  gcc_assert (pass->static_pass_number > 0);
-  gcc_assert (pass_tab);
-
-  VEC_replace (char_ptr, pass_tab, pass->static_pass_number,
-               (*p)->unique_name);
-
-  return 1;
-}
-
-/* The function traverses NAME_TO_PASS_MAP and creates a pass info
-   table for dumping purpose.  */
-
-static void
-create_pass_tab (void)
-{
-  if (!flag_dump_passes)
-    return;
-
-  VEC_safe_grow_cleared (char_ptr, heap,
-                         pass_tab, passes_by_id_size + 1);
-  htab_traverse (name_to_pass_map, pass_traverse, NULL);
-}
-
-static bool override_gate_status (struct opt_pass *, tree, bool);
-
-/* Dump the instantiated name for PASS. IS_ON indicates if PASS
-   is turned on or not.  */
-
-static void
-dump_one_pass (struct opt_pass *pass, int pass_indent)
-{
-  int indent = 3 * pass_indent;
-  const char *pn;
-  bool is_on, is_really_on;
-
-  is_on = (pass->gate == NULL) ? true : pass->gate();
-  is_really_on = override_gate_status (pass, NULL, is_on);
-
-  if (pass->static_pass_number <= 0)
-    pn = pass->name;
-  else
-    pn = VEC_index (char_ptr, pass_tab, pass->static_pass_number);
-
-  fprintf (stderr, "%*s%-40s%*s:%s%s\n", indent, " ", pn,
-           (15 - indent < 0 ? 0 : 15 - indent), " ",
-           is_on ? "  ON" : "  OFF",
-           ((!is_on) == (!is_really_on) ? ""
-            : (is_really_on ? " (FORCED_ON)" : " (FORCED_OFF)")));
-}
-
-/* Dump pass list PASS with indentation INDENT.  */
-
-static void
-dump_pass_list (struct opt_pass *pass, int indent)
-{
-  do
-    {
-      dump_one_pass (pass, indent);
-      if (pass->sub)
-        dump_pass_list (pass->sub, indent + 1);
-      pass = pass->next;
-    }
-  while (pass);
-}
-
-/* Dump all optimization passes.  */
-
-void
-dump_passes (void)
-{
-  create_pass_tab();
-
-  dump_pass_list (all_lowering_passes, 1);
-  dump_pass_list (all_small_ipa_passes, 1);
-  dump_pass_list (all_regular_ipa_passes, 1);
-  dump_pass_list (all_lto_gen_passes, 1);
-  dump_pass_list (all_passes, 1);
-}
-
-
 /* Returns the pass with NAME.  */
 
 static struct opt_pass *
@@ -608,8 +513,9 @@ get_pass_by_name (const char *name)
 {
   struct pass_registry **slot, pr;
 
+  gcc_assert (pass_name_tab);
   pr.unique_name = name;
-  slot = (struct pass_registry **) htab_find_slot (name_to_pass_map,
+  slot = (struct pass_registry **) htab_find_slot (pass_name_tab,
                                                    &pr, NO_INSERT);
 
   if (!slot || !*slot)
index bcdf99ae0286c169d498d109d79e07ec5810e023..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,14 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-passes" } */
-
-unsigned res;
-
-void
-foo (unsigned code, int len)
-{
-  int i;
-  for (i = 0; i < len; i++)
-    res |= code & 1;
-}
-
-/* { dg-prune-output ".*" } */
index 34298517effc1c8f00d473d0f78384efcadc7681..ec2b438ca47c59d29b7a7e97c00b8e95c26412f9 100644 (file)
@@ -1569,11 +1569,6 @@ tree_lower_complex (void)
   gimple_stmt_iterator gsi;
   basic_block bb;
 
-  /* With errors, normal optimization passes are not run.  If we don't
-     lower complex operations at all, rtl expansion will abort.  */
-  if (cfun->curr_properties & PROP_gimple_lcx)
-    return 0;
-
   if (!init_dont_simulate_again ())
     return 0;
 
@@ -1639,7 +1634,9 @@ struct gimple_opt_pass pass_lower_complex =
 static bool
 gate_no_optimization (void)
 {
-  return true;
+  /* With errors, normal optimization passes are not run.  If we don't
+     lower complex operations at all, rtl expansion will abort.  */
+  return !(cfun->curr_properties & PROP_gimple_lcx);
 }
 
 struct gimple_opt_pass pass_lower_complex_O0 =
index 7d27e0c90a7e31c02a851a34cd490633fde25f1c..e87c32e798b2575df83e05daa94fc0fb751d3f8a 100644 (file)
@@ -3234,9 +3234,6 @@ execute_lower_eh_dispatch (void)
   bool any_rewritten = false;
   bool redirected = false;
 
-  if (cfun->eh->region_tree == NULL)
-    return 0;
-
   assign_filter_values ();
 
   FOR_EACH_BB (bb)
@@ -3257,7 +3254,7 @@ execute_lower_eh_dispatch (void)
 static bool
 gate_lower_eh_dispatch (void)
 {
-  return true;
+  return cfun->eh->region_tree != NULL;
 }
 
 struct gimple_opt_pass pass_lower_eh_dispatch =
@@ -3986,12 +3983,8 @@ execute_cleanup_eh_1 (void)
 static unsigned int
 execute_cleanup_eh (void)
 {
-  int ret;
+  int ret = execute_cleanup_eh_1 ();
 
-  if (cfun->eh == NULL || cfun->eh->region_tree == NULL)
-    return 0;
-
-  ret = execute_cleanup_eh_1 ();
   /* If the function no longer needs an EH personality routine
      clear it.  This exposes cross-language inlining opportunities
      and avoids references to a never defined personality routine.  */
@@ -4005,7 +3998,7 @@ execute_cleanup_eh (void)
 static bool
 gate_cleanup_eh (void)
 {
-  return true;
+  return cfun->eh != NULL && cfun->eh->region_tree != NULL;
 }
 
 struct gimple_opt_pass pass_cleanup_eh = {
index f3a03b07127afd20a34f216cb7059070236cb3d8..daf7202f4f6f7f3e33bc77bd511d9c5795b1d834 100644 (file)
@@ -639,6 +639,5 @@ extern void do_per_function_toporder (void (*) (void *), void *);
 
 extern void disable_pass (const char *);
 extern void enable_pass (const char *);
-extern void dump_passes (void);
 
 #endif /* GCC_TREE_PASS_H */
index 7f16092f436dd811f1fb0f827a0879e4cb323139..46fc339a55a62f9aae228fd5df68621ba07b0870 100644 (file)
@@ -627,7 +627,8 @@ check_all_va_list_escapes (struct stdarg_info *si)
 static bool
 gate_optimize_stdarg (void)
 {
-  return true;
+  /* This optimization is only for stdarg functions.  */
+  return cfun->stdarg != 0;
 }
 
 
@@ -644,10 +645,6 @@ execute_optimize_stdarg (void)
   const char *funcname = NULL;
   tree cfun_va_list;
 
-  /* This optimization is only for stdarg functions.  */
-  if (cfun->stdarg == 0)
-    return 0;
-
   cfun->va_list_gpr_size = 0;
   cfun->va_list_fpr_size = 0;
   memset (&si, 0, sizeof (si));