documentation: Update information about ir_graph.
[libfirm] / include / libfirm / callgraph.h
index 79d9353..240ddd8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
  * @brief       Representation and computation of the callgraph.
  * @author      Goetz Lindenmaier
  * @date        21.7.2004
- * @version     $Id$
- * @summary
+ * @brief       callgraph analysis
+ */
+#ifndef FIRM_ANA_CALLGRAPH_H
+#define FIRM_ANA_CALLGRAPH_H
+
+#include "firm_types.h"
+#include "begin.h"
+
+/**
+ * @ingroup irana
+ * @defgroup callgraph Callgraph
+ *
  *  This file contains the representation of the callgraph.
  *  The nodes of the call graph are ir_graphs.  The edges between
  *  the nodes are calling relations.  I.e., if method a calls method
  *  Finally this file contains an algorithm that computes backedges
  *  in the callgraph, i.e., the algorithm finds possibly recursive calls.
  *  The algorithm computes an upper bound of all recursive calls.
+ * @{
  */
-#ifndef FIRM_ANA_CALLGRAPH_H
-#define FIRM_ANA_CALLGRAPH_H
-
-#include "firm_types.h"
 
 /** Flag to indicate state of callgraph. */
 typedef enum {
@@ -51,61 +58,61 @@ typedef enum {
 } irp_callgraph_state;
 
 /** Returns the callgraph state of the program representation. */
-irp_callgraph_state get_irp_callgraph_state(void);
+FIRM_API irp_callgraph_state get_irp_callgraph_state(void);
 
 /** Sets the callgraph state of the program representation. */
-void                set_irp_callgraph_state(irp_callgraph_state s);
+FIRM_API void set_irp_callgraph_state(irp_callgraph_state s);
 
 /** Returns the number of procedures that call the given irg. */
-int       get_irg_n_callers(ir_graph *irg);
+FIRM_API size_t get_irg_n_callers(const ir_graph *irg);
 
 /** Returns the caller at position pos. */
-ir_graph *get_irg_caller(ir_graph *irg, int pos);
+FIRM_API ir_graph *get_irg_caller(const ir_graph *irg, size_t pos);
 
 /** Returns non-zero if the caller at position pos is "a backedge", i.e. a recursion. */
-int       is_irg_caller_backedge(ir_graph *irg, int pos);
+FIRM_API int is_irg_caller_backedge(const ir_graph *irg, size_t pos);
 
 /** Returns non-zero if the irg has a backedge caller. */
-int       has_irg_caller_backedge(ir_graph *irg);
+FIRM_API int has_irg_caller_backedge(const ir_graph *irg);
 
 /** Returns the maximal loop depth of call nodes that call along this edge. */
-int       get_irg_caller_loop_depth(ir_graph *irg, int pos);
+FIRM_API size_t get_irg_caller_loop_depth(const ir_graph *irg, size_t pos);
 
 /** Returns the number of procedures that are called by the given irg. */
-int       get_irg_n_callees(ir_graph *irg);
+FIRM_API size_t get_irg_n_callees(const ir_graph *irg);
 
 /** Returns the callee at position pos. */
-ir_graph *get_irg_callee(ir_graph *irg, int pos);
+FIRM_API ir_graph *get_irg_callee(const ir_graph *irg, size_t pos);
 
 /** Returns non-zero if the callee at position pos is "a backedge", i.e. a recursion. */
-int       is_irg_callee_backedge(ir_graph *irg, int pos);
+FIRM_API int is_irg_callee_backedge(const ir_graph *irg, size_t pos);
 
 /** Returns non-zero if the irg has a backedge callee. */
-int       has_irg_callee_backedge(ir_graph *irg);
+FIRM_API int has_irg_callee_backedge(const ir_graph *irg);
 
 /** Returns the maximal loop depth of call nodes that call along this edge. */
-int       get_irg_callee_loop_depth(ir_graph *irg, int pos);
+FIRM_API size_t get_irg_callee_loop_depth(const ir_graph *irg, size_t pos);
 
 /** Returns the maximal loop depth of all paths from an external visible method to
     this irg. */
-int       get_irg_loop_depth(ir_graph *irg);
+FIRM_API size_t get_irg_loop_depth(const ir_graph *irg);
 
 /** Returns the maximal recursion depth of all paths from an external visible method to
     this irg. */
-int       get_irg_recursion_depth(ir_graph *irg);
+FIRM_API size_t get_irg_recursion_depth(const ir_graph *irg);
 
 /** Returns the method execution frequency of a graph. */
-double get_irg_method_execution_frequency(ir_graph *irg);
+FIRM_API double get_irg_method_execution_frequency(const ir_graph *irg);
 
 /**
  * Construct the callgraph. Expects callee information, i.e.,
  * irg_callee_info_consistent must be set.  This can be computed with
  * cgana().
  */
-void compute_callgraph(void);
+FIRM_API void compute_callgraph(void);
 
 /** Destruct the callgraph. */
-void free_callgraph(void);
+FIRM_API void free_callgraph(void);
 
 
 /** A function type for functions passed to the callgraph walker. */
@@ -126,29 +133,13 @@ typedef void callgraph_walk_func(ir_graph *g, void *env);
  * @param post - walker function, executed after the predecessor of a node are visited
  * @param env  - environment, passed to pre and post
  */
-void callgraph_walk(callgraph_walk_func *pre, callgraph_walk_func *post, void *env);
+FIRM_API void callgraph_walk(callgraph_walk_func *pre,
+                             callgraph_walk_func *post, void *env);
 
 /**
  * Compute the backedges that represent recursions and a looptree.
  */
-void find_callgraph_recursions(void);
-
-/** Compute interprocedural performance estimates.
- *
- *  Computes
- *   - the loop depth of the method.
- *     The loop depth of an edge between two methods is the
- *     maximal loop depth of the Call nodes that call along this edge.
- *     The loop depth of the method is the loop depth of the most expensive
- *     path from main().
- *   - The recursion depth.  The maximal number of recursions passed
- *     on all paths reaching this method.
- *   - The execution frequency.  As loop depth, but the edge weight is the sum
- *     of the execution frequencies of all Calls along the edge.
- *
- * Expects the main irg is set, see set_irp_main_irg();
- **/
-void compute_performance_estimates(void);
+FIRM_API void find_callgraph_recursions(void);
 
 /** Computes the interprocedural loop nesting information.
  *
@@ -160,7 +151,7 @@ void compute_performance_estimates(void);
  *
  * Expects the main irg is set, see set_irp_main_irg();
  */
-void analyse_loop_nesting_depth(void);
+FIRM_API void analyse_loop_nesting_depth(void);
 
 /** The state of loop nesting depth. */
 typedef enum {
@@ -172,13 +163,16 @@ typedef enum {
 } loop_nesting_depth_state;
 
 /** Returns the nesting depth state of the program representation. */
-loop_nesting_depth_state get_irp_loop_nesting_depth_state(void);
+FIRM_API loop_nesting_depth_state get_irp_loop_nesting_depth_state(void);
 
 /** Sets the nesting depth state of the program representation. */
-void                     set_irp_loop_nesting_depth_state(loop_nesting_depth_state s);
+FIRM_API void set_irp_loop_nesting_depth_state(loop_nesting_depth_state s);
 
 /** Marks the nesting depth state of the program representation as inconsistent. */
-void                     set_irp_loop_nesting_depth_state_inconsistent(void);
+FIRM_API void set_irp_loop_nesting_depth_state_inconsistent(void);
+
+/** @} */
 
+#include "end.h"
 
-#endif /* _CALLGRAPH_H_ */
+#endif