Commit 9225443e by Richard Guenther Committed by Richard Biener

tree-profile.c (gcov_type_tmp_var): New global variable.

2007-12-07  Richard Guenther  <rguenther@suse.de>

	* tree-profile.c (gcov_type_tmp_var): New global variable.
	(tree_gen_edge_profiler): Use a single shared variable decl per
	function for edge counter incrementing.
	(tree_profiling): Re-set the shared variable.

From-SVN: r130672
parent 9d0b1619
2007-12-07 Richard Guenther <rguenther@suse.de>
* tree-profile.c (gcov_type_tmp_var): New global variable.
(tree_gen_edge_profiler): Use a single shared variable decl per
function for edge counter incrementing.
(tree_profiling): Re-set the shared variable.
2007-12-06 Bob Wilson <bob.wilson@acm.org> 2007-12-06 Bob Wilson <bob.wilson@acm.org>
* config/xtensa/xtensa.c (xtensa_va_start): Add prototype. * config/xtensa/xtensa.c (xtensa_va_start): Add prototype.
...@@ -48,6 +48,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -48,6 +48,7 @@ along with GCC; see the file COPYING3. If not see
#include "cgraph.h" #include "cgraph.h"
static GTY(()) tree gcov_type_node; static GTY(()) tree gcov_type_node;
static GTY(()) tree gcov_type_tmp_var;
static GTY(()) tree tree_interval_profiler_fn; static GTY(()) tree tree_interval_profiler_fn;
static GTY(()) tree tree_pow2_profiler_fn; static GTY(()) tree tree_pow2_profiler_fn;
static GTY(()) tree tree_one_value_profiler_fn; static GTY(()) tree tree_one_value_profiler_fn;
...@@ -168,15 +169,19 @@ tree_init_edge_profiler (void) ...@@ -168,15 +169,19 @@ tree_init_edge_profiler (void)
static void static void
tree_gen_edge_profiler (int edgeno, edge e) tree_gen_edge_profiler (int edgeno, edge e)
{ {
tree tmp1 = create_tmp_var (gcov_type_node, "PROF"); tree ref, one, stmt1, stmt2, stmt3;
tree tmp2 = create_tmp_var (gcov_type_node, "PROF");
tree ref = tree_coverage_counter_ref (GCOV_COUNTER_ARCS, edgeno); /* We share one temporary variable declaration per function. This
tree one = build_int_cst (gcov_type_node, 1); gets re-set in tree_profiling. */
tree stmt1 = build_gimple_modify_stmt (tmp1, ref); if (gcov_type_tmp_var == NULL_TREE)
tree stmt2 = build_gimple_modify_stmt (tmp2, gcov_type_tmp_var = create_tmp_var (gcov_type_node, "PROF_edge_counter");
build2 (PLUS_EXPR, gcov_type_node, ref = tree_coverage_counter_ref (GCOV_COUNTER_ARCS, edgeno);
tmp1, one)); one = build_int_cst (gcov_type_node, 1);
tree stmt3 = build_gimple_modify_stmt (ref, tmp2); stmt1 = build_gimple_modify_stmt (gcov_type_tmp_var, ref);
stmt2 = build_gimple_modify_stmt (gcov_type_tmp_var,
build2 (PLUS_EXPR, gcov_type_node,
gcov_type_tmp_var, one));
stmt3 = build_gimple_modify_stmt (ref, gcov_type_tmp_var);
bsi_insert_on_edge (e, stmt1); bsi_insert_on_edge (e, stmt1);
bsi_insert_on_edge (e, stmt2); bsi_insert_on_edge (e, stmt2);
bsi_insert_on_edge (e, stmt3); bsi_insert_on_edge (e, stmt3);
...@@ -417,6 +422,10 @@ tree_profiling (void) ...@@ -417,6 +422,10 @@ tree_profiling (void)
the gcov datastructure initializer. */ the gcov datastructure initializer. */
if (cgraph_state == CGRAPH_STATE_FINISHED) if (cgraph_state == CGRAPH_STATE_FINISHED)
return 0; return 0;
/* Re-set global shared temporary variable for edge-counters. */
gcov_type_tmp_var = NULL_TREE;
branch_prob (); branch_prob ();
if (! flag_branch_probabilities if (! flag_branch_probabilities
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment