X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fescape_ana.c;h=d8d6d6db76cb208c1cc061aa559903cdb1821250;hb=f9bf701feb4c98b706a193041bbbae59c4a52bf7;hp=9d511794fe81e82ae024b536c1b6f504184a502b;hpb=0353e2153d9129e1cf630d8efba81f3b6d1e3d4e;p=libfirm diff --git a/ir/opt/escape_ana.c b/ir/opt/escape_ana.c index 9d511794f..d8d6d6db7 100644 --- a/ir/opt/escape_ana.c +++ b/ir/opt/escape_ana.c @@ -33,11 +33,12 @@ * * A fast and simple Escape analysis. */ - #ifdef HAVE_CONFIG_H # include "config.h" #endif +#include "iroptimize.h" + #include "irgraph_t.h" #include "irnode_t.h" #include "type_t.h" @@ -46,7 +47,6 @@ #include "analyze_irg_args.h" #include "irgmod.h" #include "ircons.h" -#include "escape_ana.h" #include "debug.h" /** @@ -344,7 +344,7 @@ static void find_allocation_calls(ir_node *call, void *ctx) */ static void transform_allocs(ir_graph *irg, walk_env_t *env) { - ir_node *alloc, *next, *mem, *sel, *size; + ir_node *alloc, *next, *mem, *sel, *size, *blk; ir_type *ftp, *atp, *tp; ir_entity *ent; char name[128]; @@ -358,8 +358,10 @@ static void transform_allocs(ir_graph *irg, walk_env_t *env) DBG((dbgHandle, LEVEL_1, "%+F allocation of %+F unused, deleted.\n", irg, alloc)); mem = get_Alloc_mem(alloc); + blk = get_nodes_block(alloc); turn_into_tuple(alloc, pn_Alloc_max); set_Tuple_pred(alloc, pn_Alloc_M, mem); + set_Tuple_pred(alloc, pn_Alloc_X_regular, new_r_Jmp(irg, blk)); set_Tuple_pred(alloc, pn_Alloc_X_except, new_r_Bad(irg)); ++env->nr_deads; @@ -404,6 +406,7 @@ static void transform_allocs(ir_graph *irg, walk_env_t *env) turn_into_tuple(alloc, pn_Alloc_max); set_Tuple_pred(alloc, pn_Alloc_M, mem); + set_Tuple_pred(alloc, pn_Alloc_X_regular, new_r_Jmp(irg, blk)); set_Tuple_pred(alloc, pn_Alloc_X_except, new_r_Bad(irg)); set_Tuple_pred(alloc, pn_Alloc_res, sel); @@ -438,8 +441,8 @@ static void transform_allocs(ir_graph *irg, walk_env_t *env) */ static void transform_alloc_calls(ir_graph *irg, walk_env_t *env) { - ir_node *call, *next, *mem, *size; - ir_type *ftp, *atp, *tp; + ir_node *call, *next, *mem, *blk; + ir_type *ftp; /* kill all dead allocs */ for (call = env->dead_allocs; call; call = next) { @@ -448,8 +451,10 @@ static void transform_alloc_calls(ir_graph *irg, walk_env_t *env) DBG((dbgHandle, LEVEL_1, "%+F allocation of %+F unused, deleted.\n", irg, call)); mem = get_Call_mem(call); + blk = get_nodes_block(call); turn_into_tuple(call, pn_Call_max); set_Tuple_pred(call, pn_Call_M_regular, mem); + set_Tuple_pred(call, pn_Call_X_regular, new_r_Jmp(irg, blk)); set_Tuple_pred(call, pn_Call_X_except, new_r_Bad(irg)); set_Tuple_pred(call, pn_Call_T_result, new_r_Bad(irg)); set_Tuple_pred(call, pn_Call_M_except, mem); @@ -505,6 +510,7 @@ void escape_analysis(int run_scalar_replace, check_alloc_entity_func callback) int i; struct obstack obst; walk_env_t *env, *elist; + (void) run_scalar_replace; if (get_irp_callee_info_state() != irg_callee_info_consistent) { assert(! "need callee info");