diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 71b28f5b660615db53b161d88d6f25ecbbddf84d..b770487705576e246bd88b83d25559344448dce7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,29 @@
+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.
diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c
index d599b36e70a38c40a7f4c13b157a9b3b90611358..be99991e8db1d29bf41768192a8abc0b17f0a17a 100644
--- a/gcc/cfglayout.c
+++ b/gcc/cfglayout.c
@@ -374,7 +374,7 @@ struct rtl_opt_pass pass_into_cfg_layout_mode =
   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 */
@@ -393,7 +393,7 @@ struct rtl_opt_pass pass_outof_cfg_layout_mode =
   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 */
diff --git a/gcc/cgraphbuild.c b/gcc/cgraphbuild.c
index 3800f13a5635442e3e0688fcd1194f80f92da4ae..f9d70dbb7926cf07f17bbf9c88b99cef98c5a8a8 100644
--- a/gcc/cgraphbuild.c
+++ b/gcc/cgraphbuild.c
@@ -521,7 +521,7 @@ struct gimple_opt_pass pass_rebuild_cgraph_edges =
   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 */
diff --git a/gcc/df-core.c b/gcc/df-core.c
index dacefc71aaf88e83bbff8c9b402f03814dea38d1..06ff854b57b91140a68d145b95e023da27c51592 100644
--- a/gcc/df-core.c
+++ b/gcc/df-core.c
@@ -758,7 +758,7 @@ struct rtl_opt_pass pass_df_initialize_opt =
   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 */
@@ -785,7 +785,7 @@ struct rtl_opt_pass pass_df_initialize_no_opt =
   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 */
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 2db0cffa8d0ab8a42a41cfb5fd62a57bcc61833e..f0fdc990b21b0778e74caa622675459cb99a007f 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -2526,6 +2526,8 @@ verify_rtl_sharing (void)
 {
   rtx p;
 
+  timevar_push (TV_VERIFY_RTL_SHARING);
+
   for (p = get_insns (); p; p = NEXT_INSN (p))
     if (INSN_P (p))
       {
@@ -2552,6 +2554,8 @@ verify_rtl_sharing (void)
 	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.
diff --git a/gcc/passes.c b/gcc/passes.c
index da9bb15dcf15092b7a0b178357241680e66074b0..b5cb2aca300a170a12d3d5b6e95e85b4db466fec 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -324,7 +324,7 @@ struct rtl_opt_pass pass_postreload =
   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 */
@@ -1269,6 +1269,8 @@ execute_todo (unsigned int flags)
     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;
 
@@ -1302,6 +1304,8 @@ execute_todo (unsigned int flags)
      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
diff --git a/gcc/predict.c b/gcc/predict.c
index beceb0f26801aca39cad67b0cedcad37c7272825..5fcfc1ea4324ff3f08f39813e03e7725c62e901e 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -2329,6 +2329,7 @@ struct gimple_opt_pass pass_strip_predict_hints =
 void
 rebuild_frequencies (void)
 {
+  timevar_push (TV_REBUILD_FREQUENCIES);
   if (profile_status == PROFILE_GUESSED)
     {
       loop_optimizer_init (0);
@@ -2343,4 +2344,5 @@ rebuild_frequencies (void)
     counts_to_freqs ();
   else
     gcc_unreachable ();
+  timevar_pop (TV_REBUILD_FREQUENCIES);
 }
diff --git a/gcc/reginfo.c b/gcc/reginfo.c
index 86a20d31feb371b9cefb2ae7ec713222f227f5ca..0c3cae21738306e5e979ca107d7ea3a42711042e 100644
--- a/gcc/reginfo.c
+++ b/gcc/reginfo.c
@@ -1019,7 +1019,7 @@ struct rtl_opt_pass pass_reginfo_init =
   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 */
diff --git a/gcc/timevar.def b/gcc/timevar.def
index 86e29995ff20af4389fdb213631ac385a50c289f..ec800aa6a508345d3c3b432c8679a13db3534535 100644
--- a/gcc/timevar.def
+++ b/gcc/timevar.def
@@ -53,6 +53,7 @@ DEFTIMEVAR (TV_CGRAPHOPT             , "callgraph optimization")
 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")
@@ -232,9 +233,19 @@ DEFTIMEVAR (TV_VAR_TRACKING          , "variable tracking")
 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")
diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c
index 403566edd7df31c1dcbb96f00c27f387d216462b..aedda430a4c8184ef8142fc85818ae0369e4b765 100644
--- a/gcc/tree-cfgcleanup.c
+++ b/gcc/tree-cfgcleanup.c
@@ -777,7 +777,10 @@ cleanup_tree_cfg_noloop (void)
 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
@@ -794,6 +797,7 @@ repair_loop_structures (void)
   scev_reset ();
 
   loops_state_clear (LOOPS_NEED_FIXUP);
+  timevar_pop (TV_REPAIR_LOOPS);
 }
 
 /* Cleanup cfg and repair loop structures.  */
diff --git a/gcc/tree-emutls.c b/gcc/tree-emutls.c
index ec4e0ada0b39d3f573a24b5b3ff47172fed9b99a..2a1ec068a8585b38a7a89ebf865dc96afa083b30 100644
--- a/gcc/tree-emutls.c
+++ b/gcc/tree-emutls.c
@@ -792,7 +792,7 @@ struct simple_ipa_opt_pass pass_ipa_lower_emutls =
   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 */
diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c
index 41e88eb2118729196ccb1624796c53bc73a0e611..8d31fe7607e97aea97568df55ffe2f541633c75c 100644
--- a/gcc/tree-into-ssa.c
+++ b/gcc/tree-into-ssa.c
@@ -2339,8 +2339,6 @@ rewrite_into_ssa (void)
   bitmap_head *dfs;
   basic_block bb;
 
-  timevar_push (TV_TREE_SSA_OTHER);
-
   /* Initialize operand data structures.  */
   init_ssa_operands ();
 
@@ -2380,7 +2378,6 @@ rewrite_into_ssa (void)
 
   fini_ssa_renamer ();
 
-  timevar_pop (TV_TREE_SSA_OTHER);
   return 0;
 }
 
@@ -2395,7 +2392,7 @@ struct gimple_opt_pass pass_build_ssa =
   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 */
diff --git a/gcc/tree-optimize.c b/gcc/tree-optimize.c
index f5a35ad4d24819a6164cc91843d6afd835f6b6c8..facbd93a4a24a2751ec29feea19dbd72fce252b3 100644
--- a/gcc/tree-optimize.c
+++ b/gcc/tree-optimize.c
@@ -69,7 +69,7 @@ struct gimple_opt_pass pass_all_optimizations =
   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 */
@@ -111,7 +111,7 @@ struct simple_ipa_opt_pass pass_early_local_passes =
   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 */
@@ -203,7 +203,7 @@ struct gimple_opt_pass pass_cleanup_cfg_post_optimizing =
   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 */
@@ -389,7 +389,7 @@ tree_rest_of_compilation (tree fndecl)
 {
   location_t saved_loc;
 
-  timevar_push (TV_EXPAND);
+  timevar_push (TV_REST_OF_COMPILATION);
 
   gcc_assert (cgraph_global_info_ready);
 
@@ -471,5 +471,5 @@ tree_rest_of_compilation (tree fndecl)
   input_location = saved_loc;
 
   ggc_collect ();
-  timevar_pop (TV_EXPAND);
+  timevar_pop (TV_REST_OF_COMPILATION);
 }
diff --git a/gcc/tree-ssa-live.c b/gcc/tree-ssa-live.c
index 232df844a49c1a527680cb9f26b7792f9826c2c5..9fda8b988241b3021307071e4220c53f25f823a7 100644
--- a/gcc/tree-ssa-live.c
+++ b/gcc/tree-ssa-live.c
@@ -695,6 +695,8 @@ remove_unused_locals (void)
   if (!optimize)
     return;
 
+  timevar_push (TV_REMOVE_UNUSED);
+
   mark_scope_block_unused (DECL_INITIAL (current_function_decl));
 
   /* Assume all locals are unused.  */
@@ -827,6 +829,8 @@ remove_unused_locals (void)
       fprintf (dump_file, "Scope blocks after cleanups:\n");
       dump_scope_blocks (dump_file, dump_flags);
     }
+
+  timevar_pop (TV_REMOVE_UNUSED);
 }
 
 
diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c
index dd2d3ceec7d675b1b48a4e8c8208d758d2d8469e..87b2c0d095d9b05aca334a9d92024a0e077169e0 100644
--- a/gcc/tree-ssa-loop-manip.c
+++ b/gcc/tree-ssa-loop-manip.c
@@ -455,6 +455,8 @@ verify_loop_closed_ssa (bool verify_ssa_p)
   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))
@@ -468,6 +470,8 @@ verify_loop_closed_ssa (bool verify_ssa_p)
       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
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c
index c08ae61fd9d521899dc51aa18ecc19bb8b245978..78497ceb04c63b6e57ee68327456c22e9078f174 100644
--- a/gcc/tree-ssa.c
+++ b/gcc/tree-ssa.c
@@ -1816,7 +1816,7 @@ struct gimple_opt_pass pass_early_warn_uninitialized =
   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 */
@@ -1958,6 +1958,8 @@ execute_update_addresses_taken (void)
   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)
@@ -2173,6 +2175,7 @@ execute_update_addresses_taken (void)
 
   BITMAP_FREE (not_reg_needs);
   BITMAP_FREE (addresses_taken);
+  timevar_pop (TV_ADDRESS_TAKEN);
 }
 
 struct gimple_opt_pass pass_update_address_taken =
@@ -2185,7 +2188,7 @@ 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 */
diff --git a/gcc/tree-ssanames.c b/gcc/tree-ssanames.c
index c005aba4977fbc48b4028a10c804a807aa7639da..79d2c3c333e1eb322904b7f68935dd8a0d965491 100644
--- a/gcc/tree-ssanames.c
+++ b/gcc/tree-ssanames.c
@@ -373,7 +373,7 @@ struct gimple_opt_pass pass_release_ssa_names =
   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 */
diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c
index b7ab0c52dde45ca840ac7169c2260031325ba29c..cf8a622ebc7cb58a664a46fde129746e22383b36 100644
--- a/gcc/tree-vectorizer.c
+++ b/gcc/tree-vectorizer.c
@@ -383,7 +383,7 @@ struct simple_ipa_opt_pass pass_ipa_increase_alignment =
   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 */