we can do without the odd align.h
[libfirm] / ir / ana / irloop_t.h
index 20796c2..a099cd7 100644 (file)
@@ -43,7 +43,8 @@ typedef enum loop_flags {
        loop_wrap_around   = 0x00000010,  /**< this loop is NOT endless, because of wrap around */
        loop_end_false     = 0x00000020,  /**< this loop end can't be computed "from compute_loop_info.c" */
        do_loop            = 0x00000040,  /**< this is a do loop */
-       once               = 0x00000080,  /**< this is a do loop, with a false condition.It itarate once */
+       once               = 0x00000080,  /**< this is a do loop, with a false condition. It iterate exactly once. */
+       loop_outer_loop    = 0x00000100   /**< if set, this loop has child loops (is a no leaf). */
 } loop_flags_t;
 
 /**
@@ -58,19 +59,15 @@ typedef enum loop_flags {
  * the loop within the nesting.  Further it contains a list of the
  * loops with nesting depth -1.  Finally it contains a list of all
  * nodes in the loop.
- *
- * @todo We could add a field pointing from a node to the containing loop,
- * this would cost a lot of memory, though.
  */
 struct ir_loop {
        firm_kind kind;                   /**< A type tag, set to k_ir_loop. */
-
-       struct ir_loop *outer_loop;       /**< The outer loop */
-       loop_element   *children;         /**< Mixed flexible array: Contains sons and loop_nodes */
        int depth;                        /**< Nesting depth */
        int n_sons;                       /**< Number of ir_nodes in array "children" */
        int n_nodes;                      /**< Number of loop_nodes in array "children" */
        unsigned flags;                   /**< a set of loop_flags_t */
+       struct ir_loop *outer_loop;       /**< The outer loop */
+       loop_element   *children;         /**< Mixed flexible array: Contains sons and loop_nodes */
        tarval  *loop_iter_start;         /**< counting loop: the start value */
        tarval  *loop_iter_end;           /**< counting loop: the last value reached */
        tarval  *loop_iter_increment;     /**< counting loop: the increment */
@@ -96,10 +93,10 @@ void add_loop_son(ir_loop *loop, ir_loop *son);
 void add_loop_node(ir_loop *loop, ir_node *n);
 
 /** Add an IR graph to a loop. */
-void add_loop_irg(ir_loop *loop, ir_node *n);
+void add_loop_irg(ir_loop *loop, ir_graph *irg);
 
 /** Sets the loop a node belonging to. */
-void set_irn_loop(ir_node *n, ir_graph *irg);
+void set_irn_loop(ir_node *n, ir_loop *loop);
 
 /**
  * Mature all loops by removing the flexible arrays of a loop tree
@@ -107,46 +104,46 @@ void set_irn_loop(ir_node *n, ir_graph *irg);
  */
 void mature_loops(ir_loop *loop, struct obstack *obst);
 
-/* -------- INLINE functions -------- */
+/* -------- inline functions -------- */
 
-static INLINE int
-_is_ir_loop(const void *thing) {
+static inline int _is_ir_loop(const void *thing)
+{
        return get_kind(thing) == k_ir_loop;
 }
 
-static INLINE void
-_set_irg_loop(ir_graph *irg, ir_loop *loop) {
+static inline void _set_irg_loop(ir_graph *irg, ir_loop *loop)
+{
        assert(irg);
        irg->loop = loop;
 }
 
-static INLINE ir_loop *
-_get_irg_loop(ir_graph *irg) {
+static inline ir_loop *_get_irg_loop(const ir_graph *irg)
+{
        assert(irg);
        return irg->loop;
 }
 
-static INLINE ir_loop *
-_get_loop_outer_loop(const ir_loop *loop) {
+static inline ir_loop *_get_loop_outer_loop(const ir_loop *loop)
+{
        assert(_is_ir_loop(loop));
        return loop->outer_loop;
 }
 
-static INLINE int
-_get_loop_depth(const ir_loop *loop) {
+static inline int _get_loop_depth(const ir_loop *loop)
+{
        assert(_is_ir_loop(loop));
        return loop->depth;
 }
 
-static INLINE int
-_get_loop_n_sons(const ir_loop *loop) {
+static inline int _get_loop_n_sons(const ir_loop *loop)
+{
        assert(_is_ir_loop(loop));
        return loop->n_sons;
 }
 
 /* Uses temporary information to get the loop */
-static INLINE ir_loop *
-_get_irn_loop(const ir_node *n) {
+static inline ir_loop *_get_irn_loop(const ir_node *n)
+{
        return n->loop;
 }