aboutsummaryrefslogtreecommitdiff
path: root/gcc/coverage.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2008-03-08 20:52:50 +0000
committerRichard Guenther <rguenther@suse.de>2008-03-08 20:52:50 +0000
commit474c1fdfb40fcba3ec3dba55de20686a64731ff2 (patch)
treea11f8cead0a4695e09503341eb0a32f9c0b9d922 /gcc/coverage.c
parenta4c6af48024117acbab77b06fa80e544252935ea (diff)
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: https://gcc.gnu.org/svn/gcc/trunk@133041 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/coverage.c')
-rw-r--r--gcc/coverage.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/gcc/coverage.c b/gcc/coverage.c
index 10db9de83a1..f3a0152ab9b 100644
--- a/gcc/coverage.c
+++ b/gcc/coverage.c
@@ -442,6 +442,23 @@ tree_coverage_counter_ref (unsigned counter, unsigned no)
return build4 (ARRAY_REF, gcov_type_node, tree_ctr_tables[counter],
build_int_cst (NULL_TREE, no), NULL, NULL);
}
+
+/* Generate a tree to access the address of COUNTER NO. */
+
+tree
+tree_coverage_counter_addr (unsigned counter, unsigned no)
+{
+ tree gcov_type_node = get_gcov_type ();
+
+ gcc_assert (no < fn_n_ctrs[counter] - fn_b_ctrs[counter]);
+ no += prg_n_ctrs[counter] + fn_b_ctrs[counter];
+
+ /* "no" here is an array index, scaled to bytes later. */
+ return build_fold_addr_expr (build4 (ARRAY_REF, gcov_type_node,
+ tree_ctr_tables[counter],
+ build_int_cst (NULL_TREE, no),
+ NULL, NULL));
+}
/* Generate a checksum for a string. CHKSUM is the current
checksum. */