outs_inconsistent /**< Outs have been computed, memory is still allocated,
but the graph has been changed since. */
} irg_outs_state;
-FIRM_API irg_outs_state get_irg_outs_state(const ir_graph *irg);
-FIRM_API void set_irg_outs_inconsistent(ir_graph *irg);
/** state: extended basic block state. */
typedef enum {
void *env)
{
assert(node);
- if (get_irg_outs_state(current_ir_graph) != outs_none) {
- inc_irg_visited (current_ir_graph);
+ ir_graph *irg = get_irn_irg(node);
+ if (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS)) {
+ inc_irg_visited (irg);
irg_out_walk_2(node, pre, post, env);
}
}
/* Update graph state */
assert(get_irg_phase_state(current_ir_graph) != phase_building);
- if (current_ir_graph->outs_state != outs_none)
- free_irg_outs(current_ir_graph);
+ free_irg_outs(current_ir_graph);
/* This first iteration counts the overall number of out edges and the
number of out edges for each node. */
/* Check how much memory we have used */
assert (end == (irg->outs + n_out_edges));
- current_ir_graph->outs_state = outs_consistent;
+ set_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS);
current_ir_graph = rem;
}
void assure_irg_outs(ir_graph *irg)
{
- if (get_irg_outs_state(irg) != outs_consistent)
+ if (! is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS))
compute_irg_outs(irg);
}
void free_irg_outs(ir_graph *irg)
{
/* current_ir_graph->outs_state = outs_none; */
- irg->outs_state = outs_none;
if (irg->outs) {
#ifdef DEBUG_libfirm
/* dump the out edges in a separate walk */
if ((flags & ir_dump_flag_out_edges)
- && (get_irg_outs_state(irg) != outs_none)) {
+ && (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS))) {
irg_out_walk(get_irg_start(irg), dump_out_edge, NULL, out);
}
}
/* update irg flags */
- set_irg_outs_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_LOOPINFO);
set_irg_loopinfo_inconsistent(irg);
}
res->additional_properties = mtp_property_inherited; /* inherited from type */
res->irg_pinned_state = op_pin_state_pinned;
- res->outs_state = outs_none;
res->dom_state = dom_none;
res->pdom_state = dom_none;
res->typeinfo_state = ir_typeinfo_none;
edges_deactivate(irg);
hook_free_graph(irg);
- if (irg->outs_state != outs_none)
- free_irg_outs(irg);
+ free_irg_outs(irg);
if (irg->frame_type)
free_type(irg->frame_type);
del_identities(irg);
return _get_irg_pinned(irg);
}
-irg_outs_state (get_irg_outs_state)(const ir_graph *irg)
-{
- return _get_irg_outs_state(irg);
-}
-
-void (set_irg_outs_inconsistent)(ir_graph *irg)
-{
- _set_irg_outs_inconsistent(irg);
-}
-
irg_extblk_info_state (get_irg_extblk_state)(const ir_graph *irg)
{
return _get_irg_extblk_state(irg);
return irg->irg_pinned_state;
}
-static inline irg_outs_state _get_irg_outs_state(const ir_graph *irg)
-{
- return irg->outs_state;
-}
-
-static inline void _set_irg_outs_inconsistent(ir_graph *irg)
-{
- if (irg->outs_state == outs_consistent)
- irg->outs_state = outs_inconsistent;
-}
-
static inline irg_extblk_info_state _get_irg_extblk_state(const ir_graph *irg)
{
return irg->extblk_state;
irg->dom_state = dom_inconsistent;
if (irg->pdom_state != dom_none)
irg->pdom_state = dom_inconsistent;
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
}
static inline irg_loopinfo_state _get_irg_loopinfo_state(const ir_graph *irg)
static inline void _set_irg_loopinfo_inconsistent(ir_graph *irg)
{
irg->loopinfo_state = (irg_loopinfo_state) (irg->loopinfo_state & ~loopinfo_valid);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_LOOPINFO);
}
static inline void _set_irg_pinned(ir_graph *irg, op_pin_state p)
#define get_irg_phase_state(irg) _get_irg_phase_state(irg)
#define set_irg_phase_state(irg, state) _set_irg_phase_state(irg, state)
#define get_irg_pinned(irg) _get_irg_pinned(irg)
-#define get_irg_outs_state(irg) _get_irg_outs_state(irg)
-#define set_irg_outs_inconsistent(irg) _set_irg_outs_inconsistent(irg)
#define get_irg_extblk_state(irg) _get_irg_extblk_state(irg)
#define set_irg_extblk_inconsistent(irg) _set_irg_extblk_inconsistent(irg)
#define get_irg_dom_state(irg) _get_irg_dom_state(irg)
memcpy((*pOld_in) + 1, in, sizeof(ir_node *) * arity);
/* update irg flags */
- set_irg_outs_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS);
set_irg_loopinfo_inconsistent(irg);
}
node->in[n + 1] = in;
/* update irg flags */
- set_irg_outs_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS);
set_irg_loopinfo_inconsistent(irg);
}
}
/* update irg flags */
- set_irg_outs_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS);
}
/* Set new keep-alives from old keep-alives, skipping irn */
ARR_RESIZE(ir_node *, end->in, (n - 1) + 1 + END_KEEPALIVE_OFFSET);
/* update irg flags */
- set_irg_outs_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS);
}
/* remove Bads, NoMems and doublets from the keep-alive set */
pset_new_destroy(&keeps);
if (changed) {
- set_irg_outs_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS);
}
}
ir_graph_state_t state;
irg_phase_state phase_state; /**< Compiler phase. */
op_pin_state irg_pinned_state; /**< Flag for status of nodes. */
- irg_outs_state outs_state; /**< Out edges. */
irg_dom_state dom_state; /**< Dominator state information. */
irg_dom_state pdom_state; /**< Post Dominator state information. */
ir_typeinfo_state typeinfo_state; /**< Validity of type information. */
/* -- states of and access to generated information -- */
irg_phase_state phase_state; /**< The state of construction. */
- irg_outs_state outs_state; /**< The state of out edges of ir nodes. */
+ irg_outs_state outs_state; /**< The state of out edges of type information. */
ir_node **ip_outedges; /**< A huge Array that contains all out edges
in interprocedural view. */
irg_outs_state trouts_state; /**< The state of out edges of type information. */
if (changed) {
edges_deactivate(irg);
- set_irg_outs_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS);
}
return changed;
if (changed) {
edges_deactivate(irg);
- set_irg_outs_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS);
clear_irg_state(irg, IR_GRAPH_STATE_NO_BAD_BLOCKS);
}
set_irg_state(irg, IR_GRAPH_STATE_NO_UNREACHABLE_BLOCKS);
return;
}
- if (get_irg_outs_state(irg) != outs_consistent)
+ if (is_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS))
compute_irg_outs(irg);
env.found_allocs = NULL;
// FIXME should not be necessary!
if (dom_inconsistent == get_irg_dom_state(irg))
clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
- if (outs_inconsistent == get_irg_outs_state(irg))
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS);
if (loopinfo_inconsistent == get_irg_loopinfo_state(irg))
clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_LOOPINFO);
if (ir_entity_usage_not_computed == get_irg_entity_usage_state(irg))
INVALIDATE(IR_GRAPH_STATE_ONE_RETURN, nop)
INVALIDATE(IR_GRAPH_STATE_CONSISTENT_DOMINANCE, set_irg_doms_inconsistent)
INVALIDATE(IR_GRAPH_STATE_CONSISTENT_POSTDOMINANCE, set_irg_postdoms_inconsistent)
- INVALIDATE(IR_GRAPH_STATE_CONSISTENT_OUTS, set_irg_outs_inconsistent)
+ INVALIDATE(IR_GRAPH_STATE_CONSISTENT_OUTS, nop)
INVALIDATE(IR_GRAPH_STATE_CONSISTENT_OUT_EDGES, edges_deactivate)
INVALIDATE(IR_GRAPH_STATE_CONSISTENT_LOOPINFO, set_irg_loopinfo_inconsistent)
INVALIDATE(IR_GRAPH_STATE_CONSISTENT_ENTITY_USAGE, deactivate_entity_usage)