Reverted r27368, needed for propagation of changed nodes ...
[libfirm] / include / libfirm / ircons.h
index 62483a7..adfa04d 100644 (file)
  *    All ir_nodes are defined by a common data structure.  They are distinguished
  *    by their opcode and differ in the number of their attributes.
  *
- *    The constructor for the block node sets current_block to itself.
  *    Const nodes are always added to the start block.
  *    All other constructors add the created node to the current_block.
  *    swich_block(block) allows to set the current block to block.
  *     symconst_type_tag   The symbolic constant represents a type tag.
  *     symconst_type_size  The symbolic constant represents the size of a type.
  *     symconst_type_align The symbolic constant represents the alignment of a type.
- *     symconst_addr_name  Information for the linker, e.g. the name of a global
- *                         variable.
  *     symconst_addr_ent   The symbolic constant represents the address of an entity.
  *     symconst_ofs_ent    The symbolic constant represents the offset of an
  *                         entity in its owner type.
  *     symconst_enum_const The symbolic constant is a enumeration constant of an
  *                         enumeration type.
  *
- *    To represent a pointer to an entity that is represented by an entity
- *    datastructure don't use
- *      sym.ident_p = get_entity_ld_ident(ent);
- *      new_SymConst(mode_P, sym, symconst_addr_name);.
- *    Use a real const instead:
- *      sym.entity_p = ent;
- *      new_SymConst(mode_P, sym, symconst_addr_ent);
- *    This makes the constant independent of name changes of the entity due to
- *    mangling.
- *
  *    Parameters
  *      mode        P for SymConsts representing addresses, Iu otherwise.
  *      value       The type, ident, entity or enum constant, depending on the
  *                        -symconst_type_tag
  *                        -symconst_type_size
  *                        -symconst_type_align
- *                        -symconst_addr_name
  *                        -symconst_addr_ent
  *
  *    If the attr.i.num is symconst_type_tag, symconst_type_size or symconst_type_align,
@@ -1166,11 +1152,7 @@ typedef enum ir_cons_flags {
 
 /** Constructor for a Block node.
  *
- * Constructs a mature block with the given predecessors.  Use Unknown
- * nodes as predecessors to construct a block if the number of
- * predecessors is known, but not the predecessors themselves.  This
- * constructor does not set current_block.  It not be used with
- * automatic Phi node construction.
+ * Constructs a mature block with the given predecessors.
  *
  * @param *db    A Pointer for  debug information.
  * @param irg    The IR graph the block belongs to.
@@ -1288,7 +1270,8 @@ ir_node *new_rd_Const_type(dbg_info *db, ir_graph *irg,
  */
 ir_node *new_rd_Const(dbg_info *db, ir_graph *irg, tarval *con);
 
-/** Constructor for a Const node.
+/**
+ * Constructor for a Const node.
  *
  * Adds the node to the start block.
  *
@@ -1316,9 +1299,6 @@ ir_node *new_rd_Const_long(dbg_info *db, ir_graph *irg,
  *    - symconst_type_align The symbolic constant represents the alignment of a
  *                          type.  The type of which the constant represents the
  *                          size is given explicitly.
- *    - symconst_addr_name  The symbolic constant represents the address of an
- *                          entity (variable or method).  The variable is
- *                          indicated by a name that is valid for linking.
  *    - symconst_addr_ent   The symbolic constant represents the address of an
  *                          entity (variable or method).  The variable is given
  *                          explicitly by a firm entity.
@@ -1371,15 +1351,6 @@ ir_node *new_rd_SymConst_addr_ent(dbg_info *db, ir_graph *irg, ir_mode *mode,
 ir_node *new_rd_SymConst_ofs_ent(dbg_info *db, ir_graph *irg, ir_mode *mode,
                                  ir_entity *symbol, ir_type *tp);
 
-/** Constructor for a SymConst addr_name node.
- *
- * Same as new_rd_SymConst_type, except that the constructor is tailored for
- * symconst_addr_name.
- * Adds the SymConst to the start block of irg.
- */
-ir_node *new_rd_SymConst_addr_name(dbg_info *db, ir_graph *irg, ir_mode *mode,
-                                   ident *symbol, ir_type *tp);
-
 /** Constructor for a SymConst type_tag node.
  *
  * Same as new_rd_SymConst_type, except that the constructor is tailored for
@@ -1837,25 +1808,21 @@ ir_node *new_rd_Sync(dbg_info *db, ir_node *block, int arity, ir_node *in[]);
  * position of the value within the tuple.
  *
  * @param *db    A pointer for debug information.
- * @param *block The IR block the node belongs to.
  * @param arg    A node producing a tuple.  The node must have mode_T.
  * @param *mode  The mode of the value to project.
  * @param proj   The position of the value in the tuple.
  */
-ir_node *new_rd_Proj(dbg_info *db, ir_node *block, ir_node *arg,
-                     ir_mode *mode, long proj);
+ir_node *new_rd_Proj(dbg_info *db, ir_node *arg, ir_mode *mode, long proj);
 
 /** Constructor for a defaultProj node.
  *
  * Represents the default control flow of a Switch-Cond node.
  *
  * @param *db       A pointer for debug information.
- * @param *block    The IR block the node belongs to.
  * @param arg       A node producing a tuple.
  * @param max_proj  The end position of the value in the tuple.
  */
-ir_node *new_rd_defaultProj(dbg_info *db, ir_node *block,
-                            ir_node *arg, long max_proj);
+ir_node *new_rd_defaultProj(dbg_info *db, ir_node *arg, long max_proj);
 
 /** Constructor for a Tuple node.
  *
@@ -1919,7 +1886,8 @@ ir_node *new_rd_Unknown(dbg_info *db, ir_graph *irg, ir_mode *m);
  *
  * @param *db     A pointer for debug information.
  * @param *block  The block the node belong to.
- * @param *callee The call node visible in the intra procedural view.
+ * @param *ptr    pointer to the called function
+ * @param *call   associated call operation
  */
 ir_node *new_rd_CallBegin(dbg_info *db, ir_node *block, ir_node *ptr, ir_node *call);
 
@@ -2184,9 +2152,6 @@ ir_node *new_r_Const_type(ir_graph *irg, tarval *con, ir_type *tp);
  *    - symconst_type_align The symbolic constant represents the alignment of a
  *                          type.  The type of which the constant represents the
  *                          size is given explicitly.
- *    - symconst_addr_name  The symbolic constant represents the address of an
- *                          entity (variable or method).  The variable is
- *                          indicated by a name that is valid for linking.
  *    - symconst_addr_ent   The symbolic constant represents the address of an
  *                          entity (variable or method).  The variable is given
  *                          explicitly by a firm entity.
@@ -2593,23 +2558,20 @@ ir_node *new_r_Sync(ir_node *block, int arity, ir_node *in[]);
  * Projects a single value out of a tuple.  The parameter proj gives the
  * position of the value within the tuple.
  *
- * @param *block The IR block the node belongs to.
  * @param arg    A node producing a tuple.
- * @param *mode  The mode of the value to project.
+ * @param mode   The mode of the value to project.
  * @param proj   The position of the value in the tuple.
  */
-ir_node *new_r_Proj(ir_node *block, ir_node *arg,
-                    ir_mode *mode, long proj);
+ir_node *new_r_Proj(ir_node *arg, ir_mode *mode, long proj);
 
 /** Constructor for a defaultProj node.
  *
  * Represents the default control flow of a Switch-Cond node.
  *
- * @param *block    The IR block the node belongs to.
  * @param arg       A node producing a tuple.
  * @param max_proj  The end  position of the value in the tuple.
  */
-ir_node *new_r_defaultProj(ir_node *block, ir_node *arg, long max_proj);
+ir_node *new_r_defaultProj(ir_node *arg, long max_proj);
 
 
 /** Constructor for a Tuple node.
@@ -2676,7 +2638,8 @@ ir_node *new_r_Unknown(ir_graph *irg, ir_mode *m);
  * node.
  *
  * @param *block  The block the node belong to.
- * @param *callee The call node visible in the  intra procedural view.
+ * @param *ptr    pointer to the called function
+ * @param *call   associated call operation
  */
 ir_node *new_r_CallBegin(ir_node *block, ir_node *ptr, ir_node *call);
 
@@ -2832,17 +2795,10 @@ void     set_cur_block(ir_node *target);
 /** Returns the current block of the current graph. */
 ir_node *get_cur_block(void);
 
-/** Returns the fixed nodes  of the current graph. */
-#define get_cur_end_block()   get_irg_end_block(current_ir_graph)
-#define get_cur_end()         get_irg_end(current_ir_graph)
-#define get_cur_start_block() get_irg_start_block(current_ir_graph)
-#define get_cur_start()       get_irg_start(current_ir_graph)
-
 /** Constructor for a Block node.
  *
  * Adds the block to the graph in current_ir_graph. Constructs a Block
- * with a fixed number of predecessors.  Does set current_block.  Can
- * be used with automatic Phi node construction.
+ * with a fixed number of predecessors.
  *
  * @param *db    A Pointer for debug information.
  * @param arity  The number of control predecessors.
@@ -2947,6 +2903,15 @@ ir_node *new_d_Const_type(dbg_info *db, tarval *con, ir_type *tp);
  */
 ir_node *new_d_Const(dbg_info *db, tarval *con);
 
+/**
+ * @see new_rd_Const_long()
+ *
+ * @param *db    A pointer for debug information.
+ * @param *mode  The mode of the operands and results.
+ * @param value  A value from which the tarval is made.
+ */
+ir_node *new_d_Const_long(dbg_info *db, ir_mode *mode, long value);
+
 /** Constructor for a SymConst_type node.
  *
  *  This is the constructor for a symbolic constant.
@@ -2959,9 +2924,6 @@ ir_node *new_d_Const(dbg_info *db, tarval *con);
  *    - symconst_type_align The symbolic constant represents the alignment of a
  *                          type.  The type of which the constant represents the
  *                          size is given explicitly.
- *    - symconst_addr_name  The symbolic constant represents the address of an
- *                          entity (variable or method).  The variable is
- *                          indicated by a name that is valid for linking.
  *    - symconst_addr_ent   The symbolic constant represents the address of an
  *                          entity (variable or method).  The variable is given
  *                          explicitly by a firm entity.
@@ -3499,7 +3461,8 @@ ir_node *new_d_Unknown(dbg_info *db, ir_mode *m);
  * node.Adds the node to the block in current_ir_block.
  *
  * @param *db     A pointer for debug information.
- * @param *callee The call node visible in the  intra procedural view.
+ * @param *ptr    pointer to the called function
+ * @param *call   associated call operation
  */
 ir_node *new_d_CallBegin(dbg_info *db, ir_node *ptr, ir_node *call);
 
@@ -3635,15 +3598,10 @@ ir_node *new_d_ASM(dbg_info *db, int arity, ir_node *in[], ir_asm_constraint *in
 /* The block oriented interface without debug support                    */
 /*-----------------------------------------------------------------------*/
 
-/* Needed from the interface with debug support:
-void set_cur_block (ir_node *target);   */
-
 /** Constructor for a Block node.
  *
  * Constructor for a Block node. Adds the block to the graph in
- * current_ir_graph.  Constructs a Block with a fixed number of
- * predecessors.  Does set current_block.  Can be used with automatic
- * Phi node construction.
+ * current_ir_graph. Constructs a Block with a fixed number of predecessors.
  *
  * @param arity  The number of control predecessors.
  * @param in     An array of control predecessors.  The length of
@@ -3772,9 +3730,6 @@ ir_node *new_Const_type(tarval *con, ir_type *tp);
  *    - symconst_type_align The symbolic constant represents the alignment of a
  *                          type.  The type of which the constant represents the
  *                          size is given explicitly.
- *    - symconst_addr_name  The symbolic constant represents the address of an
- *                          entity (variable or method).  The variable is
- *                          indicated by a name that is valid for linking.
  *    - symconst_addr_ent   The symbolic constant represents the address of an
  *                          entity (variable or method).  The variable is given
  *                          explicitly by a firm entity.
@@ -3811,9 +3766,6 @@ ir_node *new_SymConst_type(ir_mode *mode, union symconst_symbol value, symconst_
  *    - symconst_type_align The symbolic constant represents the alignment of a
  *                          type.  The type of which the constant represents the
  *                          size is given explicitly.
- *    - symconst_addr_name  The symbolic constant represents the address of an
- *                          entity (variable or method).  The variable is
- *                          indicated by a name that is valid for linking.
  *    - symconst_addr_ent   The symbolic constant represents the address of an
  *                          entity (variable or method).  The variable is given
  *                          explicitly by a firm entity.
@@ -3905,7 +3857,8 @@ ir_node *new_Builtin(ir_node *store, int arity, ir_node *in[],
  * constructor copies the method pointer input from the passed Call
  * node. Adds the node to the block in current_ir_block.
  *
- * @param   *callee A pointer to the called procedure.
+ * @param *ptr    pointer to the called function
+ * @param *call   associated call operation
  */
 ir_node *new_CallBegin(ir_node *ptr, ir_node *call);
 
@@ -4400,15 +4353,41 @@ ir_node *new_ASM(int arity, ir_node *in[], ir_asm_constraint *inputs,
                  int n_outs, ir_asm_constraint *outputs,
                  int n_clobber, ident *clobber[], ident *asm_text);
 
-/** Constructor for a Dummy node.
+/**
+ * @brief Constructor for a Dummy node.
  *
+ * @param *db       debug info for the node
  * @param *mode     The mode of the node.
+ * @param *irg      the graph to put the node into
+ * @returns         the newly created note
  */
-ir_node *new_Dummy(ir_mode *mode);
+ir_node *new_rd_Dummy(dbg_info *db, ir_graph *irg, ir_mode *mode);
 
+/**
+ * @copybrief new_rd_Dummy()
+ *
+ * @param *mode     The mode of the node.
+ * @param *irg      the graph to put the node into
+ * @returns         the newly created note
+ */
 ir_node *new_r_Dummy(ir_graph *irg, ir_mode *mode);
 
-ir_node *new_rd_Dummy(dbg_info *db, ir_graph *irg, ir_mode *mode);
+/**
+ * @copybrief new_rd_Dummy()
+ *
+ * @param *db       debug info for the node
+ * @param *mode     The mode of the node.
+ * @returns         the newly created note
+ */
+ir_node *new_d_Dummy(dbg_info *db, ir_mode *mode);
+
+/**
+ * @copybrief new_rd_Dummy()
+ *
+ * @param *mode     The mode of the node.
+ * @returns         the newly created note
+ */
+ir_node *new_Dummy(ir_mode *mode);
 
 /*---------------------------------------------------------------------*/
 /* The comfortable interface.                                          */
@@ -4477,15 +4456,13 @@ ir_node *get_value(int pos, ir_mode *mode);
  */
 void set_value(int pos, ir_node *value);
 
-/** Find the value number for a node in the current block.
+/**
+ * Find the value number for a node in the current block.
  *
- * This function searches all values in the current block for
- * a given value and returns its value number if it was found, else
- * -1.
- * Note that this does not mean that the value does not exists,
- * it's just not equal the node (for instance behind a Phi/Confirm ...)
+ * @param value  the searched value
  *
- * @param *value The value to find.
+ * @return the value number of the value or -1 if this value has
+ * no value number in the current block.
  */
 int find_value(ir_node *value);