character modes do not have modulo shift's
[libfirm] / ir / ir / irnode_t.h
index 6a8f724..fa1cf22 100644 (file)
@@ -50,22 +50,21 @@ typedef struct {
   /* Attributes private to construction: */
   unsigned matured:1;         /**< if set, all in-nodes of the block are fixed */
   unsigned dead:1;            /**< if set, the block is dead (and could be replace by a Bad */
-  struct ir_node **graph_arr; /**< array to store all parameters */
+  ir_node **graph_arr;        /**< array to store all parameters */
   /* Attributes holding analyses information */
-  struct dom_info dom;        /**< Datastructure that holds information about dominators.
-                 @@@ @todo
-                 Eventually overlay with graph_arr as only valid
-                 in different phases.  Eventually inline the whole
-                 datastructure. */
-  /*   exc_t exc;  */            /**< role of this block for exception handling */
-  /*   ir_node *handler_entry; */    /**< handler entry block iff this block is part of a region */
+  dom_info dom;               /**< Datastructure that holds information about dominators.
+                                   @@@ @todo
+                                   Eventually overlay with graph_arr as only valid
+                                   in different phases.  Eventually inline the whole
+                                   datastructure. */
+  dom_info pdom;              /**< Datastructure that holds information about post-dominators. */
   ir_node ** in_cg;           /**< array with predecessors in
-                   * interprocedural_view, if they differ
-                   * from intraprocedural predecessors */
+                               * interprocedural_view, if they differ
+                               * from intraprocedural predecessors */
   int *backedge;              /**< Field n set to true if pred n is backedge.
-                     @@@ @todo Ev. replace by bitfield! */
+                                   @@@ @todo Ev. replace by bit field! */
   int *cg_backedge;           /**< Field n set to true if pred n is interprocedural backedge.
-                     @@@ @todo Ev. replace by bitfield! */
+                                   @@@ @todo Ev. replace by bit field! */
   ir_extblk *extblk;          /**< the extended basic block this block belongs to */
 
   struct list_head succ_head; /**< A list head for all successor edges of a block. */
@@ -112,6 +111,7 @@ typedef struct {
 #endif
 } except_attr;
 
+/** Call attributes */
 typedef struct {
   except_attr    exc;           /**< the exception attribute. MUST be the first one. */
   ir_type *cld_tp;              /**< type of called procedure */
@@ -132,10 +132,9 @@ typedef struct {
 } free_attr;
 
 /** InstOf attributes */
-typedef struct
-{
-  ir_type *ent;
-  int dfn;
+typedef struct {
+  except_attr    exc;           /**< the exception attribute. MUST be the first one. */
+  ir_type *type;                /**< the type of which the object pointer must be */
 } io_attr;
 
 /** Filter attributes */
@@ -153,19 +152,19 @@ typedef struct {
 
 /** CallBegin attributes */
 typedef struct {
-  ir_node * call;               /**< associated Call-operation */
+  ir_node * call;               /**< Associated Call-operation. */
 } callbegin_attr;
 
 /** Cast attributes */
 typedef struct {
-  ir_type *totype;              /**< type of the casted node */
+  ir_type *totype;              /**< Type of the casted node. */
 } cast_attr;
 
 /** Load attributes */
 typedef struct {
-  except_attr    exc;           /**< the exception attribute. MUST be the first one. */
-  ir_mode        *load_mode;    /**< the mode of this Load operation */
-  ent_volatility volatility;     /**< the volatility of a Load/Store operation */
+  except_attr    exc;           /**< The exception attribute. MUST be the first one. */
+  ir_mode        *load_mode;    /**< The mode of this Load operation. */
+  ent_volatility volatility;     /**< The volatility of a Load/Store operation. */
 } load_attr;
 
 /** Store attributes */
@@ -176,17 +175,23 @@ typedef struct {
 
 typedef pn_Cmp confirm_attr;    /**< Attribute to hold compare operation */
 
+/** CopyB attribute */
 typedef struct {
-  except_attr    exc;           /**< the exception attribute. MUST be the first one. */
-  ir_type        *data_type;    /**< type of the copied entity */
+  except_attr    exc;           /**< The exception attribute. MUST be the first one. */
+  ir_type        *data_type;    /**< Type of the copied entity. */
 } copyb_attr;
 
+/** Bound attribute */
+typedef struct {
+  except_attr    exc;           /**< The exception attribute. MUST be the first one. */
+} bound_attr;
+
 /**
  * Edge info to put into an irn.
  */
 typedef struct _irn_edge_info_t {
-  struct list_head outs_head;  /**< The list of all outs */
-  int out_count;               /**< number of outs in the list */
+  struct list_head outs_head;  /**< The list of all outs. */
+  int out_count;               /**< Number of outs in the list. */
 } irn_edge_info_t;
 
 
@@ -222,6 +227,7 @@ typedef union {
   end_attr       end;           /**< For EndReg, EndExcept */
   except_attr    except;        /**< For Phi node construction in case of exceptions */
   copyb_attr     copyb;         /**< For CopyB operation */
+  bound_attr     bound;         /**< For Bound operation */
 } attr;
 
 
@@ -232,8 +238,8 @@ struct ir_node {
   firm_kind kind;          /**< distinguishes this node from others */
   ir_op *op;               /**< Opcode of this node. */
   ir_mode *mode;           /**< Mode of this node. */
-  unsigned long visited;   /**< visited counter for walks of the graph */
   struct ir_node **in;     /**< array with predecessors / operands */
+  unsigned long visited;   /**< visited counter for walks of the graph */
   void *link;              /**< to attach additional information to the node, e.g.
                               used while construction to link Phi0 nodes and
                              during optimization to link to nodes that
@@ -709,11 +715,11 @@ static INLINE ir_type *_get_irn_type(ir_node *node) {
   return _get_irn_op(node)->ops.get_type(node);
 }
 
-static INLINE ir_type *get_irn_type_attr(ir_node *node) {
+static INLINE ir_type *_get_irn_type_attr(ir_node *node) {
   return _get_irn_op(node)->ops.get_type_attr(node);
 }
 
-static INLINE entity *get_irn_entity_attr(ir_node *node) {
+static INLINE entity *_get_irn_entity_attr(ir_node *node) {
   return _get_irn_op(node)->ops.get_entity_attr(node);
 }
 
@@ -772,6 +778,8 @@ static INLINE void _set_Cond_jmp_pred(ir_node *node, cond_jmp_predicate pred) {
 #define classify_Const(node)                  _classify_Const(node)
 #define is_irn_forking(node)                  _is_irn_forking(node)
 #define get_irn_type(node)                    _get_irn_type(node)
+#define get_irn_type_attr(node)               _get_irn_type_attr(node)
+#define get_irn_entity_attr(node)             _get_irn_entity_attr(node)
 #define is_irn_constlike(node)                _is_irn_constlike(node)
 #define get_Cond_jmp_pred(node)               _get_Cond_jmp_pred(node)
 #define set_Cond_jmp_pred(node, pred)         _set_Cond_jmp_pred(node, pred)