* ir_node *new_Proj (ir_node *arg, ir_mode *mode, long proj);
* ir_node *new_NoMem (void);
* ir_node *new_Mux (ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
+ * ir_node *new_CopyB (ir_node *store, ir_node *dst, ir_node *src, type *data_type);
*
* void add_immBlock_pred (ir_node *block, ir_node *jmp);
* void mature_immBlock (ir_node *block);
* This node is used as input for operations that need a Memory, but do not
* change it like Div by const != 0, analyzed calls etc.
*
+ * ir_node *new_CopyB (ir_node *store, ir_node *dst, ir_node *src, type *data_type)
+ * -----------------------------------------------------------------------------------
+ *
+ * Describes a high level block copy of a compound type form address src to
+ * address dst. Must be lowered to a Call to a runtime memory copy function.
+ *
* ir_node *new_Proj (ir_node *arg, ir_mode *mode, long proj)
* ----------------------------------------------------------
*
ir_node *new_rd_Mux (dbg_info *db, ir_graph *irg, ir_node *block,
ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
+/** Constructor for a CopyB node.
+ *
+ * Adds the node to the block in current_ir_block.
+ *
+ * @param *db A pointer for debug information.
+ * @param *irg The ir graph the node belong to.
+ * @param *block The block the node belong to.
+ * @param *store The current memory
+ * @param *dst The ir_node that represents the destination address.
+ * @param *arg The ir_node that represents the source address.
+ * @param *data_type The type of the copied data
+ */
+ir_node *new_rd_CopyB(dbg_info *db, ir_graph *irg, ir_node *block,
+ ir_node *store, ir_node *dst, ir_node *src, type *data_type);
+
/*-------------------------------------------------------------------------*/
/* The raw interface without debug support */
/*-------------------------------------------------------------------------*/
ir_node *new_r_Mux (ir_graph *irg, ir_node *block,
ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
+/** Constructor for a CopyB node.
+ *
+ * Adds the node to the block in current_ir_block.
+ *
+ * @param *irg The ir graph the node belong to.
+ * @param *block The block the node belong to.
+ * @param *store The current memory
+ * @param *dst The ir_node that represents the destination address.
+ * @param *arg The ir_node that represents the source address.
+ * @param *data_type The type of the copied data
+ */
+ir_node *new_r_CopyB(ir_graph *irg, ir_node *block,
+ ir_node *store, ir_node *dst, ir_node *src, type *data_type);
+
/*-----------------------------------------------------------------------*/
/* The block oriented interface */
/*-----------------------------------------------------------------------*/
ir_node *new_d_Mux (dbg_info *db, ir_node *sel,
ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
+/** Constructor for a CopyB node.
+ *
+ * Adds the node to the block in current_ir_block.
+ *
+ * @param *db A pointer for debug information.
+ * @param *store The current memory
+ * @param *dst The ir_node that represents the destination address.
+ * @param *arg The ir_node that represents the source address.
+ * @param *data_type The type of the copied data
+ */
+ir_node *new_d_CopyB(dbg_info *db, ir_node *store, ir_node *dst, ir_node *src, type *data_type);
+
/*-----------------------------------------------------------------------*/
/* The block oriented interface without debug support */
/*-----------------------------------------------------------------------*/
*/
ir_node *new_Mux (ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
+/** Constructor for a CopyB node.
+ *
+ * Adds the node to the block in current_ir_block.
+ *
+ * @param *store The current memory
+ * @param *dst The ir_node that represents the destination address.
+ * @param *arg The ir_node that represents the source address.
+ * @param *data_type The type of the copied data
+ */
+ir_node *new_CopyB(ir_node *store, ir_node *dst, ir_node *src, type *data_type);
+
/*---------------------------------------------------------------------*/
/* The comfortable interface. */
/* Supports automatic Phi node construction. */
/** Add a control flow edge to an immature block. */
void add_immBlock_pred (ir_node *immblock, ir_node *jmp);
-/** Fix the number of predecessors of an immature block. */
+/** Finalize a Block node, when all control flows are known. */
void mature_immBlock (ir_node *block);
#define mature_cur_block() mature_immBlock(get_cur_block());
* @param pos The position/id of the local variable.
* @param *mode The mode of the value to get.
*/
-ir_node *get_d_value (dbg_info* db, int pos, ir_mode *mode);
+ir_node *get_d_value (dbg_info *db, int pos, ir_mode *mode);
ir_node *get_value (int pos, ir_mode *mode);
/** Remark a new definition of a variable.
* @return a firm node of mode @p mode that initializes the var at position pos
*
* @note
- * Do not return NULL
+ * Do not return NULL!
* If this function is not set, FIRM will create a const node with tarval BAD.
* Use set_irg_loc_description()/get_irg_loc_description() to assign additional
* informations to local variables.