+/** Returns the number of elements contained in loop. */
+int get_loop_n_elements (ir_loop *loop);
+/** Returns a loop element. A loop element can be interpreted as a
+ 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.
+ * @returns Maximal depth of loop tree. */
+/* @@@ Well, maybe construct_loop_information or analyze_loops ? */
+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.
+ * @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 */
+void free_loop_information(ir_graph *irg);
+void free_all_loop_information (void);
+
+
+
+
+/* ------------------------------------------------------------------- */
+/* Simple analyses based on the loop information */
+/* ------------------------------------------------------------------- */
+
+/** Test whether a value is loop invariant.
+ *
+ * @param n The node to be tested.
+ * @param block A block node.
+ *
+ * Returns true, if the node n is not changed in the loop block
+ * belongs to or in inner loops of this block. */
+int is_loop_invariant(ir_node *n, ir_node *block);