This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

ipa-branch merge: Enable IPA-SSA


Hi,
this patch finally reorders passes so that we go into SSA form early.
This is not complette merge of ipa-branch yet (we don't do optimizations
before inlining and IPA-CP/matrix reorg was not merged yet), but it is
the most important part.  The patch depends on the fixup_cfg patch I
sent last week.

Concerning overall compile time performance, this patch is almost noop
for common C code (such as combine.c).  We produce a little less GGC
garbage overall (76.4MB instead of 77.1MB), but the memory usage just
after conversion to SSA at IPA level.  For combine.c it is:

gimplify.c:454 (create_tmp_var_raw)                   16544: 0.2% 0: 0.0%    1043152: 5.6%          0: 0.0%       6021
optabs.c:4986 (new_convert_optab)                         0: 0.0% 0: 0.0%    1204424: 6.5%     352456:18.5%         13
tree-inline.c:2712 (copy_tree_r)                      40936: 0.4% 0: 0.0%    2089224:11.2%      44400: 2.3%      28568
tree-dfa.c:189 (create_stmt_ann)                     319200: 2.9% 0: 0.0%    2710680:14.6%     201992:10.6%      25249
Total                                              10966436 213888         18582860          1907584           341933
source location                                     Garbage Freed             Leak         Overhead            Times

to:
gimplify.c:454 (create_tmp_var_raw)                   16544: 0.1% 0: 0.0%    1043152: 4.5%          0: 0.0%       6021
optabs.c:4986 (new_convert_optab)                         0: 0.0% 0: 0.0%    1204424: 5.1%     352456:16.3%         13
tree-ssanames.c:142 (make_ssa_name)                       0: 0.0% 0: 0.0%    1448160: 6.2%          0: 0.0%      15085
tree-ssa-operands.c:488 (ssa_operand_alloc)               0: 0.0% 0: 0.0%    1743512: 7.4%      68248: 3.2%        152
tree-inline.c:2712 (copy_tree_r)                      40936: 0.4% 0: 0.0%    2089224: 8.9%      44400: 2.1%      28568
tree-dfa.c:189 (create_stmt_ann)                     319200: 2.8% 0: 0.0%    2710680:11.6%     201992: 9.3%      25249
Total                                              11213396 411376         23420252          2162848           376048
source location                                     Garbage Freed             Leak         Overhead            Times

(ie operand caches consume about 7% of memory, SSA names about 6% of
memory). Relative to IPA branch that is before mem-ref merge the operand
cache usage increased noticeably, I plan to look into it soon.  Overall
I think the memory consumption increase is unforutnate but not too bad -
with early optimizations (I am going to submit incrementally) we are
going to get about 10% of memory back.  The analysis done on IPA branch
didn't show regressions in memory usage worse than 5% on the common
testcases that is not as high price to pay.  Situation is also better on
C++ where we produce less garbage during inlining by better constant
propagation.

The patch combine several rather simple changes I can't split
incrementally.  Basically:

1) build_ssa is moved into early_local_passes (subpass
early_optimizations).  
2) cgraph code is updated to make early_local_passes to be executed on
each function - originally these was skipped for functions added late
and in non-unit-at-a-time.
3) Some of gueard of passes in early_local_passes needs to be updated so
they are not done without optimization and profiling is not done for
functions added late (in particular the gcov constructor)
4) Since early_local_passes, the tree_early_profiling is now not needed.
5) mudflap has to be cleaned up: it is now executed after out_of_ssa
that invalidates operand caches, but before free_datastructures, so
operand caches are active but broken.  This causes ICEs, so the patch
simply makes mudflap work after free_datastructures by making
update_modified_stmts noop when operands cache is not active (it is
called via edge splitting code in tree-cfg used by mudflap).

The patch was bootstrapped/regtested i686-linux, x86_64-linux, ppc-linux
and ia64-linux.  The set of regresisons is:
g++.dg/opt/devirt1.C scan-assembler xyzzy
gcc.dg/ipa/ipa-1.c (test for excess errors)
gcc.dg/ipa/ipa-1.c scan-ipa-dump-times propagating const 2
gcc.dg/ipa/ipa-1.c scan-ipa-dump-times versioned function 2
gcc.dg/ipa/ipa-2.c (test for excess errors)
gcc.dg/ipa/ipa-3.c (test for excess errors)
gcc.dg/ipa/ipa-3.c scan-ipa-dump-times propagating const 3
gcc.dg/ipa/ipa-4.c (test for excess errors)
gcc.dg/ipa/ipa-5.c (test for excess errors)
gcc.dg/ipa/ipa-6.c (test for excess errors)

Razya has patch for the ipa-* failures all caused by ipacp and I will be
sending patch for devirt1.C shortly.  The testcase is demonstrating
latent problem of inliner I mentioned already few times that it is not
folding statements possibly constructing unfolded forms when constant
propagating.  In this case old inliner didn't copy propagate the return
and leaved the job to CCP that properly folds and devirtualize.  SSA
inliner constant propagate proactively and we never re-fold that
statement leaving the virtual call in.

I would like to propose it for mainline with promise that the remaining
regressions will be fixed shortly.  (since patches for both problems
exist, just it is impractical to combine too many things into single
patch).  The patch can be also simplified by leaving the mudflap changes
to incremental patch.

OK?

Honza

	* cgraph.c: Include tree-flow.h
	(cgraph_add_new-function): Handle IPA_SSA mode; execute early_local_passes.
	* cgraph.h (enum cgraph_state): Add CGRAPH_STATE_IPA_SSA.
	* tree-pass.h (pass_all_early_optimizations): Declare.
	* cgraphunit.c (cgraph_process_new_functions): Add IPA_SSA; execute
	early_local_passes.
	(cgraph_analyze_function): Do early_local_passes.
	* tree-mudflap.c (mf_decl_cache_locals, mf_build_check_statement_for):
	Do not add referenced vars.
	* tree-optimize.c (gate_all_optimizations): Do not execute when not in
	SSA form.
	(gate_all_early_local_passes): New gate.
	(pass_early_local_passes): Use new gate.
	(execute_early_local_optimizations): New functions.
	(gate_all_early_optimizations): New gate.
	(pass_all_early_optimizations): New pass.
	(execute_free_datastructures): Free SSA only when initialized.
	(gate_init_datastructures): Init only when optimizing.
	(tree_lowering_passes): Do early local passes when called late.
	* tree-profile.c (do_tree_profiling): Don't profile functions added late.
	(do_early_tree_profiling, pass_early_tree_profile): Kill.
	* tree-cfg.c (update_modified_stmts): Do not update when operands are not active.
	* passes.c (init_optimizations_passes): Reorder so we go into SSA during early_local_passes.
	* Makefile.in (cgraph.o): Add dependency on tree-flow.h.

	* pr16194.c: We now output error on all three functions, not just first one.
Index: cgraph.c
===================================================================
*** cgraph.c	(revision 120286)
--- cgraph.c	(working copy)
*************** The callgraph:
*** 83,88 ****
--- 83,89 ----
  #include "intl.h"
  #include "tree-gimple.h"
  #include "tree-dump.h"
+ #include "tree-flow.h"
  
  static void cgraph_node_remove_callers (struct cgraph_node *node);
  static inline void cgraph_edge_remove_caller (struct cgraph_edge *e);
*************** cgraph_add_new_function (tree fndecl, bo
*** 942,947 ****
--- 943,949 ----
          break;
  
        case CGRAPH_STATE_IPA:
+       case CGRAPH_STATE_IPA_SSA:
        case CGRAPH_STATE_EXPANSION:
  	/* Bring the function into finalized state and enqueue for later
  	   analyzing and compilation.  */
*************** cgraph_add_new_function (tree fndecl, bo
*** 963,968 ****
--- 965,974 ----
  	tree_register_cfg_hooks ();
  	if (!lowered)
            tree_lowering_passes (fndecl);
+ 	bitmap_obstack_initialize (NULL);
+ 	if (!gimple_in_ssa_p (DECL_STRUCT_FUNCTION (fndecl)) && optimize)
+ 	  execute_pass_list (pass_early_local_passes.sub);
+ 	bitmap_obstack_release (NULL);
  	tree_rest_of_compilation (fndecl);
  	pop_cfun ();
  	current_function_decl = NULL;
Index: cgraph.h
===================================================================
*** cgraph.h	(revision 120286)
--- cgraph.h	(working copy)
*************** enum cgraph_state
*** 260,265 ****
--- 260,267 ----
    CGRAPH_STATE_CONSTRUCTION,
    /* Callgraph is built and IPA passes are being run.  */
    CGRAPH_STATE_IPA,
+   /* Callgraph is built and all functions are transformed to SSA form.  */
+   CGRAPH_STATE_IPA_SSA,
    /* Functions are now ordered and being passed to RTL expanders.  */
    CGRAPH_STATE_EXPANSION,
    /* All cgraph expansion is done.  */
Index: tree-pass.h
===================================================================
*** tree-pass.h	(revision 120286)
--- tree-pass.h	(working copy)
*************** extern struct tree_opt_pass pass_ipa_pur
*** 314,319 ****
--- 314,320 ----
  extern struct tree_opt_pass pass_ipa_type_escape;
  extern struct tree_opt_pass pass_ipa_pta;
  extern struct tree_opt_pass pass_early_local_passes;
+ extern struct tree_opt_pass pass_all_early_optimizations;
  
  extern struct tree_opt_pass pass_all_optimizations;
  extern struct tree_opt_pass pass_cleanup_cfg_post_optimizing;
Index: cgraphunit.c
===================================================================
*** cgraphunit.c	(revision 120286)
--- cgraphunit.c	(working copy)
*************** cgraph_process_new_functions (void)
*** 294,299 ****
--- 294,300 ----
  	  break;
  
  	case CGRAPH_STATE_IPA:
+ 	case CGRAPH_STATE_IPA_SSA:
  	  /* When IPA optimization already started, do all essential
  	     transformations that has been already performed on the whole
  	     cgraph but not on this function.  */
*************** cgraph_process_new_functions (void)
*** 313,318 ****
--- 314,325 ----
  	  initialize_inline_failed (node);
  	  if (flag_really_no_inline && !node->local.disregard_inline_limits)
  	     node->local.inlinable = 0;
+ 	  if ((cgraph_state == CGRAPH_STATE_IPA_SSA
+ 	      && !gimple_in_ssa_p (DECL_STRUCT_FUNCTION (fndecl)))
+ 	      /* When not optimizing, be sure we run early local passes anyway
+ 		 to expand OMP.  */
+ 	      || !optimize)
+ 	    execute_pass_list (pass_early_local_passes.sub);
  	  free_dominance_info (CDI_POST_DOMINATORS);
  	  free_dominance_info (CDI_DOMINATORS);
  	  pop_cfun ();
*************** cgraph_analyze_function (struct cgraph_n
*** 877,882 ****
--- 884,898 ----
      node->local.inlinable = 0;
    /* Inlining characteristics are maintained by the cgraph_mark_inline.  */
    node->global.insns = node->local.self_insns;
+   if (!flag_unit_at_a_time)
+     {
+       bitmap_obstack_initialize (NULL);
+       tree_register_cfg_hooks ();
+       execute_pass_list (pass_early_local_passes.sub);
+       free_dominance_info (CDI_POST_DOMINATORS);
+       free_dominance_info (CDI_DOMINATORS);
+       bitmap_obstack_release (NULL);
+     }
  
    node->analyzed = true;
    pop_cfun ();
Index: testsuite/gcc.dg/pr16194.c
===================================================================
*** testsuite/gcc.dg/pr16194.c	(revision 120286)
--- testsuite/gcc.dg/pr16194.c	(working copy)
*************** void bug (void)
*** 56,67 ****
  void bug2 (void)
  {
    register char* dst ASMDECL;
!   __asm__ ("": :"g"(*dst) CLOBBER_LIST);
  }
  
  void
  foo (void)
  {
    register struct C *dst ASMDECL;
!   __asm__ ("" : "=g"(dst->c.b[1].a) INP_CLOBBER_LIST);
  }
--- 56,67 ----
  void bug2 (void)
  {
    register char* dst ASMDECL;
!   __asm__ ("": :"g"(*dst) CLOBBER_LIST); /* { dg-error "conflict" } */
  }
  
  void
  foo (void)
  {
    register struct C *dst ASMDECL;
!   __asm__ ("" : "=g"(dst->c.b[1].a) INP_CLOBBER_LIST); /* { dg-error "conflict" } */
  }
Index: tree-mudflap.c
===================================================================
*** tree-mudflap.c	(revision 120286)
--- tree-mudflap.c	(working copy)
*************** mf_decl_cache_locals (void)
*** 460,473 ****
       globals into the cache variables.  */
    t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (mf_cache_shift_decl_l),
                mf_cache_shift_decl_l, mf_cache_shift_decl);
-   add_referenced_var (mf_cache_shift_decl);
    SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (current_function_decl));
    gimplify_to_stmt_list (&t);
    shift_init_stmts = t;
  
    t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (mf_cache_mask_decl_l),
                mf_cache_mask_decl_l, mf_cache_mask_decl);
-   add_referenced_var (mf_cache_mask_decl);
    SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (current_function_decl));
    gimplify_to_stmt_list (&t);
    mask_init_stmts = t;
--- 460,471 ----
*************** mf_build_check_statement_for (tree base,
*** 573,589 ****
                                              & __mf_mask].  */
    t = build2 (RSHIFT_EXPR, mf_uintptr_type, mf_base,
                (flag_mudflap_threads ? mf_cache_shift_decl : mf_cache_shift_decl_l));
-   add_referenced_var (mf_cache_shift_decl);
    t = build2 (BIT_AND_EXPR, mf_uintptr_type, t,
                (flag_mudflap_threads ? mf_cache_mask_decl : mf_cache_mask_decl_l));
-   add_referenced_var (mf_cache_mask_decl);
    t = build4 (ARRAY_REF,
                TREE_TYPE (TREE_TYPE (mf_cache_array_decl)),
                mf_cache_array_decl, t, NULL_TREE, NULL_TREE);
-   add_referenced_var (mf_cache_array_decl);
    t = build1 (ADDR_EXPR, mf_cache_structptr_type, t);
    t = build2 (GIMPLE_MODIFY_STMT, void_type_node, mf_elem, t);
-   add_referenced_var (mf_elem);
    SET_EXPR_LOCUS (t, locus);
    gimplify_to_stmt_list (&t);
    tsi_link_after (&tsi, t, TSI_CONTINUE_LINKING);
--- 571,583 ----
*************** mf_build_check_statement_for (tree base,
*** 607,613 ****
                build1 (INDIRECT_REF, mf_cache_struct_type, mf_elem),
                TYPE_FIELDS (mf_cache_struct_type), NULL_TREE);
    t = build2 (GT_EXPR, boolean_type_node, t, mf_base);
-   add_referenced_var (mf_base);
  
    /* Construct '__mf_elem->high < __mf_limit'.
  
--- 601,606 ----
Index: tree-optimize.c
===================================================================
*** tree-optimize.c	(revision 120286)
--- tree-optimize.c	(working copy)
*************** static bool
*** 57,64 ****
  gate_all_optimizations (void)
  {
    return (optimize >= 1
! 	  /* Don't bother doing anything if the program has errors.  */
! 	  && !(errorcount || sorrycount));
  }
  
  struct tree_opt_pass pass_all_optimizations =
--- 57,65 ----
  gate_all_optimizations (void)
  {
    return (optimize >= 1
! 	  /* Don't bother doing anything if the program has errors. 
! 	     We have to pass down the queue if we already went into SSA */
! 	  && (!(errorcount || sorrycount) || gimple_in_ssa_p (cfun)));
  }
  
  struct tree_opt_pass pass_all_optimizations =
*************** struct tree_opt_pass pass_all_optimizati
*** 78,87 ****
    0					/* letter */
  };
  
  struct tree_opt_pass pass_early_local_passes =
  {
!   NULL,					/* name */
!   gate_all_optimizations,		/* gate */
    NULL,					/* execute */
    NULL,					/* sub */
    NULL,					/* next */
--- 79,97 ----
    0					/* letter */
  };
  
+ /* Gate: execute, or not, all of the non-trivial optimizations.  */
+ 
+ static bool
+ gate_all_early_local_passes (void)
+ {
+ 	  /* Don't bother doing anything if the program has errors.  */
+   return (!errorcount && !sorrycount);
+ }
+ 
  struct tree_opt_pass pass_early_local_passes =
  {
!   "early_local_cleanups",		/* name */
!   gate_all_early_local_passes,		/* gate */
    NULL,					/* execute */
    NULL,					/* sub */
    NULL,					/* next */
*************** struct tree_opt_pass pass_early_local_pa
*** 95,100 ****
--- 105,145 ----
    0					/* letter */
  };
  
+ static unsigned int
+ execute_early_local_optimizations (void)
+ {
+   if (flag_unit_at_a_time)
+     cgraph_state = CGRAPH_STATE_IPA_SSA;
+   return 0;
+ }
+ 
+ /* Gate: execute, or not, all of the non-trivial optimizations.  */
+ 
+ static bool
+ gate_all_early_optimizations (void)
+ {
+   return (optimize >= 1
+ 	  /* Don't bother doing anything if the program has errors.  */
+ 	  && !(errorcount || sorrycount));
+ }
+ 
+ struct tree_opt_pass pass_all_early_optimizations =
+ {
+   "early_optimizations",		/* name */
+   gate_all_early_optimizations,		/* gate */
+   execute_early_local_optimizations,	/* execute */
+   NULL,					/* sub */
+   NULL,					/* next */
+   0,					/* static_pass_number */
+   0,					/* tv_id */
+   0,					/* properties_required */
+   0,					/* properties_provided */
+   0,					/* properties_destroyed */
+   0,					/* todo_flags_start */
+   0,					/* todo_flags_finish */
+   0					/* letter */
+ };
+ 
  /* Pass: cleanup the CFG just before expanding trees to RTL.
     This is just a round of label cleanups and case node grouping
     because after the tree optimizers have run such cleanups may
*************** execute_free_datastructures (void)
*** 170,176 ****
  
    /* Remove the ssa structures.  Do it here since this includes statement
       annotations that need to be intact during disband_implicit_edges.  */
!   delete_tree_ssa ();
    return 0;
  }
  
--- 223,230 ----
  
    /* Remove the ssa structures.  Do it here since this includes statement
       annotations that need to be intact during disband_implicit_edges.  */
!   if (cfun->gimple_df)
!     delete_tree_ssa ();
    return 0;
  }
  
*************** execute_init_datastructures (void)
*** 341,350 ****
    return 0;
  }
  
  struct tree_opt_pass pass_init_datastructures =
  {
    NULL,					/* name */
!   NULL,					/* gate */
    execute_init_datastructures,		/* execute */
    NULL,					/* sub */
    NULL,					/* next */
--- 431,448 ----
    return 0;
  }
  
+ /* Gate: initialize or not the SSA datastructures.  */
+ 
+ static bool
+ gate_init_datastructures (void)
+ {
+   return (optimize >= 1);
+ }
+ 
  struct tree_opt_pass pass_init_datastructures =
  {
    NULL,					/* name */
!   gate_init_datastructures,		/* gate */
    execute_init_datastructures,		/* execute */
    NULL,					/* sub */
    NULL,					/* next */
*************** tree_lowering_passes (tree fn)
*** 368,374 ****
--- 466,475 ----
    tree_register_cfg_hooks ();
    bitmap_obstack_initialize (NULL);
    execute_pass_list (all_lowering_passes);
+   if (optimize && cgraph_global_info_ready)
+     execute_pass_list (pass_early_local_passes.sub);
    free_dominance_info (CDI_POST_DOMINATORS);
+   free_dominance_info (CDI_DOMINATORS);
    compact_blocks ();
    current_function_decl = saved_current_function_decl;
    bitmap_obstack_release (NULL);
Index: tree-profile.c
===================================================================
*** tree-profile.c	(revision 120286)
--- tree-profile.c	(working copy)
*************** do_tree_profiling (void)
*** 237,242 ****
--- 237,246 ----
  static unsigned int
  tree_profiling (void)
  {
+   /* Don't profile functions produced at destruction time, particularly
+      the gcov datastructure initializer.  */
+   if (cgraph_state == CGRAPH_STATE_FINISHED)
+     return 0;
    branch_prob ();
    if (flag_branch_probabilities
        && flag_profile_values
*************** struct tree_opt_pass pass_tree_profile =
*** 267,299 ****
    0					/* letter */
  };
  
- /* Return 1 if tree-based profiling is in effect, else 0.
-    If it is, set up hooks for tree-based profiling.
-    Gate for pass_tree_profile.  */
- 
- static bool
- do_early_tree_profiling (void)
- {
-   return (do_tree_profiling () && (!flag_unit_at_a_time || !optimize));
- }
- 
- struct tree_opt_pass pass_early_tree_profile = 
- {
-   "early_tree_profile",			/* name */
-   do_early_tree_profiling,		/* gate */
-   tree_profiling,			/* execute */
-   NULL,					/* sub */
-   NULL,					/* next */
-   0,					/* static_pass_number */
-   TV_BRANCH_PROB,			/* tv_id */
-   PROP_gimple_leh | PROP_cfg,		/* properties_required */
-   PROP_gimple_leh | PROP_cfg,		/* properties_provided */
-   0,					/* properties_destroyed */
-   0,					/* todo_flags_start */
-   TODO_verify_stmts,			/* todo_flags_finish */
-   0					/* letter */
- };
- 
  struct profile_hooks tree_profile_hooks =
  {
    tree_init_edge_profiler,      /* init_edge_profiler */
--- 271,276 ----
Index: tree-cfg.c
===================================================================
*** tree-cfg.c	(revision 120286)
--- tree-cfg.c	(working copy)
*************** bsi_for_stmt (tree stmt)
*** 2803,2808 ****
--- 2803,2810 ----
  static inline void
  update_modified_stmts (tree t)
  {
+   if (!ssa_operands_active ())
+     return;
    if (TREE_CODE (t) == STATEMENT_LIST)
      {
        tree_stmt_iterator i;
Index: passes.c
===================================================================
*** passes.c	(revision 120286)
--- passes.c	(working copy)
*************** init_optimization_passes (void)
*** 461,483 ****
    NEXT_PASS (pass_lower_complex_O0);
    NEXT_PASS (pass_lower_vector);
    NEXT_PASS (pass_warn_function_return);
-   NEXT_PASS (pass_early_tree_profile);
    *p = NULL;
  
    p = &pass_early_local_passes.sub;
    NEXT_PASS (pass_tree_profile);
    NEXT_PASS (pass_cleanup_cfg);
    NEXT_PASS (pass_rebuild_cgraph_edges);
    *p = NULL;
  
    p = &all_passes;
    NEXT_PASS (pass_fixup_cfg);
-   NEXT_PASS (pass_init_datastructures);
-   NEXT_PASS (pass_expand_omp);
    NEXT_PASS (pass_all_optimizations);
    NEXT_PASS (pass_warn_function_noreturn);
-   NEXT_PASS (pass_mudflap_2);
    NEXT_PASS (pass_free_datastructures);
    NEXT_PASS (pass_free_cfg_annotations);
    NEXT_PASS (pass_expand);
    NEXT_PASS (pass_rest_of_compilation);
--- 463,494 ----
    NEXT_PASS (pass_lower_complex_O0);
    NEXT_PASS (pass_lower_vector);
    NEXT_PASS (pass_warn_function_return);
    *p = NULL;
  
    p = &pass_early_local_passes.sub;
    NEXT_PASS (pass_tree_profile);
    NEXT_PASS (pass_cleanup_cfg);
+   NEXT_PASS (pass_init_datastructures);
+   NEXT_PASS (pass_expand_omp);
+   NEXT_PASS (pass_all_early_optimizations);
    NEXT_PASS (pass_rebuild_cgraph_edges);
    *p = NULL;
  
+   p = &pass_all_early_optimizations.sub;
+   NEXT_PASS (pass_referenced_vars);
+   NEXT_PASS (pass_reset_cc_flags);
+   NEXT_PASS (pass_build_ssa);
+   NEXT_PASS (pass_early_warn_uninitialized);
+   NEXT_PASS (pass_cleanup_cfg);
+ 
+   *p = NULL;
+ 
    p = &all_passes;
    NEXT_PASS (pass_fixup_cfg);
    NEXT_PASS (pass_all_optimizations);
    NEXT_PASS (pass_warn_function_noreturn);
    NEXT_PASS (pass_free_datastructures);
+   NEXT_PASS (pass_mudflap_2);
    NEXT_PASS (pass_free_cfg_annotations);
    NEXT_PASS (pass_expand);
    NEXT_PASS (pass_rest_of_compilation);
*************** init_optimization_passes (void)
*** 485,494 ****
    *p = NULL;
  
    p = &pass_all_optimizations.sub;
-   NEXT_PASS (pass_referenced_vars);
-   NEXT_PASS (pass_reset_cc_flags);
    NEXT_PASS (pass_create_structure_vars);
-   NEXT_PASS (pass_build_ssa);
    NEXT_PASS (pass_may_alias);
    NEXT_PASS (pass_return_slot);
    NEXT_PASS (pass_rename_ssa_copies);
--- 496,502 ----
Index: Makefile.in
===================================================================
*** Makefile.in	(revision 120286)
--- Makefile.in	(working copy)
*************** simplify-rtx.o : simplify-rtx.c $(CONFIG
*** 2293,2299 ****
  cgraph.o : cgraph.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
     langhooks.h toplev.h $(FLAGS_H) $(GGC_H) $(TARGET_H) $(CGRAPH_H) \
     gt-cgraph.h output.h intl.h $(BASIC_BLOCK_H) debug.h $(HASHTAB_H) \
!    $(TREE_INLINE_H) $(VARRAY_H) $(TREE_DUMP_H)
  cgraphunit.o : cgraphunit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
     $(TREE_H) langhooks.h $(TREE_INLINE_H) toplev.h $(FLAGS_H) $(GGC_H) \
     $(TARGET_H) $(CGRAPH_H) intl.h pointer-set.h $(FUNCTION_H) $(TREE_GIMPLE_H) \
--- 2293,2299 ----
  cgraph.o : cgraph.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
     langhooks.h toplev.h $(FLAGS_H) $(GGC_H) $(TARGET_H) $(CGRAPH_H) \
     gt-cgraph.h output.h intl.h $(BASIC_BLOCK_H) debug.h $(HASHTAB_H) \
!    $(TREE_INLINE_H) $(VARRAY_H) $(TREE_DUMP_H) $(TREE_FLOW_H)
  cgraphunit.o : cgraphunit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
     $(TREE_H) langhooks.h $(TREE_INLINE_H) toplev.h $(FLAGS_H) $(GGC_H) \
     $(TARGET_H) $(CGRAPH_H) intl.h pointer-set.h $(FUNCTION_H) $(TREE_GIMPLE_H) \


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]