X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=include%2Flibfirm%2Firedges.h;h=9d3484fc700babc5e2a1f09f5353ede5390535af;hb=314753cd1466b0372dd4d25a0b609b095baecb41;hp=4bf5c9f833500ab4b5f1b95720d3b34d1525a5b0;hpb=a1d8205395ad58c0a301d4bb276938a63a38c14a;p=libfirm diff --git a/include/libfirm/iredges.h b/include/libfirm/iredges.h index 4bf5c9f83..9d3484fc7 100644 --- a/include/libfirm/iredges.h +++ b/include/libfirm/iredges.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -65,6 +65,7 @@ const ir_edge_t *get_irn_out_edge_next(const ir_node *irn, const ir_edge_t *last * @param irn The node. * @param edge An ir_edge_t pointer which shall be set to the current edge. * @param ne The next edge, enables alteration safe edge processing. + * @param kind The kind of the edge. */ #define foreach_out_edge_kind_safe(irn, edge, ne, kind) \ for((edge) = (get_irn_out_edge_first_kind(irn, kind)), (ne) = ((edge) ? (get_irn_out_edge_next(irn, edge)) : NULL); \ @@ -92,25 +93,19 @@ const ir_edge_t *get_irn_out_edge_next(const ir_node *irn, const ir_edge_t *last */ ir_node *get_edge_src_irn(const ir_edge_t *edge); -/** - * Get the number of edges pointing to a node. - * @param irn The node. - * @return The number of edges pointing to this node. - */ -int get_irn_n_edges(const ir_node *irn); - /** * Get the position of an edge. * @param edge The edge. * @return The position in the in array of that edges source. */ -extern int get_edge_src_pos(const ir_edge_t *edge); +int get_edge_src_pos(const ir_edge_t *edge); /** * Get the edge object of an outgoing edge at a node. - * @param irg The graph, the node is in. - * @param irn The node at which the edge originates. - * @param pos The position of the edge. + * @param irg The graph, the node is in. + * @param irn The node at which the edge originates. + * @param pos The position of the edge. + * @param kind The kind of the edge. * @return The corresponding edge object or NULL, * if no such edge exists. */ @@ -121,32 +116,44 @@ const ir_edge_t *get_irn_edge_kind(ir_graph *irg, const ir_node *irn, int pos, i * @param irn The node. * @param kind The kind. */ -extern int get_irn_n_edges_kind(const ir_node *irn, ir_edge_kind_t kind); - +int get_irn_n_edges_kind(const ir_node *irn, ir_edge_kind_t kind); /** * Check, if the out edges are activated. - * @param irg The graph. - * @param kind The edge kind. + * + * @param irg The graph. + * @param kind The edge kind. + * * @return 1, if the edges are present for the given irg, 0 if not. */ -extern int edges_activated_kind(const ir_graph *irg, ir_edge_kind_t kind); +int edges_activated_kind(const ir_graph *irg, ir_edge_kind_t kind); /** * Activate the edges for an irg. - * @param irg The graph to activate the edges for. - * @param kind The edge kind. + * + * @param irg The graph to activate the edges for. + * @param kind The edge kind. */ -extern void edges_activate_kind(ir_graph *irg, ir_edge_kind_t kind); +void edges_activate_kind(ir_graph *irg, ir_edge_kind_t kind); /** * Deactivate the edges for an irg. - * @param irg The graph. - * @param kind The edge kind. + * + * @param irg The graph. + * @param kind The edge kind. */ -extern void edges_deactivate_kind(ir_graph *irg, ir_edge_kind_t kind); +void edges_deactivate_kind(ir_graph *irg, ir_edge_kind_t kind); -extern void edges_reroute_kind(ir_node *old, ir_node *nw, ir_edge_kind_t kind, ir_graph *irg); +/** + * Reroute edges of a specified kind from an old node to + * a new one. + * + * @param old the old node + * @param nw the new node + * @param kind the edge kind + * @param irg the graph on which the rerouting occurs + */ +void edges_reroute_kind(ir_node *old, ir_node *nw, ir_edge_kind_t kind, ir_graph *irg); /** * Verifies the out edges of graph @p irg. @@ -159,6 +166,16 @@ int edges_verify(ir_graph *irg); */ void edges_init_dbg(int do_dbg); +/** + * Creates an ir_graph pass for edges_verify(). + * + * @param name the name of this pass or NULL + * @param assert_on_problem assert if problems were found + * + * @return the newly created ir_graph pass + */ +ir_graph_pass_t *irg_verify_edges_pass(const char *name, unsigned assert_on_problem); + /************************************************************************/ /* Begin Old Interface */ /************************************************************************/ @@ -185,29 +202,51 @@ const ir_edge_t *get_irn_edge(ir_graph *irg, const ir_node *src, int pos); #endif /** - * Activate all the edges for an irg. - * @param irg The graph to activate the edges for. + * Activates data and block edges for an irg. + * If the irg phase is phase_backend, Dependence edges are + * additionally activated. + * + * @param irg The graph to activate the edges for. */ -extern void edges_activate(ir_graph *irg); +void edges_activate(ir_graph *irg); /** - * Deactivate all the edges for an irg. - * @param irg The graph. + * Deactivate data and block edges for an irg. + * If the irg phase is phase_backend, Dependence edges are + * additionally deactivated. + * @param irg The graph. */ -extern void edges_deactivate(ir_graph *irg); +void edges_deactivate(ir_graph *irg); -extern int edges_assure(ir_graph *irg); +/** + * Ensure that edges are activated. + * + * @param irg the IR graph + * + * @return 0 if edges was deactivated before the call, 1 else + */ +int edges_assure(ir_graph *irg); -extern void edges_node_deleted(ir_node *irn, ir_graph *irg); +/** + * Ensure that edges of a given kind are activated. + * + * @param irg the IR graph + * @param kind the edge kind + * + * @return 0 if edges was deactivated before the call, 1 else + */ +int edges_assure_kind(ir_graph *irg, ir_edge_kind_t kind); + +void edges_node_deleted(ir_node *irn, ir_graph *irg); /** * Notify normal and block edges. */ -extern void edges_notify_edge(ir_node *src, int pos, ir_node *tgt, ir_node *old_tgt, ir_graph *irg); +void edges_notify_edge(ir_node *src, int pos, ir_node *tgt, ir_node *old_tgt, ir_graph *irg); /** - * Walks only over Block nodes in the graph. Has it's own visited - * flag, so that it can be interleaved with the other walker. + * Walks only over Block nodes in the graph. Uses the block visited + * flag, so that it can be interleaved with another walker. * * @param block the start block * @param pre the pre visit function @@ -216,7 +255,16 @@ extern void edges_notify_edge(ir_node *src, int pos, ir_node *tgt, ir_node *old_ */ void irg_block_edges_walk(ir_node *block, irg_walk_func *pre, irg_walk_func *post, void *env); -void edges_reset_private_data(ir_graph *irg, int offset, size_t size); +/** + * Reset the user's private data at offset 'offset' + * The user has to remember his offset and the size of his data! + * Caution: Using wrong values here can destroy other users private data! + * + * @param irg the IR graph to operate on + * @param offset offset of the private data inside the edge + * @param size length of the private data inside the edge + */ +void edges_reset_private_data(ir_graph *irg, int offset, unsigned size); /************************************************************************/ /* End Old Interface */