{
struct list_head *next = last->list.next;
const struct list_head *head
- = &get_irn_edge_info_const(irn, last->kind)->outs_head;
+ = &get_irn_edge_info_const(irn, (ir_edge_kind_t)last->kind)->outs_head;
return next == head ? NULL : list_entry(next, ir_edge_t, list);
}
* @param irn The node.
* @return The number of edges pointing to this node.
*/
-static inline int get_irn_n_edges_kind_(const ir_node *irn, int kind)
+static inline int get_irn_n_edges_kind_(const ir_node *irn, ir_edge_kind_t kind)
{
return get_irn_edge_info_const(irn, kind)->out_count;
}
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;
return edge->pos;
}
+/**
+ * Returns the edge object of an outgoing edge at a node.
+ * @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.
+ */
+FIRM_API const ir_edge_t *get_irn_edge_kind(const ir_node *irn,
+ int pos, ir_edge_kind_t kind);
+
/**
* Initialize the out edges.
* This must be called before firm is initialized.
#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