fixed some depencies between irdump.c and irdumptxt.c
[libfirm] / ir / ana / irloop.h
index f2a1824..8ea6e71 100644 (file)
@@ -76,6 +76,9 @@ typedef union {
     ir_loop *son;       /**< Pointer to an ir_loop element */
 } loop_element;
 
+int      is_ir_loop(const void *thing);
+
+/** Set the outermost loop in ir graph as basic access to loop tree. */
 void     set_irg_loop(ir_graph *irg, ir_loop *l);
 ir_loop *get_irg_loop(ir_graph *irg);
 
@@ -101,20 +104,41 @@ int      get_loop_n_elements (ir_loop *loop);
     kind pointer, an ir_node* or an ir_loop*. */
 loop_element get_loop_element (ir_loop *loop, int pos);
 
+/** Returns the element number of the loop son in loop.
+ *  Returns -1 if not found. O(#elements). */
+int get_loop_element_pos(ir_loop *loop, void *le);
+
+/** Returns a unique node number for the loop node to make output
+    readable. If libfirm_debug is not set it returns the loop cast to
+    int. */
+int get_loop_loop_nr(ir_loop *loop);
+
+/** A field to connect additional information to a loop.  Only valid
+    if libfirm_debug is set, else returns NULL.  */
+void  set_loop_link (ir_loop *loop, void *link);
+void *get_loop_link (const ir_loop *loop);
+
 /*
  * Constructing and destructing the loop/backedge information.
  */
 
-/** Constructs backedge information for irg in intraprocedural view. */
+/** Constructs backedge information for irg in intraprocedural view.
+ *  @returns Maximal depth of loop tree. */
 /* @@@ Well, maybe construct_loop_information or analyze_loops ? */
-void construct_backedges(ir_graph *irg);
+int construct_backedges(ir_graph *irg);
 
 /** Constructs backedges for all irgs in interprocedural view.  All
     loops in the graph will be marked as such, not only realizeable
     loops and recursions in the program.  E.g., if the same funcion is
     called twice, there is a loop between the first function return and
-    the second call.  */
-void construct_ip_backedges(void);
+    the second call.
+ *  @returns Maximal depth of loop tree. */
+int construct_ip_backedges(void);
+
+/* Construct loop tree only for control flow.
+ * @returns Maximal depth of loop tree. */
+int construct_cf_backedges(ir_graph *irg);
+int construct_ip_cf_backedges (void);
 
 /** Removes all loop information.
     Resets all backedges */