* 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,
/** 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.
*/
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.
*
* - 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.
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
* 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.
*
*
* @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);
* - 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.
* 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.
* 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);
/** 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.
*/
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.
* - 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.
* 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);
/* 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
* - 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.
* - 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.
* 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);
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. */
*/
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);