FIRM_API void irg_walk_edges(ir_node *start, irg_walk_func *pre,
irg_walk_func *post, void *env);
-/**
- * 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
- */
-FIRM_API void edges_reset_private_data(ir_graph *irg, int offset,
- unsigned size);
-
/** @} */
#include "end.h"
*/
static int edges_used = 0;
-/**
- * Summed size of all users private data
- */
-
-static size_t edges_private_size = 0;
-#define EDGE_SIZE (sizeof(ir_edge_t) + edges_private_size)
-
/**
* If set to 1, the list heads are checked every time an edge is changed.
*/
return (long)e;
}
-size_t edges_register_private_data(size_t n)
-{
- size_t res = edges_private_size;
-
- assert(!edges_used && "you cannot register private edge data, if edges have been initialized");
-
- edges_private_size += n;
- return res;
-}
-
-void edges_reset_private_data(ir_graph *irg, int offset, unsigned size)
-{
- irg_edge_info_t *info = get_irg_edge_info(irg, EDGE_KIND_NORMAL);
- ir_edge_t *edge;
- ir_edgeset_iterator_t iter;
-
- foreach_ir_edgeset(&info->edges, edge, iter) {
- memset(edge + sizeof(*edge) + offset, 0, size);
- }
-}
-
void edges_init_graph_kind(ir_graph *irg, ir_edge_kind_t kind)
{
if (edges_activated_kind(irg, kind)) {
ir_edge_t *edge;
if (list_empty(&info->free_edges)) {
- edge = (ir_edge_t*)obstack_alloc(&info->edges_obst, EDGE_SIZE);
+ edge = OALLOC(&info->edges_obst, ir_edge_t);
} else {
edge = list_entry(info->free_edges.next, ir_edge_t, list);
list_del(&edge->list);
edge->kind = kind;
edge->list.next = NULL;
edge->list.prev = NULL;
- memset(edge + 1, 0, edges_private_size);
new_edge = ir_edgeset_insert(edges, edge);
if (new_edge != edge) {
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;
#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