diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-11-12 15:23:33 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-11-12 15:23:33 +0000 |
commit | 9456798d72d0e81a2a553287f436dcb05cff175a (patch) | |
tree | 1e80106d0c4f828b72deb6e782c20d788c0dd818 /gcc/value-prof.c | |
parent | e89aee4174fe58eaba553027558144a0f423960c (diff) | |
download | gcc-9456798d72d0e81a2a553287f436dcb05cff175a.tar.gz |
[./]
2013-11-12 Basile Starynkevitch <basile@starynkevitch.net>
{{merge with trunk GCC 4.9 svn rev 204695; previous trunk merge
was 202773; very unstable...}}
[gcc/]
2013-11-11 Basile Starynkevitch <basile@starynkevitch.net>
{{merge with trunk GCC 4.9 svn rev 204695; very unstable}}
* melt-runtime.h (MELT_VERSION_STRING): Bump to "1.0.1+".
* melt-run.proto.h: Update copyright years.
include tree-cfg.h instead of tree-flow.h for GCC 4.9.
* melt-runtime.cc: Include tree-cfg.h not tree-flow.h for GCC 4.9.
(meltgc_walk_gimple_seq): Fatal error with GCC 4.9 since the
walk_use_def_chains function disappeared from GCC...
* melt/xtramelt-ana-gimple.melt (walk_gimple_seq)
(walk_gimple_seq_unique_tree): issue some #warning-s for GCC 4.9
because walk_use_def_chains function disappeared from GCC...
* melt/xtramelt-probe.melt (probe_docmd): Issue an error since
currently the MELT probe is not usable with GCC 4.9....
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@204705 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/value-prof.c')
-rw-r--r-- | gcc/value-prof.c | 59 |
1 files changed, 41 insertions, 18 deletions
diff --git a/gcc/value-prof.c b/gcc/value-prof.c index 160a416d4d3..40e72ab8c89 100644 --- a/gcc/value-prof.c +++ b/gcc/value-prof.c @@ -21,6 +21,7 @@ along with GCC; see the file COPYING3. If not see #include "system.h" #include "coretypes.h" #include "tm.h" +#include "tree.h" #include "rtl.h" #include "expr.h" #include "hard-reg-set.h" @@ -32,14 +33,17 @@ along with GCC; see the file COPYING3. If not see #include "optabs.h" #include "regs.h" #include "ggc.h" -#include "tree-ssa.h" -#include "tree-flow-inline.h" +#include "gimple.h" +#include "gimple-ssa.h" +#include "tree-cfg.h" +#include "tree-phinodes.h" +#include "ssa-iterators.h" +#include "tree-ssanames.h" #include "diagnostic.h" #include "gimple-pretty-print.h" #include "coverage.h" #include "tree.h" #include "gcov-io.h" -#include "cgraph.h" #include "timevar.h" #include "dumpfile.h" #include "pointer-set.h" @@ -192,6 +196,7 @@ gimple_add_histogram_value (struct function *fun, gimple stmt, { hist->hvalue.next = gimple_histogram_value (fun, stmt); set_histogram_value (fun, stmt, hist); + hist->fun = fun; } @@ -249,7 +254,7 @@ dump_histogram_value (FILE *dump_file, histogram_value hist) if (hist->hvalue.counters) { unsigned int i; - fprintf(dump_file, " ["); + fprintf (dump_file, " ["); for (i = 0; i < hist->hdata.intvl.steps; i++) fprintf (dump_file, " %d:"HOST_WIDEST_INT_PRINT_DEC, hist->hdata.intvl.int_start + i, @@ -334,6 +339,15 @@ dump_histogram_value (FILE *dump_file, histogram_value hist) } fprintf (dump_file, ".\n"); break; + case HIST_TYPE_TIME_PROFILE: + fprintf (dump_file, "Time profile "); + if (hist->hvalue.counters) + { + fprintf (dump_file, "time:"HOST_WIDEST_INT_PRINT_DEC, + (HOST_WIDEST_INT) hist->hvalue.counters[0]); + } + fprintf (dump_file, ".\n"); + break; case HIST_TYPE_MAX: gcc_unreachable (); } @@ -407,6 +421,7 @@ stream_in_histogram_value (struct lto_input_block *ib, gimple stmt) break; case HIST_TYPE_IOR: + case HIST_TYPE_TIME_PROFILE: ncounters = 1; break; case HIST_TYPE_MAX: @@ -492,7 +507,9 @@ visit_hist (void **slot, void *data) { struct pointer_set_t *visited = (struct pointer_set_t *) data; histogram_value hist = *(histogram_value *) slot; - if (!pointer_set_contains (visited, hist)) + + if (!pointer_set_contains (visited, hist) + && hist->type != HIST_TYPE_TIME_PROFILE) { error ("dead histogram"); dump_histogram_value (stderr, hist); @@ -1204,9 +1221,9 @@ init_node_map (bool local) " with nodes %s/%i %s/%i\n", n->profile_id, cgraph_node_name (n), - n->symbol.order, - symtab_node_name (*(symtab_node*)val), - (*(symtab_node *)val)->symbol.order); + n->order, + symtab_node_name (*(symtab_node **)val), + (*(symtab_node **)val)->order); n->profile_id = (n->profile_id + 1) & 0x7fffffff; } } @@ -1217,7 +1234,7 @@ init_node_map (bool local) "Node %s/%i has no profile-id" " (profile feedback missing?)\n", cgraph_node_name (n), - n->symbol.order); + n->order); continue; } else if ((val = pointer_map_contains (cgraph_node_map, @@ -1228,7 +1245,7 @@ init_node_map (bool local) "Node %s/%i has IP profile-id %i conflict. " "Giving up.\n", cgraph_node_name (n), - n->symbol.order, + n->order, n->profile_id); *val = NULL; continue; @@ -1269,7 +1286,7 @@ static bool check_ic_target (gimple call_stmt, struct cgraph_node *target) { location_t locus; - if (gimple_check_call_matching_types (call_stmt, target->symbol.decl, true)) + if (gimple_check_call_matching_types (call_stmt, target->decl, true)) return true; locus = gimple_location (call_stmt); @@ -1312,7 +1329,7 @@ gimple_ic (gimple icall_stmt, struct cgraph_node *direct_call, load_stmt = gimple_build_assign (tmp0, tmp); gsi_insert_before (&gsi, load_stmt, GSI_SAME_STMT); - tmp = fold_convert (optype, build_addr (direct_call->symbol.decl, + tmp = fold_convert (optype, build_addr (direct_call->decl, current_function_decl)); load_stmt = gimple_build_assign (tmp1, tmp); gsi_insert_before (&gsi, load_stmt, GSI_SAME_STMT); @@ -1324,8 +1341,8 @@ gimple_ic (gimple icall_stmt, struct cgraph_node *direct_call, gimple_set_vuse (icall_stmt, NULL_TREE); update_stmt (icall_stmt); dcall_stmt = gimple_copy (icall_stmt); - gimple_call_set_fndecl (dcall_stmt, direct_call->symbol.decl); - dflags = flags_from_decl_or_type (direct_call->symbol.decl); + gimple_call_set_fndecl (dcall_stmt, direct_call->decl); + dflags = flags_from_decl_or_type (direct_call->decl); if ((dflags & ECF_NORETURN) != 0) gimple_call_set_lhs (dcall_stmt, NULL_TREE); gsi_insert_before (&gsi, dcall_stmt, GSI_SAME_STMT); @@ -1490,7 +1507,7 @@ gimple_ic_transform (gimple_stmt_iterator *gsi) fprintf (dump_file, "Indirect call -> direct call "); print_generic_expr (dump_file, gimple_call_fn (stmt), TDF_SLIM); fprintf (dump_file, "=> "); - print_generic_expr (dump_file, direct_call->symbol.decl, TDF_SLIM); + print_generic_expr (dump_file, direct_call->decl, TDF_SLIM); fprintf (dump_file, " transformation skipped because of type mismatch"); print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); } @@ -1503,7 +1520,7 @@ gimple_ic_transform (gimple_stmt_iterator *gsi) fprintf (dump_file, "Indirect call -> direct call "); print_generic_expr (dump_file, gimple_call_fn (stmt), TDF_SLIM); fprintf (dump_file, "=> "); - print_generic_expr (dump_file, direct_call->symbol.decl, TDF_SLIM); + print_generic_expr (dump_file, direct_call->decl, TDF_SLIM); fprintf (dump_file, " transformation on insn postponned to ipa-profile"); print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); fprintf (dump_file, "hist->count "HOST_WIDEST_INT_PRINT_DEC @@ -1568,7 +1585,7 @@ gimple_stringop_fixed_value (gimple vcall_stmt, tree icall_size, int prob, fndecl = gimple_call_fndecl (vcall_stmt); if (!interesting_stringop_to_profile_p (fndecl, vcall_stmt, &size_arg)) - gcc_unreachable(); + gcc_unreachable (); cond_bb = gimple_bb (vcall_stmt); gsi = gsi_for_stmt (vcall_stmt); @@ -1915,12 +1932,14 @@ gimple_find_values_to_profile (histogram_values *values) gimple_stmt_iterator gsi; unsigned i; histogram_value hist = NULL; - values->create (0); + FOR_EACH_BB (bb) for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) gimple_values_to_profile (gsi_stmt (gsi), values); + values->safe_push (gimple_alloc_histogram_value (cfun, HIST_TYPE_TIME_PROFILE, 0, 0)); + FOR_EACH_VEC_ELT (*values, i, hist) { switch (hist->type) @@ -1945,6 +1964,10 @@ gimple_find_values_to_profile (histogram_values *values) hist->n_counters = 3; break; + case HIST_TYPE_TIME_PROFILE: + hist->n_counters = 1; + break; + case HIST_TYPE_AVERAGE: hist->n_counters = 2; break; |