summaryrefslogtreecommitdiff
path: root/gcc/tree-profile.c
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2008-03-08 20:52:50 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2008-03-08 20:52:50 +0000
commita961cdc2c8dc3499be1e378f8e78cbd3248494db (patch)
treea11f8cead0a4695e09503341eb0a32f9c0b9d922 /gcc/tree-profile.c
parent5840094dec3166817b8330c31fc7f6efb92353c1 (diff)
downloadgcc-a961cdc2c8dc3499be1e378f8e78cbd3248494db.tar.gz
2008-03-08 Richard Guenther <rguenther@suse.de>
* coverage.h (tree_coverage_counter_addr): Declare. * coverage.c (tree_coverage_counter_addr): New function. * tree-profile.c (tree_gen_edge_profiler): Unshare counter before using again. (tree_gen_pow2_profiler): Use tree_coverage_counter_addr. (tree_gen_one_value_profiler): Likewise. (tree_gen_ic_profiler): Likewise. (tree_gen_average_profiler): Likewise. (tree_gen_ior_profiler): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133041 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-profile.c')
-rw-r--r--gcc/tree-profile.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/gcc/tree-profile.c b/gcc/tree-profile.c
index 00fbd862ad9..57c9f5c0c5a 100644
--- a/gcc/tree-profile.c
+++ b/gcc/tree-profile.c
@@ -181,7 +181,7 @@ tree_gen_edge_profiler (int edgeno, edge e)
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);
+ stmt3 = build_gimple_modify_stmt (unshare_expr (ref), gcov_type_tmp_var);
bsi_insert_on_edge (e, stmt1);
bsi_insert_on_edge (e, stmt2);
bsi_insert_on_edge (e, stmt3);
@@ -231,11 +231,10 @@ tree_gen_pow2_profiler (histogram_value value, unsigned tag, unsigned base)
{
tree stmt = value->hvalue.stmt;
block_stmt_iterator bsi = bsi_for_stmt (stmt);
- tree ref = tree_coverage_counter_ref (tag, base), ref_ptr;
+ tree ref_ptr = tree_coverage_counter_addr (tag, base);
tree call, val;
- ref_ptr = force_gimple_operand_bsi (&bsi,
- build_addr (ref, current_function_decl),
+ ref_ptr = force_gimple_operand_bsi (&bsi, ref_ptr,
true, NULL_TREE, true, BSI_SAME_STMT);
val = prepare_instrumented_value (&bsi, value);
call = build_call_expr (tree_pow2_profiler_fn, 2, ref_ptr, val);
@@ -251,11 +250,10 @@ tree_gen_one_value_profiler (histogram_value value, unsigned tag, unsigned base)
{
tree stmt = value->hvalue.stmt;
block_stmt_iterator bsi = bsi_for_stmt (stmt);
- tree ref = tree_coverage_counter_ref (tag, base), ref_ptr;
+ tree ref_ptr = tree_coverage_counter_addr (tag, base);
tree call, val;
- ref_ptr = force_gimple_operand_bsi (&bsi,
- build_addr (ref, current_function_decl),
+ ref_ptr = force_gimple_operand_bsi (&bsi, ref_ptr,
true, NULL_TREE, true, BSI_SAME_STMT);
val = prepare_instrumented_value (&bsi, value);
call = build_call_expr (tree_one_value_profiler_fn, 2, ref_ptr, val);
@@ -275,10 +273,9 @@ tree_gen_ic_profiler (histogram_value value, unsigned tag, unsigned base)
tree tmp1, stmt1, stmt2, stmt3;
tree stmt = value->hvalue.stmt;
block_stmt_iterator bsi = bsi_for_stmt (stmt);
- tree ref = tree_coverage_counter_ref (tag, base), ref_ptr;
+ tree ref_ptr = tree_coverage_counter_addr (tag, base);
- ref_ptr = force_gimple_operand_bsi (&bsi,
- build_addr (ref, current_function_decl),
+ ref_ptr = force_gimple_operand_bsi (&bsi, ref_ptr,
true, NULL_TREE, true, BSI_SAME_STMT);
/* Insert code:
@@ -367,11 +364,10 @@ tree_gen_average_profiler (histogram_value value, unsigned tag, unsigned base)
{
tree stmt = value->hvalue.stmt;
block_stmt_iterator bsi = bsi_for_stmt (stmt);
- tree ref = tree_coverage_counter_ref (tag, base), ref_ptr;
+ tree ref_ptr = tree_coverage_counter_addr (tag, base);
tree call, val;
- ref_ptr = force_gimple_operand_bsi (&bsi,
- build_addr (ref, current_function_decl),
+ ref_ptr = force_gimple_operand_bsi (&bsi, ref_ptr,
true, NULL_TREE,
true, BSI_SAME_STMT);
val = prepare_instrumented_value (&bsi, value);
@@ -388,11 +384,10 @@ tree_gen_ior_profiler (histogram_value value, unsigned tag, unsigned base)
{
tree stmt = value->hvalue.stmt;
block_stmt_iterator bsi = bsi_for_stmt (stmt);
- tree ref = tree_coverage_counter_ref (tag, base), ref_ptr;
+ tree ref_ptr = tree_coverage_counter_addr (tag, base);
tree call, val;
- ref_ptr = force_gimple_operand_bsi (&bsi,
- build_addr (ref, current_function_decl),
+ ref_ptr = force_gimple_operand_bsi (&bsi, ref_ptr,
true, NULL_TREE, true, BSI_SAME_STMT);
val = prepare_instrumented_value (&bsi, value);
call = build_call_expr (tree_ior_profiler_fn, 2, ref_ptr, val);