* 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.
From-SVN: r89764
+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
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 ();
#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
sequence = get_insns ();
end_sequence ();
- insert_insn_on_edge (sequence, e);
+ safe_insert_insn_on_edge (sequence, e);
rebuild_jump_labels (e->insns.r);
}
\f
struct profile_hooks rtl_profile_hooks =
{
+ rtl_init_edge_profiler,
rtl_gen_edge_profiler,
rtl_gen_interval_profiler,
rtl_gen_pow2_profiler,
#include "value-prof.h"
\f
+
+/* 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. */
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 */
\f
/* 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);