* PURPOSE.
*/
-/*
- * Project: libFIRM
- * File name: ir/opt/escape_ana.c
- * Purpose: escape analysis and optimization
- * Author: Michael Beck
- * Modified by:
- * Created: 03.11.2005
- * CVS-ID: $Id$
- * Copyright: (c) 1999-2005 Universität Karlsruhe
- */
-
/**
- * @file escape_ana.c
- *
- * A fast and simple Escape analysis.
+ * @file
+ * @author Michael Beck
+ * @date 03.11.2005
+ * @brief A fast and simple Escape analysis.
*/
#include "config.h"
} walk_env_t;
/** debug handle */
-DEBUG_ONLY(firm_dbg_module_t *dbgHandle;)
+DEBUG_ONLY(static firm_dbg_module_t *dbgHandle;)
/**
* checks whether a Raise leaves a method
mem = get_Alloc_mem(alloc);
blk = get_nodes_block(alloc);
- turn_into_tuple(alloc, pn_Alloc_max);
+ turn_into_tuple(alloc, pn_Alloc_max+1);
set_Tuple_pred(alloc, pn_Alloc_M, mem);
set_Tuple_pred(alloc, pn_Alloc_X_regular, new_r_Jmp(blk));
set_Tuple_pred(alloc, pn_Alloc_X_except, new_r_Bad(irg, mode_X));
sel = new_rd_simpleSel(dbg, get_nodes_block(alloc), get_irg_no_mem(irg), get_irg_frame(irg), ent);
mem = get_Alloc_mem(alloc);
- turn_into_tuple(alloc, pn_Alloc_max);
+ turn_into_tuple(alloc, pn_Alloc_max+1);
set_Tuple_pred(alloc, pn_Alloc_M, mem);
set_Tuple_pred(alloc, pn_Alloc_X_regular, new_r_Jmp(blk));
set_Tuple_pred(alloc, pn_Alloc_X_except, new_r_Bad(irg, mode_X));
/* if allocs were removed somehow */
if (env->nr_removed && env->nr_deads) {
/* exception control flow might have been changed */
- set_irg_doms_inconsistent(irg);
+ clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
}
}
static void transform_alloc_calls(ir_graph *irg, walk_env_t *env)
{
ir_node *call, *next, *mem, *blk;
- ir_type *ftp;
/* kill all dead allocs */
for (call = env->dead_allocs; call; call = next) {
mem = get_Call_mem(call);
blk = get_nodes_block(call);
- turn_into_tuple(call, pn_Call_max);
+ turn_into_tuple(call, pn_Call_max+1);
set_Tuple_pred(call, pn_Call_M, mem);
set_Tuple_pred(call, pn_Call_X_regular, new_r_Jmp(blk));
set_Tuple_pred(call, pn_Call_X_except, new_r_Bad(irg, mode_X));
}
/* convert all non-escaped heap allocs into frame variables */
- ftp = get_irg_frame_type(irg);
for (call = env->found_allocs; call; call = next) {
next = (ir_node*)get_irn_link(call);
}
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;