/** query wether a set of graph state flags are activated */
FIRM_API int is_irg_state(const ir_graph *irg, ir_graph_state_t state);
-/** Normalization: Move Proj nodes into the same block as its predecessors */
-FIRM_API void normalize_proj_nodes(ir_graph *irg);
-
/** Set a description for local value n. */
FIRM_API void set_irg_loc_description(ir_graph *irg, int n, void *description);
/* set the current graph (this is important for several firm functions) */
current_ir_graph = irg;
- /* Normalize proj nodes. */
- normalize_proj_nodes(irg);
-
/* we do this before critical edge split. As this produces less returns,
because sometimes (= 164.gzip) multiple returns are slower */
normalize_n_returns(irg);
irg->fp_model = model;
}
-/**
- * walker Start->End: places Proj nodes into the same block
- * as it's predecessors
- *
- * @param n the node
- * @param env ignored
- */
-static void normalize_proj_walker(ir_node *n, void *env)
-{
- (void) env;
- if (is_Proj(n)) {
- ir_node *pred = get_Proj_pred(n);
- ir_node *block = get_nodes_block(pred);
-
- set_nodes_block(n, block);
- }
-}
-
-/* move Proj nodes into the same block as its predecessors */
-void normalize_proj_nodes(ir_graph *irg)
-{
- irg_walk_graph(irg, NULL, normalize_proj_walker, NULL);
- set_irg_outs_inconsistent(irg);
-}
-
/* set a description for local value n */
void set_irg_loc_description(ir_graph *irg, int n, void *description)
{
a_env.end_block = get_irg_end_block(irg);
a_env.pairs = NULL;
- /* Move Proj's into the same block as their args,
- else we would assign the result to wrong blocks */
- normalize_proj_nodes(irg);
-
/* critical edges MUST be removed */
remove_critical_cf_edges(irg);