but the graph has been changed since. */
} irg_outs_state;
-/** state: extended basic block state. */
-typedef enum {
- ir_extblk_info_none = 0, /**< No extended basic block information is constructed. Default. */
- ir_extblk_info_valid = 1, /**< Extended basic block information is valid. */
- ir_extblk_info_invalid = 2 /**< Extended basic block information is constructed but invalid. */
-} irg_extblk_info_state;
-FIRM_API irg_extblk_info_state get_irg_extblk_state(const ir_graph *irg);
-FIRM_API void set_irg_extblk_inconsistent(ir_graph *irg);
-
/** state: callee_information_state
* Call nodes contain a list of possible callees. This list must be
* computed by an analysis.
extbb->visited = 0;
}
- irg->extblk_state = ir_extblk_info_valid;
+ set_irg_state(irg, IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
}
/* free all extended block info. */
xfree(irg->extbb_obst);
irg->extbb_obst = NULL;
}
- irg->extblk_state = ir_extblk_info_none;
+ clear_irg_state(irg, IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
}
/* Return the extended block of a node. */
extbb->visited = 0;
}
- irg->extblk_state = ir_extblk_info_valid;
+ set_irg_state(irg, IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
}
if (blocks_removed) {
/* invalidate analysis info */
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
- set_irg_extblk_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+ | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
}
return blocks_removed;
}
size_t i;
ir_entity *ent = get_irg_entity(irg);
- if (get_irg_extblk_state(irg) != ir_extblk_info_valid)
+ if (!is_irg_state(irg, IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS))
compute_extbb(irg);
construct_extblock_lists(irg);
set_irp_typeinfo_inconsistent(); /* there is a new graph with typeinfo_none. */
res->callee_info_state = irg_callee_info_none;
res->class_cast_state = ir_class_casts_transitive;
- res->extblk_state = ir_extblk_info_none;
res->execfreq_state = exec_freq_none;
res->fp_model = fp_model_precise;
res->mem_disambig_opt = aa_opt_inherited;
res->phase_state = phase_building;
res->irg_pinned_state = op_pin_state_pinned;
- res->extblk_state = ir_extblk_info_none;
res->fp_model = fp_model_precise;
/* value table for global value numbering for optimizing use in iropt.c */
res->phase_state = irg->phase_state;
res->irg_pinned_state = irg->irg_pinned_state;
- res->extblk_state = ir_extblk_info_none;
res->fp_model = irg->fp_model;
new_identities(res);
return _get_irg_pinned(irg);
}
-irg_extblk_info_state (get_irg_extblk_state)(const ir_graph *irg)
-{
- return _get_irg_extblk_state(irg);
-}
-
-void (set_irg_extblk_inconsistent)(ir_graph *irg)
-{
- _set_irg_extblk_inconsistent(irg);
-}
-
void (set_irg_pinned)(ir_graph *irg, op_pin_state p)
{
_set_irg_pinned(irg, p);
return irg->irg_pinned_state;
}
-static inline irg_extblk_info_state _get_irg_extblk_state(const ir_graph *irg)
-{
- return irg->extblk_state;
-}
-
-static inline void _set_irg_extblk_inconsistent(ir_graph *irg)
-{
- if (irg->extblk_state == ir_extblk_info_valid)
- irg->extblk_state = ir_extblk_info_invalid;
-}
-
static inline void _set_irg_pinned(ir_graph *irg, op_pin_state p)
{
irg->irg_pinned_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_extblk_state(irg) _get_irg_extblk_state(irg)
-#define set_irg_extblk_inconsistent(irg) _set_irg_extblk_inconsistent(irg)
#define set_irg_pinned(irg, p) _set_irg_pinned(irg, p)
#define get_irg_callee_info_state(irg) _get_irg_callee_info_state(irg)
#define set_irg_callee_info_state(irg, s) _set_irg_callee_info_state(irg, s)
ir_typeinfo_state typeinfo_state; /**< Validity of type information. */
irg_callee_info_state callee_info_state; /**< Validity of callee information. */
ir_class_cast_state class_cast_state; /**< Kind of cast operations in code. */
- irg_extblk_info_state extblk_state; /**< State of extended basic block info. */
exec_freq_state execfreq_state; /**< Execution frequency state. */
unsigned mem_disambig_opt; /**< Options for the memory disambiguator. */
unsigned fp_model; /**< floating point model of the graph. */
if (env->flags & CF_CHANGED) {
/* control flow changed, dominance info is invalid */
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
- set_irg_extblk_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+ | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
}
edges_deactivate(irg);
}
set_irg_callee_info_state(irg, irg_callee_info_inconsistent);
/* Exception control flow might have changed / new block might have added. */
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
- set_irg_extblk_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+ | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
/* Calls might be removed/added. */
set_trouts_inconsistent();
if (n > 0) {
/* lowering might create new blocks, so be sure to handle this */
- set_irg_extblk_inconsistent(irg);
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+ | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
edges_deactivate(irg);
}
}
/* Cleanup, verify the graph. */
ir_free_resources(irg, resources);
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
- set_irg_extblk_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+ | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
}
DEL_ARR_F(env.muxes);
}
if (env.changed) {
/* control flow changed */
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
- set_irg_extblk_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+ | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
}
}
if (!changed)
break;
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
- set_irg_extblk_inconsistent(irg);
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_ENTITY_USAGE);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+ | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS
+ | IR_GRAPH_STATE_CONSISTENT_ENTITY_USAGE);
}
/* assert due to collect_nodes:
irg_block_walk_graph(irg, NULL, walk_critical_cf_edges, &env);
if (env.changed) {
/* control flow changed */
- set_irg_extblk_inconsistent(irg);
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+ | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
}
}
if (res) {
/* control flow changed */
- set_irg_extblk_inconsistent(irg);
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+ | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
/* Calls might be removed. */
set_trouts_inconsistent();
assert(get_irg_phase_state(irg) != phase_building);
assert(get_irg_pinned(irg) == op_pin_state_pinned);
assert(get_irg_pinned(called_graph) == op_pin_state_pinned);
- set_irg_extblk_inconsistent(irg);
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+ | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS
+ | IR_GRAPH_STATE_CONSISTENT_ENTITY_USAGE);
set_irg_callee_info_state(irg, irg_callee_info_inconsistent);
clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_ENTITY_USAGE);
edges_deactivate(irg);
INVALIDATE(IR_GRAPH_STATE_CONSISTENT_OUT_EDGES, edges_deactivate)
INVALIDATE(IR_GRAPH_STATE_CONSISTENT_LOOPINFO, nop)
INVALIDATE(IR_GRAPH_STATE_CONSISTENT_ENTITY_USAGE, nop)
- INVALIDATE(IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS, set_irg_extblk_inconsistent)
+ INVALIDATE(IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS, nop)
remove_End_Bads_and_doublets(get_irg_end(irg));
* a new Block was added, so dominator, outs and loop are inconsistent,
* trouts and callee-state should be still valid
*/
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
- set_irg_extblk_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+ | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
}
/* Create a graph pass. */
| IR_GRAPH_STATE_ONE_RETURN
| IR_GRAPH_STATE_CONSISTENT_OUTS
| IR_GRAPH_STATE_NO_UNREACHABLE_CODE
- | IR_GRAPH_STATE_NO_BADS);
- set_irg_extblk_inconsistent(irg); /* may not be needed */
+ | IR_GRAPH_STATE_NO_BADS
+ | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
}
/* Create a graph pass. */
assert(env->n_tail_calls > 0);
/* we add new blocks and change the control flow */
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
- set_irg_extblk_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+ | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
/* calls are removed */
set_trouts_inconsistent();
/* tail recursion was done, all info is invalid */
clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
- | IR_GRAPH_STATE_CONSISTENT_LOOPINFO);
- set_irg_extblk_inconsistent(irg);
+ | IR_GRAPH_STATE_CONSISTENT_LOOPINFO
+ | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
set_trouts_inconsistent();
set_irg_callee_info_state(irg, irg_callee_info_inconsistent);