X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fescape_ana.c;h=6f4acd963d4b02127e8505ecb722dc4480ab20d7;hb=a619ce99e40de4eb4481a590970a881e9f24627a;hp=106abe4b764e7f322cc6856f14e1c43799f66d77;hpb=f3e6f325b23d8b25323e491ce2eb675f5f2ba548;p=libfirm diff --git a/ir/opt/escape_ana.c b/ir/opt/escape_ana.c index 106abe4b7..6f4acd963 100644 --- a/ir/opt/escape_ana.c +++ b/ir/opt/escape_ana.c @@ -33,9 +33,7 @@ * * A fast and simple Escape analysis. */ -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif +#include "config.h" #include "iroptimize.h" @@ -49,6 +47,7 @@ #include "ircons.h" #include "irprintf.h" #include "debug.h" +#include "error.h" /** * walker environment @@ -93,16 +92,14 @@ static int is_method_leaving_raise(ir_node *raise) /* Hmm: no ProjX from a Raise? This should be a verification * error. For now we just assert and return. */ - assert(! "No ProjX after Raise found"); - return 1; + panic("No ProjX after Raise found"); } if (get_irn_n_outs(proj) != 1) { /* Hmm: more than one user of ProjX: This is a verification * error. */ - assert(! "More than one user of ProjX"); - return 1; + panic("More than one user of ProjX"); } n = get_irn_out(proj, 0); @@ -119,10 +116,11 @@ static int is_method_leaving_raise(ir_node *raise) * returns an Alloc node if the node adr Select * from one */ -static ir_node *is_depend_alloc(ir_node *adr) { +static ir_node *is_depend_alloc(ir_node *adr) +{ ir_node *alloc; - if (get_irn_op(adr) != op_Sel) + if (!is_Sel(adr)) return NULL; /* should be a simple Sel */ @@ -130,7 +128,7 @@ static ir_node *is_depend_alloc(ir_node *adr) { return NULL; alloc = skip_Proj(get_Sel_ptr(adr)); - if (get_irn_op(alloc) != op_Alloc) + if (!is_Alloc(alloc)) return NULL; /* hmm, we depend on this Alloc */ @@ -143,7 +141,8 @@ static ir_node *is_depend_alloc(ir_node *adr) { * determine if a value calculated by n "escape", ie * is stored somewhere we could not track */ -static int can_escape(ir_node *n) { +static int can_escape(ir_node *n) +{ int i, j, k; /* should always be pointer mode or we made some mistake */ @@ -394,7 +393,7 @@ static void transform_allocs(ir_graph *irg, walk_env_t *env) 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_regular, new_r_Jmp(blk)); set_Tuple_pred(alloc, pn_Alloc_X_except, new_r_Bad(irg)); ++env->nr_deads; @@ -404,7 +403,7 @@ static void transform_allocs(ir_graph *irg, walk_env_t *env) ftp = get_irg_frame_type(irg); for (alloc = env->found_allocs; alloc; alloc = next) { next = get_irn_link(alloc); - size = get_Alloc_size(alloc); + size = get_Alloc_count(alloc); atp = get_Alloc_type(alloc); tp = NULL; @@ -435,13 +434,12 @@ static void transform_allocs(ir_graph *irg, walk_env_t *env) name[sizeof(name) - 1] = '\0'; ent = new_d_entity(ftp, new_id_from_str(name), get_Alloc_type(alloc), dbg); - sel = new_rd_simpleSel(dbg, irg, get_nodes_block(alloc), - get_irg_no_mem(irg), get_irg_frame(irg), ent); + 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); 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_regular, new_r_Jmp(blk)); set_Tuple_pred(alloc, pn_Alloc_X_except, new_r_Bad(irg)); set_Tuple_pred(alloc, pn_Alloc_res, sel); @@ -488,11 +486,10 @@ static void transform_alloc_calls(ir_graph *irg, walk_env_t *env) 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); + 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)); + set_Tuple_pred(call, pn_Call_T_result, new_r_Bad(irg)); set_Tuple_pred(call, pn_Call_P_value_res_base, new_r_Bad(irg)); ++env->nr_deads; @@ -563,7 +560,7 @@ void escape_analysis(int run_scalar_replace, check_alloc_entity_func callback) obstack_init(&obst); elist = NULL; - env = obstack_alloc(&obst, sizeof(*env)); + env = OALLOC(&obst, walk_env_t); env->found_allocs = NULL; env->dead_allocs = NULL; env->callback = callback; @@ -589,7 +586,7 @@ void escape_analysis(int run_scalar_replace, check_alloc_entity_func callback) elist = env; - env = obstack_alloc(&obst, sizeof(*env)); + env = OALLOC(&obst, walk_env_t); env->found_allocs = NULL; env->dead_allocs = NULL; env->callback = callback;