trouts: move add_* functions to private API
[libfirm] / include / libfirm / iroptimize.h
index 6122326..9a57958 100644 (file)
@@ -20,7 +20,6 @@
 /**
  * @file
  * @brief   Available Optimisations of libFirm.
- * @version $Id$
  */
 #ifndef FIRM_IROPTIMIZE_H
 #define FIRM_IROPTIMIZE_H
 #include "nodeops.h"
 #include "begin.h"
 
+/**
+ * @defgroup iroptimize  Transformations and Optimisations
+ * @{
+ */
+
 /**
  * Control flow optimization.
  *
  * Independent of compiler flag it removes Tuples from cf edges,
  * Bad predecessors from Blocks and Phis, and unnecessary predecessors of End.
  * Destroys backedge information.
- *
- * @bug Chokes on Id nodes if called in a certain order with other
- *      optimizations.  Call local_optimize_graph() before to remove
- *      Ids.
  */
 FIRM_API void optimize_cf(ir_graph *irg);
 
@@ -168,39 +168,16 @@ FIRM_API void escape_analysis(int run_scalar_replace,
  * graphs.
  *
  * If callee information is valid, we also optimize polymorphic Calls.
- *
- * @param force_run  if non-zero, an optimization run is started even
- *                   if no const function graph was detected.
- *                   Else calls are only optimized if at least one
- *                   const function graph was detected.
- * @param callback   a callback function to check whether a
- *                   given entity is a allocation call
- *
- * If the frontend created external entities with the irg_const_function
- * property set, the force_run parameter should be set, else
- * should be unset.
- *
- * @note This optimization destroys the link fields of nodes.
  */
-FIRM_API void optimize_funccalls(int force_run,
-                                 check_alloc_entity_func callback);
+FIRM_API void optimize_funccalls(void);
 
 /**
  * Creates an ir_prog pass for optimize_funccalls().
  *
  * @param name       the name of this pass or NULL
- * @param force_run  if non-zero, an optimization run is started even
- *                   if no const function graph was detected.
- *                   Else calls are only optimized if at least one
- *                   const function graph was detected.
- * @param callback   a callback function to check whether a
- *                   given entity is a allocation call
- *
  * @return  the newly created ir_prog pass
  */
-FIRM_API ir_prog_pass_t *optimize_funccalls_pass(const char *name,
-                                                 int force_run,
-                                                 check_alloc_entity_func callback);
+FIRM_API ir_prog_pass_t *optimize_funccalls_pass(const char *name);
 
 /**
  * Does Partial Redundancy Elimination combined with
@@ -343,7 +320,7 @@ FIRM_API ir_graph_pass_t *opt_ldst_pass(const char *name);
  *
  * @param irg  The graph whose loops will be processed
  *
- * This function did not change the graph, only it's frame type.
+ * This function did not change the graph, only its frame type.
  * The layout state of the frame type will be set to layout_undefined
  * if entities were removed.
  */
@@ -355,7 +332,7 @@ FIRM_API void loop_optimization(ir_graph *irg);
  *
  * @param irg  The graph whose frame type will be optimized
  *
- * This function did not change the graph, only it's frame type.
+ * This function did not change the graph, only its frame type.
  * The layout state of the frame type will be set to layout_undefined
  * if entities were removed.
  */
@@ -918,10 +895,6 @@ FIRM_API ir_graph_pass_t *loop_unroll_pass(const char *name);
  */
 FIRM_API ir_graph_pass_t *loop_peeling_pass(const char *name);
 
-typedef ir_type *(*get_Alloc_func)(ir_node *n);
-/** Set a new get_Alloc_func and returns the old one. */
-FIRM_API get_Alloc_func firm_set_Alloc_func(get_Alloc_func newf);
-
 /**
  * Creates an ir_graph pass for set_vrp_data()
  *
@@ -1067,7 +1040,7 @@ FIRM_API ir_graph_pass_t *fixpoint_vrp_irg_pass(const char *name);
  * @param confirm  if n is confirmed to be != 0, returns
  *                 the the Confirm-node, else NULL
  */
-FIRM_API int value_not_zero(const ir_node *n, ir_node_cnst_ptr *confirm);
+FIRM_API int value_not_zero(const ir_node *n, const ir_node **confirm);
 
 /**
  * Check, if the value of a node cannot represent a NULL pointer.
@@ -1082,7 +1055,7 @@ FIRM_API int value_not_zero(const ir_node *n, ir_node_cnst_ptr *confirm);
  * @param confirm  if n is confirmed to be != NULL, returns
  *                 the the Confirm-node, else NULL
  */
-FIRM_API int value_not_null(const ir_node *n, ir_node_cnst_ptr *confirm);
+FIRM_API int value_not_null(const ir_node *n, const ir_node **confirm);
 
 /**
  * Check, if the value of a node can be confirmed >= 0 or <= 0,
@@ -1097,13 +1070,38 @@ FIRM_API ir_value_classify_sign classify_value_sign(ir_node *n);
  * Return the value of a Cmp if one or both predecessors
  * are Confirm nodes.
  *
- * @param cmp    the compare node that will be evaluated
- * @param left   the left operand of the Cmp
- * @param right  the right operand of the Cmp
- * @param pnc    the compare relation
+ * @param cmp       the compare node that will be evaluated
+ * @param left      the left operand of the Cmp
+ * @param right     the right operand of the Cmp
+ * @param relation  the compare relation
  */
 FIRM_API ir_tarval *computed_value_Cmp_Confirm(
-       ir_node *cmp, ir_node *left, ir_node *right, pn_Cmp pnc);
+       const ir_node *cmp, ir_node *left, ir_node *right, ir_relation relation);
+
+typedef ir_entity *(*compilerlib_entity_creator_t)(ident *id, ir_type *mt);
+/**
+ * Set the compilerlib entity creation callback that is used to create
+ * compilerlib function entities.
+ *
+ * @param cb  the new compilerlib entity creation callback
+ */
+FIRM_API void set_compilerlib_entity_creator(compilerlib_entity_creator_t cb);
+
+/**
+ * Get the compilerlib entity creation callback.
+ */
+FIRM_API compilerlib_entity_creator_t get_compilerlib_entity_creator(void);
+
+/**
+ * Construct the entity for a given function using the current compilerlib
+ * entity creation callback.
+ *
+ * @param id  the identifier of the compilerlib function
+ * @param mt  the method type of the compilerlib function
+ */
+FIRM_API ir_entity *create_compilerlib_entity(ident *id, ir_type *mt);
+
+/** @} */
 
 #include "end.h"