X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Fvalue-prof.h;h=08f4d0043e3e96870e5ead3ecd2965a98295de9c;hp=e71e5e5646453a85c7c9dddfa5a9c01954c8fdb2;hb=6aa81614ec06c6ce28daa6bae3dd737c507e807e;hpb=0bed386979f6bdc139c519bab996bed698ade995 diff --git a/gcc/value-prof.h b/gcc/value-prof.h index e71e5e56464..08f4d0043e3 100644 --- a/gcc/value-prof.h +++ b/gcc/value-prof.h @@ -1,5 +1,5 @@ /* Definitions for transformations based on profile information for values. - Copyright (C) 2003 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GCC. @@ -38,23 +38,33 @@ enum hist_type ((enum hist_type) ((COUNTER) - GCOV_FIRST_VALUE_COUNTER)) /* The value to measure. */ -/* The void *'s are either rtx or tree, depending on which IR is in use. */ -struct histogram_value +struct histogram_value_t { - void * value; /* The value to profile. */ - enum machine_mode mode; /* And its mode. */ - void * seq; /* Insns required to count the profiled value. */ - void * insn; /* Insn before that to measure. */ - enum hist_type type; /* Type of information to measure. */ - unsigned n_counters; /* Number of required counters. */ + union + { + struct + { + rtx value; /* The value to profile. */ + rtx seq; /* Insns required to count the profiled value. */ + rtx insn; /* Insn before that to measure. */ + enum machine_mode mode; /* Mode of value to profile. */ + } rtl; + struct + { + tree value; /* The value to profile. */ + tree stmt; /* Insn containing the value. */ + gcov_type *counters; /* Pointer to first counter. */ + struct histogram_value_t *next; /* Linked list pointer. */ + } tree; + } hvalue; + enum hist_type type; /* Type of information to measure. */ + unsigned n_counters; /* Number of required counters. */ union { struct { int int_start; /* First value in interval. */ - int steps; /* Number of values in it. */ - int may_be_less; /* May the value be below? */ - int may_be_more; /* Or above. */ + unsigned int steps; /* Number of values in it. */ } intvl; /* Interval histogram data. */ struct { @@ -63,33 +73,41 @@ struct histogram_value } hdata; /* Profiled information specific data. */ }; +typedef struct histogram_value_t *histogram_value; + +DEF_VEC_MALLOC_P(histogram_value); + +typedef VEC(histogram_value) *histogram_values; + /* Hooks registration. */ extern void rtl_register_value_prof_hooks (void); extern void tree_register_value_prof_hooks (void); /* IR-independent entry points. */ -extern void find_values_to_profile (unsigned *, struct histogram_value **); -extern void free_profiled_values (unsigned, struct histogram_value *); +extern void find_values_to_profile (histogram_values *); 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); /* Insert code to increment the interval histogram counter. */ - void (*gen_interval_profiler) (struct histogram_value *, unsigned, unsigned); + void (*gen_interval_profiler) (histogram_value, unsigned, unsigned); /* Insert code to increment the power of two histogram counter. */ - void (*gen_pow2_profiler) (struct histogram_value *, unsigned, unsigned); + void (*gen_pow2_profiler) (histogram_value, unsigned, unsigned); /* Insert code to find the most common value. */ - void (*gen_one_value_profiler) (struct histogram_value *, unsigned, unsigned); + void (*gen_one_value_profiler) (histogram_value, unsigned, unsigned); /* Insert code to find the most common value of a difference between two evaluations of an expression. */ - void (*gen_const_delta_profiler) (struct histogram_value *, unsigned, - unsigned); + void (*gen_const_delta_profiler) (histogram_value, unsigned, unsigned); FILE * (*profile_dump_file) (void); };