bugfix: typeo
[libfirm] / ir / ir / irnode.h
index 584dab8..5d51cec 100644 (file)
@@ -86,6 +86,11 @@ typedef enum {
 typedef struct ir_node ir_node;
 #endif
 
+#ifdef __cplusplus
+       extern "C" {
+
+#endif
+
 /**
  *   you can work on the graph without considering the different types
  *   of nodes, it's just a big graph.
@@ -174,7 +179,7 @@ void          set_irn_link     (ir_node *node, void *link);
 void         *get_irn_link     (const ir_node *node);
 
 /** Returns the ir_graph this node belongs to. Only valid if irg
- *  is in state pinned (irg is only stored in the block. */
+ *  is in state op_pin_state_pinned (irg is only stored in the block. */
 ir_graph     *get_irn_irg      (ir_node *node);
 
 /** Outputs a unique number for this node if libFIRM is compiled for
@@ -217,15 +222,14 @@ new_ir_node (dbg_info *db,
  * access routines that work for all nodes we use infix "nodes" and do not
  * name this function get_irn_block. */
 #define get_nodes_block get_nodes_Block
-ir_node  *get_nodes_Block (ir_node *node);
+ir_node  *get_nodes_block (ir_node *node);
 #define set_nodes_block set_nodes_Block
-void      set_nodes_Block (ir_node *node, ir_node *block);
+void      set_nodes_block (ir_node *node, ir_node *block);
 
 /**
  * @function get_irn_block
  * @see get_nodes_block()
  */
-
 /**
  * Projection numbers for result of Start node: use for Proj nodes!
  */
@@ -240,21 +244,6 @@ typedef enum {
                    type of this method. */
 } pn_Start; /* Projection numbers for Start. */
 
-/**
- * Projection numbers for result of Start node: use for Proj nodes!
- * @remark This is the old name convention, don't use anymore.
- */
-typedef enum {
-  pns_initial_exec,     /**< Projection on an executable, the initial control
-               flow. */
-  pns_global_store,     /**< Projection on the global store */
-  pns_frame_base,       /**< Projection on the frame base */
-  pns_globals,          /**< Projection on the pointer to the data segment
-                 containing _all_ global entities. */
-  pns_args,             /**< Projection on all arguments */
-  pns_value_arg_base    /**< Pointer to region of compound value arguments as defined by
-                 type of this method. */
-} pns_number; /* pns: Projection Number Start */
 
 /** Test whether arbitrary node is frame pointer.
  *
@@ -277,7 +266,7 @@ int   is_value_arg_pointer(ir_node *n);
 
 /* @@@ no more supported  */
 ir_node **get_Block_cfgpred_arr (ir_node *node);
-int              get_Block_n_cfgpreds (ir_node *node);
+int       get_Block_n_cfgpreds (ir_node *node);
 ir_node  *get_Block_cfgpred (ir_node *node, int pos);
 void      set_Block_cfgpred (ir_node *node, int pos, ir_node *pred);
 bool      get_Block_matured (ir_node *node);
@@ -302,10 +291,8 @@ ir_node  *get_Block_cg_cfgpred(ir_node * node, int pos);
 /* frees the memory. */
 void      remove_Block_cg_cfgpred_arr(ir_node * node);
 
-/* Start references the irg it is in.
- @@@ old -- use get_irn_irg instead! */
-ir_graph *get_Start_irg(ir_node *node);
-
+/** Keep alive dedicated nodes.  These must be either
+ *  PhiM or Block nodes. */
 int  get_End_n_keepalives(ir_node *end);
 ir_node *get_End_keepalive(ir_node *end, int pos);
 void add_End_keepalive (ir_node *end, ir_node *ka);
@@ -315,9 +302,6 @@ void set_End_keepalive(ir_node *end, int pos, ir_node *ka);
    free_End frees these data structures. */
 void free_End (ir_node *end);
 
-/* @@@ old -- use get_irn_irg instead!  */
-ir_graph *get_EndReg_irg (ir_node *end);
-ir_graph *get_EndExcept_irg (ir_node *end);
 
 /* We distinguish three kinds of Cond nodes.  These can be distinguished
    by the mode of the selector operand and an internal flag of type cond_kind.
@@ -391,31 +375,54 @@ void     set_Const_type   (ir_node *node, type *tp);
      represented by SymConst.  The content of the attribute type_or_id
      depends on this tag.  Use the proper access routine after testing
      this flag. */
+
 typedef enum {
-  type_tag,          /**< The SymConst is a type tag for the given type.
-                       Type_or_id_p is type *. */
-  size,              /**< The SymConst is the size of the given type.
-                       Type_or_id_p is type *. */
-  linkage_ptr_info   /**< The SymConst is a symbolic pointer to be filled in
-                       by the linker. Type_or_id_p is ident *.  If the name
-                       refers to an entity also compiled, this entity must be external_visible,
-                       so that it is not removed by some optimization.  An optimization must
-                       not analyse linkage_ptr_info SymConsts. */
+  symconst_type_tag,    /**< The SymConst is a type tag for the given type.
+                          Type_or_id_p is type *. */
+  symconst_size,        /**< The SymConst is the size of the given type.
+                          Type_or_id_p is type *. */
+  symconst_addr_name,   /**< The SymConst is a symbolic pointer to be filled in
+                          by the linker.  The pointer is represented by a string.
+                          Type_or_id_p is ident *. */
+  symconst_addr_ent     /**< The SymConst is a symbolic pointer to be filled in
+                          by the linker.  The pointer is represented by an entity.
+                          Type_or_id_p is entity *. */
 } symconst_kind;
 
-typedef union type_or_id * type_or_id_p;
+/** SymConst attributes
+    This union contains the symbolic information represented by the node  */
+union symconst_symbol {
+  type   *type_p;
+  ident  *ident_p;
+  entity *entity_p;
+};
+
+
+typedef union symconst_symbol symconst_symbol;
+
+
+/** Access the kind of the SymConst. */
 symconst_kind get_SymConst_kind (const ir_node *node);
 void          set_SymConst_kind (ir_node *node, symconst_kind num);
-/* Only to access SymConst of kind type_tag or size.  Else assertion: */
+
+/** Only to access SymConst of kind type_tag or size.  Else assertion: */
 type    *get_SymConst_type (ir_node *node);
 void     set_SymConst_type (ir_node *node, type *tp);
-/* Only to access SymConst of kind linkage_ptr_info.  Else assertion: */
-ident   *get_SymConst_ptrinfo (ir_node *node);
-void     set_SymConst_ptrinfo (ir_node *node, ident *ptrinfo);
-/* Sets both: type and ptrinfo.  Needed to treat the node independent of
-   its semantics.  Does a memcpy for the memory tori points to. */
-type_or_id_p get_SymConst_type_or_id (ir_node *node);
-void set_SymConst_type_or_id (ir_node *node, type_or_id_p tori);
+
+/** Only to access SymConst of kind addr_name.  Else assertion: */
+ident   *get_SymConst_name (ir_node *node);
+void     set_SymConst_name (ir_node *node, ident *name);
+
+/** Only to access SymConst of kind addr_ent.  Else assertion: */
+entity  *get_SymConst_entity (ir_node *node);
+void     set_SymConst_entity (ir_node *node, entity *ent);
+
+/** Sets both: type and ptrinfo.  Needed to treat the node independent of
+   its semantics.  Does a memcpy for the memory sym points to. */
+/* write 'union': firmjni then does not create a method... */
+union symconst_symbol get_SymConst_symbol (ir_node *node);
+void                  set_SymConst_symbol (ir_node *node,
+                                          union symconst_symbol sym);
 
 ir_node *get_Sel_mem (ir_node *node);
 void     set_Sel_mem (ir_node *node, ir_node *mem);
@@ -428,21 +435,6 @@ void     set_Sel_index (ir_node *node, int pos, ir_node *index);
 entity  *get_Sel_entity (ir_node *node); /* entity to select */
 void     set_Sel_entity (ir_node *node, entity *ent);
 
-/**
- * Projection numbers for result of Call node: use for Proj nodes!
- *
- * @remark old name convention!
- */
-typedef enum {
-  pncl_memory = 0,        /**< The memory result. */
-  pncl_exc_target = 1,    /**< The control flow result branching to the exception handler */
-  pncl_result_tuple = 2,  /**< The tuple containing all (0, 1, 2, ...) results */
-  pncl_exc_memory = 3,    /**< The memory result in case the called method terminated with
-                  an exception */
-  pncl_value_res_base = 4 /**< A pointer to the memory region containing copied results
-                  passed by value (for compound result types). */
-} pncl_number;   /* pncl: Projection Number CaLl */
-
 /**
  * Projection numbers for result of Call node: use for Proj nodes!
  */
@@ -488,8 +480,6 @@ void    remove_Call_callee_arr(ir_node * node);
 
 ir_node  *get_CallBegin_ptr  (ir_node *node);
 void      set_CallBegin_ptr  (ir_node *node, ir_node *ptr);
-/* @@@ old -- use get_irn_irg instead!  */
-ir_graph *get_CallBegin_irg  (ir_node *node);
 ir_node  *get_CallBegin_call (ir_node *node);
 void      set_CallBegin_call (ir_node *node, ir_node *call);
 
@@ -726,10 +716,21 @@ long      get_Filter_proj(ir_node *node);
 void      set_Filter_proj(ir_node *node, long proj);
 /* set the interprocedural predecessors, ...d_arr uses current_ir_graph.
  * @@@ Maybe better:  arity is zero if no cg preds. */
-void             set_Filter_cg_pred_arr(ir_node * node, int arity, ir_node ** in);
-void             set_Filter_cg_pred(ir_node * node, int pos, ir_node * pred);
-int              get_Filter_n_cg_preds(ir_node *node);
-ir_node *        get_Filter_cg_pred(ir_node *node, int pos);
+void     set_Filter_cg_pred_arr(ir_node * node, int arity, ir_node ** in);
+void     set_Filter_cg_pred(ir_node * node, int pos, ir_node * pred);
+int      get_Filter_n_cg_preds(ir_node *node);
+ir_node *get_Filter_cg_pred(ir_node *node, int pos);
+
+/** Return true if parameter is a memory operation.
+ *
+ *  A memory operation is an operation that directly changes the
+ *  memory.  I.e., a Load or a Store operation.
+ */
+int is_memop(ir_node *node);
+ir_node *get_memop_mem (ir_node *node);
+void     set_memop_mem (ir_node *node, ir_node *mem);
+ir_node *get_memop_ptr (ir_node *node);
+void     set_memop_ptr (ir_node *node, ir_node *ptr);
 
 /**
  * Projection numbers for Load: use for Proj nodes!
@@ -801,7 +802,6 @@ void      set_Sync_pred (ir_node *node, int pos, ir_node *pred);
 
 ir_node  *get_Proj_pred (ir_node *node);
 void      set_Proj_pred (ir_node *node, ir_node *pred);
-/* Why long? shouldn't int be enough, and smaller? Or even byte? */
 long      get_Proj_proj (ir_node *node);
 void      set_Proj_proj (ir_node *node, long proj);
 
@@ -834,7 +834,6 @@ void     set_Confirm_cmp   (ir_node *node, pn_Cmp cmp);
 /** returns operand of node if node is a Proj. */
 ir_node *skip_Proj (ir_node *node);
 /** returns operand of node if node is a Id */
-ir_node *skip_nop  (ir_node *node);
 ir_node *skip_Id  (ir_node *node);   /* Same as skip_nop. */
 /* returns corresponding operand of Tuple if node is a Proj from
    a Tuple. */
@@ -856,9 +855,6 @@ int      is_Proj (const ir_node *node);
    Start, End, Jmp, Cond, Return, Raise, Bad, CallBegin, EndReg, EndExcept */
 int is_cfop(ir_node *node);
 
-/* @@@ old -- use get_irn_irg instead!  */
-ir_graph *get_ip_cfop_irg(ir_node *n);
-
 /** Returns true if the operation manipulates interprocedural control flow:
     CallBegin, EndReg, EndExcept */
 int is_ip_cfop(ir_node *node);
@@ -909,9 +905,9 @@ void    dump_irn(ir_node *n);
 /** Output information about an entity and its owner */
 #define DDMEO(X) printf("%s(l.%i) %s (own: %s): %ld (%p)\n", __MYFUNC__, __LINE__, get_entity_name(X), get_type_name(get_entity_owner(X)), get_entity_nr(X), (void *)(X))
 /** Output information about a graph */
-#define DDMG(X)  printf("%s(l.%i) %s: %ld (%p)\n",           __MYFUNC__, __LINE__, get_entity_name(get_irg_ent(X)), get_irg_graph_nr(X), (void *)(X))
+#define DDMG(X)  printf("%s(l.%i) graph %s: %ld (%p) in %s %s.\n", __MYFUNC__, __LINE__, get_entity_name(get_irg_entity(X)), get_irg_graph_nr(X), (void *)(X), get_type_tpop_name(get_entity_owner(get_irg_entity(X))), get_type_name(get_entity_owner(get_irg_entity(X))))
 /** Output information about an ident */
-#define DDMI(X)  printf("%s(l.%i) %s: %p\n",                 __MYFUNC__, __LINE__, id_to_str(X), (void *)(X))
+#define DDMI(X)  printf("%s(l.%i) %s: %p\n",                 __MYFUNC__, __LINE__, get_id_str(X), (void *)(X))
 /** Output information about a mode */
 #define DDMM(X)  printf("%s(l.%i) %s: %p\n",                 __MYFUNC__, __LINE__, get_mode_name(X), (void *)(X))
 /** Output information about a loop */
@@ -922,4 +918,8 @@ void    dump_irn(ir_node *n);
 /*@}*/ /* end of ir_node group definition */
 
 
+#ifdef __cplusplus
+}
+#endif
+
 # endif /* _IRNODE_H_ */