timevar_push (TV_DUMP);
if (profile_arc_flag || flag_test_coverage || flag_branch_probabilities)
{
- dump_file = dump_begin (pass_branch_prob.static_pass_number, NULL);
+ dump_file = dump_begin (pass_profile.static_pass_number, NULL);
end_branch_prob ();
if (dump_file)
- dump_end (pass_branch_prob.static_pass_number, dump_file);
+ dump_end (pass_profile.static_pass_number, dump_file);
}
if (optimize > 0)
/* Register the dump files for the pipeline starting at PASS. IPA is
true if the pass is inter-procedural, and PROPERTIES reflects the
- properties that are guarenteed to be available at the beginning of
+ properties that are guaranteed to be available at the beginning of
the pipeline. */
static void
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_dce);
NEXT_PASS (pass_dominator);
- /* The only copy propagation opportunities left after DOM
- should be due to degenerate PHI nodes. So rather than
- run the full copy propagator, just discover and copy
- propagate away the degenerate PHI nodes. */
- NEXT_PASS (pass_phi_only_copy_prop);
+ /* The only const/copy propagation opportunities left after
+ DOM should be due to degenerate PHI nodes. So rather than
+ run the full propagators, run a specialized pass which
+ only examines PHIs to discover const/copy propagation
+ opportunities. */
+ NEXT_PASS (pass_phi_only_cprop);
NEXT_PASS (pass_phiopt);
NEXT_PASS (pass_may_alias);
NEXT_PASS (pass_rename_ssa_copies);
NEXT_PASS (pass_dominator);
- /* The only copy propagation opportunities left after DOM
- should be due to degenerate PHI nodes. So rather than
- run the full copy propagator, just discover and copy
- propagate away the degenerate PHI nodes. */
- NEXT_PASS (pass_phi_only_copy_prop);
+ /* The only const/copy propagation opportunities left after
+ DOM should be due to degenerate PHI nodes. So rather than
+ run the full propagators, run a specialized pass which
+ only examines PHIs to discover const/copy propagation
+ opportunities. */
+ NEXT_PASS (pass_phi_only_cprop);
NEXT_PASS (pass_reassoc);
NEXT_PASS (pass_dce);
NEXT_PASS (pass_vrp);
NEXT_PASS (pass_dominator);
- /* The only copy propagation opportunities left after DOM
- should be due to degenerate PHI nodes. So rather than
- run the full copy propagator, just discover and copy
- propagate away the degenerate PHI nodes. */
- NEXT_PASS (pass_phi_only_copy_prop);
+ /* The only const/copy propagation opportunities left after
+ DOM should be due to degenerate PHI nodes. So rather than
+ run the full propagators, run a specialized pass which
+ only examines PHIs to discover const/copy propagation
+ opportunities. */
+ NEXT_PASS (pass_phi_only_cprop);
NEXT_PASS (pass_cd_dce);
*p = NULL;
p = &pass_rest_of_compilation.sub;
- NEXT_PASS (pass_remove_unnecessary_notes);
NEXT_PASS (pass_init_function);
NEXT_PASS (pass_jump);
NEXT_PASS (pass_insn_locators_initialize);
NEXT_PASS (pass_jump2);
NEXT_PASS (pass_cse);
NEXT_PASS (pass_gcse);
- NEXT_PASS (pass_loop_optimize);
NEXT_PASS (pass_jump_bypass);
- NEXT_PASS (pass_cfg);
- NEXT_PASS (pass_branch_prob);
NEXT_PASS (pass_rtl_ifcvt);
NEXT_PASS (pass_tracer);
/* Perform loop optimizations. It might be better to do them a bit
NEXT_PASS (pass_regmove);
NEXT_PASS (pass_split_all_insns);
NEXT_PASS (pass_mode_switching);
+ NEXT_PASS (pass_see);
NEXT_PASS (pass_recompute_reg_usage);
NEXT_PASS (pass_sms);
NEXT_PASS (pass_sched);
if (!flags)
return;
- /* Always recalculate TMT usage before doing anything else. */
- if (flags & TODO_update_tmt_usage)
+ /* Always recalculate SMT usage before doing anything else. */
+ if (flags & TODO_update_smt_usage)
recalculate_used_alone ();
/* Always cleanup the CFG before trying to update SSA . */
if (flags & TODO_cleanup_cfg)
{
+ /* CFG Cleanup can cause a constant to prop into an ARRAY_REF. */
+ updating_used_alone = true;
+
if (current_loops)
cleanup_tree_cfg_loop ();
else
cleanup_tree_cfg ();
+ /* Update the used alone after cleanup cfg. */
+ recalculate_used_alone ();
+
/* When cleanup_tree_cfg merges consecutive blocks, it may
perform some simplistic propagation when removing single
valued PHI nodes. This propagation may, in turn, cause the
execute_one_pass (struct tree_opt_pass *pass)
{
bool initializing_dump;
+ unsigned int todo_after = 0;
/* See if we're supposed to run this pass. */
if (pass->gate && !pass->gate ())
gcc_assert ((curr_properties & pass->properties_required)
== pass->properties_required);
- if (pass->properties_destroyed & PROP_tmt_usage)
+ if (pass->properties_destroyed & PROP_smt_usage)
updating_used_alone = true;
/* If a dump file name is present, open it if enabled. */
/* Do it! */
if (pass->execute)
{
- pass->execute ();
+ todo_after = pass->execute ();
last_verified = 0;
}
}
/* Run post-pass cleanup and verification. */
- execute_todo (pass->todo_flags_finish);
+ execute_todo (todo_after | pass->todo_flags_finish);
/* Flush and close dump file. */
if (dump_file_name)
dump_file = NULL;
}
- if (pass->properties_destroyed & PROP_tmt_usage)
+ if (pass->properties_destroyed & PROP_smt_usage)
updating_used_alone = false;
return true;