struct ir_node {
/* ------- Basics of the representation ------- */
firm_kind kind; /**< Distinguishes this node from others. */
- unsigned node_idx; /**< The node index of this node in its graph. */
+ unsigned node_idx; /**< The node index of this node in its graph. */
ir_op *op; /**< The Opcode of this node. */
ir_mode *mode; /**< The Mode of this node. */
struct ir_node **in; /**< The array of predecessors / operands. */
ir_visited_t visited; /**< The visited counter for walks of the graph. */
void *link; /**< To attach additional information to the node, e.g.
- used while construction to link Phi0 nodes and
- during optimization to link to nodes that
+ used during optimization to link to nodes that
shall replace a node. */
/* ------- Fields for optimizations / analysis information ------- */
ir_def_use_edge *out; /**< array of def-use edges. */
/* ------- For analyses -------- */
ir_loop *loop; /**< the loop the node is in. Access routines in irloop.h */
struct ir_node **deps; /**< Additional dependencies induced by state. */
+ void *backend_info;
irn_edges_info_t edge_info; /**< Everlasting out edges. */
/* ------- Opcode depending fields -------- */
attr attr; /**< The set of attributes of this node. Depends on opcode.
* Edge info to put into an irg.
*/
typedef struct _irg_edge_info_t {
- ir_edgeset_t edges;
- struct obstack edges_obst;
- unsigned allocated : 1;
- unsigned activated : 1; /**< set if edges are activated for the graph. */
+ ir_edgeset_t edges; /**< A set containing all edges of the current graph. */
+ struct list_head free_edges; /**< list of all free edges. */
+ struct obstack edges_obst; /**< Obstack, where edges are allocated on. */
+ unsigned allocated : 1; /**< Set if edges are allocated on the obstack. */
+ unsigned activated : 1; /**< Set if edges are activated for the graph. */
} irg_edge_info_t;
typedef irg_edge_info_t irg_edges_info_t[EDGE_KIND_LAST];
unsigned fp_model; /**< floating point model of the graph. */
/* -- Fields for construction -- */
-#if USE_EXPLICIT_PHI_IN_STACK
- struct Phi_in_stack *Phi_in_stack; /**< Needed for automatic Phi construction. */
-#endif
int n_loc; /**< Number of local variables in this
procedure including procedure parameters. */
void **loc_descriptions; /**< Storage for local variable descriptions. */
unsigned *caller_isbe; /**< For callgraph analysis: raw bitset if backedge info calculated. */
cg_callee_entry **callees; /**< For callgraph analysis: list of callee calls */
unsigned *callee_isbe; /**< For callgraph analysis: raw bitset if backedge info calculated. */
+ ir_loop *l; /**< For callgraph analysis. */
int callgraph_loop_depth; /**< For callgraph analysis */
int callgraph_recursion_depth; /**< For callgraph analysis */
double method_execution_frequency; /**< For callgraph analysis */
- ir_loop *l; /**< For callgraph analysis. */
/* -- Fields for Walking the graph -- */
ir_visited_t visited; /**< this flag is an identifier for
#endif
#ifndef NDEBUG
- ir_resources_t reserved_resources;
+ ir_resources_t reserved_resources; /**< Bitset for tracking used local resources. */
#endif
};
#ifdef DEBUG_libfirm
long max_node_nr; /**< to generate unique numbers for nodes. */
#endif
+#ifndef NDEBUG
+ ir_resources_t reserved_resources; /**< Bitset for tracking used global resources. */
+#endif
};
#endif