X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fcommon%2Firtools.h;h=fe85e0a447b595c52c9c1b56b2b4d7c64aa97162;hb=c64fe299008a45e1bd3b90656d357a77edbb79c9;hp=7447d39216e2eb86017923e8187e4350b4fc3f62;hpb=d92c40358495a9da07dcb03c9ad418bf460825b0;p=libfirm diff --git a/ir/common/irtools.h b/ir/common/irtools.h index 7447d3921..fe85e0a44 100644 --- a/ir/common/irtools.h +++ b/ir/common/irtools.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -59,7 +59,7 @@ lc_opt_entry_t *firm_opt_get_root(void); /** * convert a pointer into an integer */ -#define PTR_TO_INT(v) ((int)((char *)(v) - (char *)0)) +#define PTR_TO_INT(v) (((char *)(v) - (char *)0)) /** * Dump a pset containing Firm objects. @@ -77,80 +77,61 @@ void firm_clear_link(ir_node *n, void *env); * The famous clear_link_and_block_lists() walker-function. * Sets all links fields of visited nodes to NULL. * Additionally, clear all Phi-lists of visited blocks. - * Do not implement it by yourself, use this one + * Do not implement it by yourself, use this one. */ void firm_clear_node_and_phi_links(ir_node *n, void *env); /** - * Copies a node to a new irg. The Ins of the new node point to - * the predecessors on the old irg. n->link points to the new node. - * - * @param n The node to be copied - * @param irg the new irg - * - * Does NOT copy standard nodes like Start, End etc that are fixed - * in an irg. Instead, the corresponding nodes of the new irg are returned. - * Note further, that the new nodes have no block. + * Walker function, sets all phi list heads fields of visited Blocks + * to NULL. + * Use in conjunction with firm_collect_block_phis(). */ -void copy_irn_to_irg(ir_node *n, ir_graph *irg); +void firm_clear_block_phis(ir_node *node, void *env); /** - * Creates an exact copy of a node. - * The copy resists on the same graph in the same block. - * - * @param n the node to copy - * - * @note If the copy is not changed, the next CSE operation will - * replace it by the original, so beware. + * Walker function, links all visited Phi nodes into its block links. + * Use in conjunction with firm_clear_block_phis(). */ -ir_node *exact_copy(const ir_node *n); +void firm_collect_block_phis(ir_node *node, void *env); /** - * Creates an ir_graph pass for running void function(ir_graph *irg). - * Uses the default verifier and dumper. - * The pass returns always 0. + * Creates an exact copy of a node with same inputs and attributes in the + * same block. * - * @param name the name of this pass - * @param verify should this pass be verified? - * @param dump should this pass result be dumped? - * @param function the function to run - * - * @return the newly created ir_graph pass + * @param node the node to copy */ -ir_graph_pass_t *def_graph_pass( - const char *name, int verify, int dump, - void (*function)(ir_graph *irg)); +ir_node *exact_copy(const ir_node *node); /** - * Creates an ir_graph pass for running int function(ir_graph *irg). - * Uses the default verifier and dumper. - * The pass returns the return value of function. - * - * @param name the name of this pass - * @param verify should this pass be verified? - * @param dump should this pass result be dumped? - * @param function the function to run + * Create an exact copy of a node with same inputs and attributes in the same + * block but puts the node on a graph which might be different than the graph + * of the original node. + * Note: You have to fixup the inputs/block later + */ +ir_node *irn_copy_into_irg(const ir_node *node, ir_graph *irg); + +/** + * This is a helper function used by some routines copying irg graphs + * This assumes that we have "old" nodes which have been copied to "new" + * nodes; The inputs of the new nodes still point to old nodes. * - * @return the newly created ir_graph pass + * Given an old(!) node this function rewires the matching new_node + * so that all its inputs point to new nodes afterwards. */ -ir_graph_pass_t *def_graph_pass_ret( - const char *name, int verify, int dump, - int (*function)(ir_graph *irg)); +void irn_rewire_inputs(ir_node *node); /** - * Creates an ir_prog pass for running void function(). - * Uses the default verifier and dumper. - * The pass returns always 0. + * @deprecated + * Copies a node to a new irg. The Ins of the new node point to + * the predecessors on the old irg. n->link points to the new node. * - * @param name the name of this pass - * @param verify should this pass be verified? - * @param dump should this pass result be dumped? - * @param function the function to run + * @param n The node to be copied + * @param irg the new irg * - * @return the newly created ir_graph pass + * Does NOT copy standard nodes like Start, End etc that are fixed + * in an irg. Instead, the corresponding nodes of the new irg are returned. + * Note further, that the new nodes have no block. */ -ir_prog_pass_t *def_prog_pass( - const char *name, int verify, int dump, - void (*function)(void)); +void copy_irn_to_irg(ir_node *n, ir_graph *irg); #endif