diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-03-08 20:52:50 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-03-08 20:52:50 +0000 |
commit | a961cdc2c8dc3499be1e378f8e78cbd3248494db (patch) | |
tree | a11f8cead0a4695e09503341eb0a32f9c0b9d922 /gcc/coverage.c | |
parent | 5840094dec3166817b8330c31fc7f6efb92353c1 (diff) | |
download | gcc-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/coverage.c')
-rw-r--r-- | gcc/coverage.c | 17 |
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. */ |