* An edge.
*/
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. */
- unsigned present : 1; /**< Used by the verifier. Don't rely on its content. */
- unsigned kind : 4; /**< The kind of the edge. */
- struct list_head list; /**< The list head to queue all out edges at a node. */
+ 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. */
+ unsigned present : 1; /**< Used by the verifier. Don't rely on its content. */
+ unsigned kind : 4; /**< The kind of the edge. */
+ struct list_head list; /**< The list head to queue all out edges at a node. */
#ifdef DEBUG_libfirm
- long src_nr; /**< The node number of the source node. */
- long edge_nr; /**< A unique number identifying the edge. */
+ long src_nr; /**< The node number of the source node. */
+ long edge_nr; /**< A unique number identifying the edge. */
#endif
};
*/
static inline const ir_edge_t *_get_irn_out_edge_first_kind(const ir_node *irn, ir_edge_kind_t kind)
{
- const struct list_head *head = _get_irn_outs_head(irn, kind);
+ const struct list_head *head;
+ assert(edges_activated_kind(get_irn_irg(irn), kind));
+ head = _get_irn_outs_head(irn, kind);
return list_empty(head) ? NULL : list_entry(head->next, ir_edge_t, list);
}
*/
void edges_node_deleted(ir_node *old, ir_graph *irg);
+/**
+ * A node might be revivaled by CSE.
+ */
+void edges_node_revival(ir_node *node, ir_graph *irg);
+
void edges_invalidate_kind(ir_node *irn, ir_edge_kind_t kind, ir_graph *irg);
/**