X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firedges_t.h;h=6820ce6532032eb0c9bc4b4512d0d8958405365b;hb=031078da41d1889efcb12250ca35a0124b30cefa;hp=ab918dd07dba5cc06c7e0258a64ca727c101e66a;hpb=83e6c267e052f2ca4392e1267f2382baaf7083c5;p=libfirm diff --git a/ir/ir/iredges_t.h b/ir/ir/iredges_t.h index ab918dd07..6820ce653 100644 --- a/ir/ir/iredges_t.h +++ b/ir/ir/iredges_t.h @@ -37,7 +37,14 @@ #include "iredgekinds.h" #include "iredges.h" -#define DBG_EDGES "firm.ir.edges" +#define get_irn_n_edges_kind(irn, kind) get_irn_n_edges_kind_(irn, kind) +#define get_edge_src_irn(edge) get_edge_src_irn_(edge) +#define get_edge_src_pos(edge) get_edge_src_pos_(edge) +#define get_irn_out_edge_next(irn, last, kind) get_irn_out_edge_next_(irn, last, kind) +#define get_irn_n_edges(irn) get_irn_n_edges_kind_(irn, EDGE_KIND_NORMAL) +#define get_irn_out_edge_first(irn) get_irn_out_edge_first_kind_(irn, EDGE_KIND_NORMAL) +#define get_block_succ_first(irn) get_irn_out_edge_first_kind_(irn, EDGE_KIND_BLOCK) +#define get_block_succ_next(irn, last) get_irn_out_edge_next_(irn, last, EDGE_KIND_BLOCK) /** * An edge. @@ -45,9 +52,9 @@ struct ir_edge_t { ir_node *src; /**< The source node of the edge. */ int pos; /**< The position of the edge at @p src. */ - unsigned invalid : 1; /**< edges that are removed are marked invalid. */ +#ifdef DEBUG_libfirm unsigned present : 1; /**< Used by the verifier. Don't rely on its content. */ - unsigned kind : 4; /**< The kind of the edge. */ +#endif struct list_head list; /**< The list head to queue all out edges at a node. */ }; @@ -99,11 +106,11 @@ static inline const ir_edge_t *get_irn_out_edge_first_kind_(const ir_node *irn, * @param last The last out edge you have seen. * @return The next out edge in @p irn 's out list after @p last. */ -static inline const ir_edge_t *get_irn_out_edge_next_(const ir_node *irn, const ir_edge_t *last) +static inline const ir_edge_t *get_irn_out_edge_next_(const ir_node *irn, const ir_edge_t *last, ir_edge_kind_t kind) { struct list_head *next = last->list.next; const struct list_head *head - = &get_irn_edge_info_const(irn, (ir_edge_kind_t)last->kind)->outs_head; + = &get_irn_edge_info_const(irn, kind)->outs_head; return next == head ? NULL : list_entry(next, ir_edge_t, list); } @@ -122,6 +129,12 @@ static inline int edges_activated_kind_(const ir_graph *irg, ir_edge_kind_t kind return get_irg_edge_info_const(irg, kind)->activated; } +static inline int edges_activated_(const ir_graph *irg) +{ + return edges_activated_kind(irg, EDGE_KIND_NORMAL) + && edges_activated_kind(irg, EDGE_KIND_BLOCK); +} + /** * Assure, that the edges information is present for a certain graph. * @param irg The graph. @@ -143,28 +156,6 @@ void edges_node_revival(ir_node *node); void edges_invalidate_kind(ir_node *irn, ir_edge_kind_t kind); -/** - * Register additional memory in an edge. - * This must be called before Firm is initialized. - * @param n Number of bytes you need. - * @return A number you have to keep and to pass - * edges_get_private_data() - * to get a pointer to your data. - */ -size_t edges_register_private_data(size_t n); - -/** - * Get a pointer to the private data you registered. - * @param edge The edge. - * @param ofs The number, you obtained with - * edges_register_private_data(). - * @return A pointer to the private data. - */ -static inline void *get_edge_private_data_(const ir_edge_t *edge, int ofs) -{ - return (void *) ((char *) edge + sizeof(edge[0]) + ofs); -} - static inline ir_node *get_edge_src_irn_(const ir_edge_t *edge) { return edge->src; @@ -200,32 +191,7 @@ void edges_invalidate_all(ir_node *irn); */ void edges_dump_kind(ir_graph *irg, ir_edge_kind_t kind); -/** - * Notify normal and block edges. - */ -void edges_notify_edge(ir_node *src, int pos, ir_node *tgt, - ir_node *old_tgt, ir_graph *irg); - -#define get_irn_n_edges_kind(irn, kind) get_irn_n_edges_kind_(irn, kind) -#define get_edge_src_irn(edge) get_edge_src_irn_(edge) -#define get_edge_src_pos(edge) get_edge_src_pos_(edge) -#define get_edge_private_data(edge, ofs) get_edge_private_data_(edge,ofs) -#define get_irn_out_edge_next(irn, last) get_irn_out_edge_next_(irn, last) - -#ifndef get_irn_n_edges -#define get_irn_n_edges(irn) get_irn_n_edges_kind_(irn, EDGE_KIND_NORMAL) -#endif - -#ifndef get_irn_out_edge_first -#define get_irn_out_edge_first(irn) get_irn_out_edge_first_kind_(irn, EDGE_KIND_NORMAL) -#endif - -#ifndef get_block_succ_first -#define get_block_succ_first(irn) get_irn_out_edge_first_kind_(irn, EDGE_KIND_BLOCK) -#endif - -#ifndef get_block_succ_next -#define get_block_succ_next(irn, last) get_irn_out_edge_next_(irn, last) -#endif +void edges_notify_edge(ir_node *src, int pos, ir_node *tgt, ir_node *old_tgt, + ir_graph *irg); #endif