X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firedges_t.h;h=9aca77330d1582d1d25cad22dbe93bd8a5e623e4;hb=f9d25133f86594ca2b1f33fb0b41a591ecc9b914;hp=613c8494c44c39d2e5bbce3f9c4ed0f53e0bb2d1;hpb=3fc3581455283da528a83ae84bce579992182c55;p=libfirm diff --git a/ir/ir/iredges_t.h b/ir/ir/iredges_t.h index 613c8494c..9aca77330 100644 --- a/ir/ir/iredges_t.h +++ b/ir/ir/iredges_t.h @@ -195,6 +195,32 @@ void edges_node_deleted(ir_node *old, ir_graph *irg); void edges_invalidate(ir_node *irn, ir_graph *irg); +/** + * 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. + */ +int 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) +{ + /* Get the size of the edge. */ + size_t size = + is_Block(edge->src) ? sizeof(ir_block_edge_t) : sizeof(ir_edge_t); + + return (void *) ((char *) edge + size + ofs); +} + /** * Initialize the out edges. * This must be called before firm is initialized. @@ -207,6 +233,7 @@ extern void init_edges(void); #define get_block_succ_next(irn,last) _get_block_succ_next(irn, last) #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 edges_activated(irg) _edges_activated(irg) #define edges_assure(irg) _edges_assure(irg) @@ -223,6 +250,7 @@ extern void init_edges(void); #define get_irn_out_edge_next(irn,last) NULL #define get_edge_src_irn(edge) NULL #define get_edge_src_pos(edge) -1 +#define get_edge_private_data(edge,ofs) NULL #define edges_activated(irg) 0 #define edges_assure(irg)