aboutsummaryrefslogtreecommitdiff
path: root/gcc/rtl-profile.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/rtl-profile.c')
-rw-r--r--gcc/rtl-profile.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/rtl-profile.c b/gcc/rtl-profile.c
index 2d0c69cc..3439f47 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,