diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-28 16:19:26 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-28 16:19:26 +0000 |
commit | 4b0a9554ad900aa505ed8774de9ac4d700c93234 (patch) | |
tree | 5b78eb120055abb834a6216175418c0de85cefd4 | |
parent | 4ae7d3a8b0dd16f89cf76f91c8052308987f45e2 (diff) | |
download | gcc-4b0a9554ad900aa505ed8774de9ac4d700c93234.tar.gz |
* profile.c (branch_prob): Call to init_edge_profiler added.
* rtl-profile.c (rtl_init_edge_profiler): New function.
(rtl_gen_edge_profiler): Replaced call to insert_insn_on_edge with
call to safe_insert_insn_on_edge.
(rtl_profile_hooks): rtl_init_edge_profiler added.
* tree-profile.c (tree_init_edge_profiler): New function.
(tree_profile_hooks): tree_init_edge_profiler added.
* value-prof.h (profile_hooks) init_edge_profiler prototype added.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89764 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/profile.c | 6 | ||||
-rw-r--r-- | gcc/rtl-profile.c | 13 | ||||
-rw-r--r-- | gcc/tree-profile.c | 9 | ||||
-rw-r--r-- | gcc/value-prof.h | 4 |
5 files changed, 41 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 52538cb0b13..37eafb850e0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2004-10-28 Andreas Krebbel <krebbel1@de.ibm.com> + + * profile.c (branch_prob): Call to init_edge_profiler added. + * rtl-profile.c (rtl_init_edge_profiler): New function. + (rtl_gen_edge_profiler): Replaced call to insert_insn_on_edge with + call to safe_insert_insn_on_edge. + (rtl_profile_hooks): rtl_init_edge_profiler added. + * tree-profile.c (tree_init_edge_profiler): New function. + (tree_profile_hooks): tree_init_edge_profiler added. + * value-prof.h (profile_hooks) init_edge_profiler prototype added. + 2004-10-28 Nick Clifton <nickc@redhat.com> * config/iq2000/iq2000.c (iq2000_expand_epilogue): Use diff --git a/gcc/profile.c b/gcc/profile.c index ff85544e595..5a0cc60cfdc 100644 --- a/gcc/profile.c +++ b/gcc/profile.c @@ -1095,7 +1095,11 @@ branch_prob (void) if (profile_arc_flag && coverage_counter_alloc (GCOV_COUNTER_ARCS, num_instrumented)) { - unsigned n_instrumented = instrument_edges (el); + unsigned n_instrumented; + + profile_hooks->init_edge_profiler (); + + n_instrumented = instrument_edges (el); if (n_instrumented != num_instrumented) abort (); diff --git a/gcc/rtl-profile.c b/gcc/rtl-profile.c index 2d0c69ccb91..3439f472b7b 100644 --- a/gcc/rtl-profile.c +++ b/gcc/rtl-profile.c @@ -64,6 +64,16 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "tree.h" #include "ggc.h" +/* Do initialization work for the edge profiler. */ + +static void +rtl_init_edge_profiler (void) +{ + /* gen_edge_profiler calls safe_insert_insn_on_edge which needs + register liveness data to be available. */ + life_analysis (NULL, 0); +} + /* Output instructions as RTL to increment the edge execution count. */ static void @@ -85,7 +95,7 @@ rtl_gen_edge_profiler (int edgeno, edge e) sequence = get_insns (); end_sequence (); - insert_insn_on_edge (sequence, e); + safe_insert_insn_on_edge (sequence, e); rebuild_jump_labels (e->insns.r); } @@ -413,6 +423,7 @@ static FILE *rtl_profile_dump_file (void) { struct profile_hooks rtl_profile_hooks = { + rtl_init_edge_profiler, rtl_gen_edge_profiler, rtl_gen_interval_profiler, rtl_gen_pow2_profiler, diff --git a/gcc/tree-profile.c b/gcc/tree-profile.c index 00c36e233ec..145c7213158 100644 --- a/gcc/tree-profile.c +++ b/gcc/tree-profile.c @@ -69,6 +69,14 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "value-prof.h" + +/* Do initialization work for the edge profiler. */ + +static void +tree_init_edge_profiler (void) +{ +} + /* Output instructions as GIMPLE trees to increment the edge execution count, and insert them on E. We rely on bsi_insert_on_edge to preserve the order. */ @@ -195,6 +203,7 @@ struct tree_opt_pass pass_tree_profile = struct profile_hooks tree_profile_hooks = { + tree_init_edge_profiler, /* init_edge_profiler */ tree_gen_edge_profiler, /* gen_edge_profiler */ tree_gen_interval_profiler, /* gen_interval_profiler */ tree_gen_pow2_profiler, /* gen_pow2_profiler */ diff --git a/gcc/value-prof.h b/gcc/value-prof.h index e1c27790d20..b9d0d0663b2 100644 --- a/gcc/value-prof.h +++ b/gcc/value-prof.h @@ -80,6 +80,10 @@ extern bool value_profile_transformations (void); /* External declarations for edge-based profiling. */ struct profile_hooks { + + /* Insert code to initialize edge profiler. */ + void (*init_edge_profiler) (void); + /* Insert code to increment an edge count. */ void (*gen_edge_profiler) (int, edge); |