Added overflow mode for interger operations (was already implemented, but had no IF)
[libfirm] / ir / stat / firmstat.h
index b14f8db..a0650d5 100644 (file)
@@ -23,7 +23,8 @@
  */
 enum firmstat_options_t {
   FIRMSTAT_ENABLED         = 0x00000001,       /**< enable statistics */
-  FIRMSTAT_PATTERN_ENABLED = 0x00000002                /**< enable pattern calculation */
+  FIRMSTAT_PATTERN_ENABLED = 0x00000002,       /**< enable pattern calculation */
+  FIRMSTAT_COUNT_STRONG_OP = 0x00000004,       /**< if set, count Mul/Div/Mod/DivMod by constant */
 };
 
 /**
@@ -48,7 +49,9 @@ typedef enum {
   STAT_OPT_TUPLE,              /**< Tuple optimization */
   STAT_OPT_ID,                 /**< ID optimization */
   STAT_OPT_CONST_EVAL,         /**< constant evaluation */
+  STAT_OPT_CSE,                 /**< common subexpression elimination */
   STAT_OPT_STRENGTH_RED,       /**< strenght reduction */
+  STAT_OPT_ARCH_DEP,           /**< architecture dependant optimization */
   STAT_LOWERED,                        /**< lowered */
 
   STAT_OPT_MAX
@@ -74,12 +77,12 @@ void stat_free_ir_op(const ir_op *op);
 /**
  * A new node is created.
  */
-void stat_new_node(const ir_node *node);
+void stat_new_node(ir_node *node);
 
 /**
  * A node is changed into a Id node
  */
-void stat_turn_into_id(const ir_node *node);
+void stat_turn_into_id(ir_node *node);
 
 /**
  * A new graph was created
@@ -144,6 +147,26 @@ void stat_dead_node_elim_start(ir_graph *irg);
  */
 void stat_dead_node_elim_stop(ir_graph *irg);
 
+/**
+ * A multiply was replaced by a series of Shifts/Adds/Subs
+ */
+void stat_arch_dep_replace_mul_with_shifts(ir_node *mul);
+
+/**
+ * A division was replaced by a series of Shifts/Muls
+ */
+void stat_arch_dep_replace_div_with_shifts(ir_node *div);
+
+/**
+ * A modulo was replaced by a series of Shifts/Muls
+ */
+void stat_arch_dep_replace_mod_with_shifts(ir_node *mod);
+
+/**
+ * A Divod was replaced by a series of Shifts/Muls
+ */
+void stat_arch_dep_replace_DivMod_with_shifts(ir_node *divmod);
+
 /**
  * helper: get an ir_op from an opcode
  *
@@ -173,6 +196,10 @@ ir_op *stat_get_op_from_opcode(opcode code);
 #define stat_strength_red(irg, strong, cmp)
 #define stat_dead_node_elim_start(irg)
 #define stat_dead_node_elim_stop(irg)
+#define stat_arch_dep_replace_mul_with_shifts(irn)
+#define stat_arch_dep_replace_div_with_shifts(irn)
+#define stat_arch_dep_replace_mod_with_shifts(irn)
+#define stat_arch_dep_replace_DivMod_with_shifts(irn)
 
 #endif