+2010-11-17 Michael Matz <matz@suse.de>
+
+ * timevar.def (TV_IPA_OPT, TV_EARLY_LOCAL, TV_OPTIMIZE,
+ TV_POSTRELOAD, TV_REMOVE_UNUSED, TV_ADDRESS_TAKEN, TV_TODO,
+ TV_VERIFY_LOOP_CLOSED, TV_VERIFY_RTL_SHARING,
+ TV_REBUILD_FREQUENCIES, TV_REPAIR_LOOPS): New.
+ * tree-into-ssa.c (rewrite_into_ssa): Don't push/pop timevar here ...
+ (pass_build_ssa): ... but here.
+ * cgraphbuild.c (pass_rebuild_cgraph): Use timevar.
+ * tree-ssa-loop-manip.c (verify_loop_closed_ssa): Use timevar.
+ * tree-emutls.c (pass_ipa_lower_emutls): Ditto.
+ * df-core.c (pass_df_initialize_opt,
+ pass_df_initialize_no_opt): Ditto.
+ * predict.c (rebuild_frequencies): Ditto.
+ * tree-vectorizer.c (pass_ipa_increase_alignment): Ditto.
+ * emit-rtl.c (verify_rtl_sharing): Ditto.
+ * tree-cfgcleanup.c (repair_loop_structures): Ditto.
+ * tree-ssa-live.c (remove_unused_locals): Ditto.
+ * cfglayout.c (pass_into_cfg_layout, pass_outof_cfg_layout): Ditto.
+ * tree-ssa.c (pass_early_warn_uninitialized,
+ execute_update_addresses_taken, pass_update_address_taken): Ditto.
+ * tree-optimize.c (pass_all_optimizations, pass_early_local_passes,
+ pass_cleanup_cfg_post_optimizing, tree_rest_of_compilation): Ditto.
+ * passes.c (pass_postreload, execute_todo): Ditto.
+ * tree-ssanames.c (pass_release_ssa_names): Ditto.
+
2010-11-17 Joseph Myers <joseph@codesourcery.com>
* doc/invoke.texi (-dy): Remove.
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_CFG, /* tv_id */
0, /* properties_required */
PROP_cfglayout, /* properties_provided */
0, /* properties_destroyed */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_CFG, /* tv_id */
0, /* properties_required */
0, /* properties_provided */
PROP_cfglayout, /* properties_destroyed */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_CGRAPH, /* tv_id */
PROP_cfg, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_DF_SCAN, /* tv_id */
0, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_DF_SCAN, /* tv_id */
0, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
{
rtx p;
+ timevar_push (TV_VERIFY_RTL_SHARING);
+
for (p = get_insns (); p; p = NEXT_INSN (p))
if (INSN_P (p))
{
verify_rtx_sharing (PATTERN (p), p);
verify_rtx_sharing (REG_NOTES (p), p);
}
+
+ timevar_pop (TV_VERIFY_RTL_SHARING);
}
/* Go through all the RTL insn bodies and copy any invalid shared structure.
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_POSTRELOAD, /* tv_id */
PROP_rtl, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
gcc_assert (flags & TODO_update_ssa_any);
#endif
+ timevar_push (TV_TODO);
+
/* Inform the pass whether it is the first time it is run. */
first_pass_instance = (flags & TODO_mark_first_instance) != 0;
df problems. */
if (flags & TODO_df_finish)
df_finish_pass ((flags & TODO_df_verify) != 0);
+
+ timevar_pop (TV_TODO);
}
/* Verify invariants that should hold between passes. This is a place
void
rebuild_frequencies (void)
{
+ timevar_push (TV_REBUILD_FREQUENCIES);
if (profile_status == PROFILE_GUESSED)
{
loop_optimizer_init (0);
counts_to_freqs ();
else
gcc_unreachable ();
+ timevar_pop (TV_REBUILD_FREQUENCIES);
}
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_NONE, /* tv_id */
0, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
DEFTIMEVAR (TV_VARPOOL , "varpool construction")
DEFTIMEVAR (TV_IPA_CONSTANT_PROP , "ipa cp")
DEFTIMEVAR (TV_IPA_FNSPLIT , "ipa function splitting")
+DEFTIMEVAR (TV_IPA_OPT , "ipa various optimizations")
DEFTIMEVAR (TV_IPA_LTO_GIMPLE_IN , "ipa lto gimple in")
DEFTIMEVAR (TV_IPA_LTO_GIMPLE_OUT , "ipa lto gimple out")
DEFTIMEVAR (TV_IPA_LTO_DECL_IN , "ipa lto decl in")
DEFTIMEVAR (TV_VAR_TRACKING_DATAFLOW , "var-tracking dataflow")
DEFTIMEVAR (TV_VAR_TRACKING_EMIT , "var-tracking emit")
DEFTIMEVAR (TV_TREE_IFCOMBINE , "tree if-combine")
-DEFTIMEVAR (TV_TREE_UNINIT , "uninit var anaysis")
+DEFTIMEVAR (TV_TREE_UNINIT , "uninit var analysis")
DEFTIMEVAR (TV_PLUGIN_INIT , "plugin initialization")
DEFTIMEVAR (TV_PLUGIN_RUN , "plugin execution")
/* Everything else in rest_of_compilation not included above. */
+DEFTIMEVAR (TV_EARLY_LOCAL , "early local passes")
+DEFTIMEVAR (TV_OPTIMIZE , "unaccounted optimizations")
DEFTIMEVAR (TV_REST_OF_COMPILATION , "rest of compilation")
+DEFTIMEVAR (TV_POSTRELOAD , "unaccounted post reload")
+DEFTIMEVAR (TV_REMOVE_UNUSED , "remove unused locals")
+DEFTIMEVAR (TV_ADDRESS_TAKEN , "address taken")
+DEFTIMEVAR (TV_TODO , "unaccounted todo")
+DEFTIMEVAR (TV_VERIFY_LOOP_CLOSED , "verify loop closed")
+DEFTIMEVAR (TV_VERIFY_RTL_SHARING , "verify RTL sharing")
+DEFTIMEVAR (TV_REBUILD_FREQUENCIES , "rebuild frequencies")
+DEFTIMEVAR (TV_REPAIR_LOOPS , "repair loop structures")
static void
repair_loop_structures (void)
{
- bitmap changed_bbs = BITMAP_ALLOC (NULL);
+ bitmap changed_bbs;
+
+ timevar_push (TV_REPAIR_LOOPS);
+ changed_bbs = BITMAP_ALLOC (NULL);
fix_loop_structure (changed_bbs);
/* This usually does nothing. But sometimes parts of cfg that originally
scev_reset ();
loops_state_clear (LOOPS_NEED_FIXUP);
+ timevar_pop (TV_REPAIR_LOOPS);
}
/* Cleanup cfg and repair loop structures. */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_IPA_OPT, /* tv_id */
PROP_cfg | PROP_ssa, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
bitmap_head *dfs;
basic_block bb;
- timevar_push (TV_TREE_SSA_OTHER);
-
/* Initialize operand data structures. */
init_ssa_operands ();
fini_ssa_renamer ();
- timevar_pop (TV_TREE_SSA_OTHER);
return 0;
}
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_TREE_SSA_OTHER, /* tv_id */
PROP_cfg | PROP_referenced_vars, /* properties_required */
PROP_ssa, /* properties_provided */
0, /* properties_destroyed */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_OPTIMIZE, /* tv_id */
0, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_EARLY_LOCAL, /* tv_id */
0, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_TREE_CLEANUP_CFG, /* tv_id */
PROP_cfg, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
{
location_t saved_loc;
- timevar_push (TV_EXPAND);
+ timevar_push (TV_REST_OF_COMPILATION);
gcc_assert (cgraph_global_info_ready);
input_location = saved_loc;
ggc_collect ();
- timevar_pop (TV_EXPAND);
+ timevar_pop (TV_REST_OF_COMPILATION);
}
if (!optimize)
return;
+ timevar_push (TV_REMOVE_UNUSED);
+
mark_scope_block_unused (DECL_INITIAL (current_function_decl));
/* Assume all locals are unused. */
fprintf (dump_file, "Scope blocks after cleanups:\n");
dump_scope_blocks (dump_file, dump_flags);
}
+
+ timevar_pop (TV_REMOVE_UNUSED);
}
if (verify_ssa_p)
verify_ssa (false);
+ timevar_push (TV_VERIFY_LOOP_CLOSED);
+
FOR_EACH_BB (bb)
{
for (bsi = gsi_start_phis (bb); !gsi_end_p (bsi); gsi_next (&bsi))
for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi))
check_loop_closed_ssa_stmt (bb, gsi_stmt (bsi));
}
+
+ timevar_pop (TV_VERIFY_LOOP_CLOSED);
}
/* Split loop exit edge EXIT. The things are a bit complicated by a need to
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_TREE_UNINIT, /* tv_id */
PROP_ssa, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
tree var;
unsigned i;
+ timevar_push (TV_ADDRESS_TAKEN);
+
/* Collect into ADDRESSES_TAKEN all variables whose address is taken within
the function body. */
FOR_EACH_BB (bb)
BITMAP_FREE (not_reg_needs);
BITMAP_FREE (addresses_taken);
+ timevar_pop (TV_ADDRESS_TAKEN);
}
struct gimple_opt_pass pass_update_address_taken =
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_ADDRESS_TAKEN, /* tv_id */
PROP_ssa, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_TREE_SSA_OTHER, /* tv_id */
PROP_ssa, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
- TV_NONE, /* tv_id */
+ TV_IPA_OPT, /* tv_id */
0, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */