always constant. */
HIST_TYPE_CONST_DELTA, /* Tries to identify the (almost) always constant
difference between two evaluations of a value. */
- HIST_TYPE_INDIR_CALL /* Tries to identify the function that is (almost)
+ HIST_TYPE_INDIR_CALL, /* Tries to identify the function that is (almost)
called in indirect call */
+ HIST_TYPE_AVERAGE, /* Compute average value (sum of all values). */
+ HIST_TYPE_IOR /* Used to compute expected alignment. */
};
#define COUNTER_FOR_HIST_TYPE(TYPE) ((int) (TYPE) + GCOV_FIRST_VALUE_COUNTER)
/* Insert code to find the most common indirect call */
void (*gen_ic_profiler) (histogram_value, unsigned, unsigned);
+
+ /* Insert code to find the average value of an expression. */
+ void (*gen_average_profiler) (histogram_value, unsigned, unsigned);
+
+ /* Insert code to ior value of an expression. */
+ void (*gen_ior_profiler) (histogram_value, unsigned, unsigned);
};
histogram_value gimple_histogram_value (struct function *, tree);
void gimple_duplicate_stmt_histograms (struct function *, tree, struct function *, tree);
void verify_histograms (void);
void free_histograms (void);
+void stringop_block_profile (tree, unsigned int *, HOST_WIDE_INT *);
/* In profile.c. */
extern void init_branch_prob (void);