expr.c (emit_block_move_via_movmem, [...]): Add variant handling histograms; add...
[gcc.git] / gcc / value-prof.h
index 78c9e887a27c2b6fa1614914adfa0c778400d728..4447b14a79c946b30c35544d3118dbaabb8021c0 100644 (file)
@@ -31,8 +31,10 @@ enum hist_type
                           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)
@@ -99,6 +101,12 @@ struct profile_hooks {
 
   /* 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);
@@ -111,6 +119,7 @@ void gimple_remove_stmt_histograms (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);