X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firprofile.c;h=83de892651a6213cc95f38826a5df4c27abcc5e9;hb=b4647d67ab7885d5da32c2a30242fbc4ed93d81b;hp=e47cc5dbe0d8f06a7cf9658e7bc831c083f9a886;hpb=e9788b1182b08e303f11c0df45a8a2f72955e520;p=libfirm diff --git a/ir/ir/irprofile.c b/ir/ir/irprofile.c index e47cc5dbe..83de89265 100644 --- a/ir/ir/irprofile.c +++ b/ir/ir/irprofile.c @@ -56,8 +56,8 @@ typedef struct loc_entry { unsigned int lineno; /**< line number */ } loc_entry; -typedef struct _block_id_walker_data_t { - tarval **array; /**< the entity the holds the block counts */ +typedef struct block_id_walker_data_t { + ir_tarval **array; /**< the entity the holds the block counts */ unsigned int id; /**< current block id number */ ir_node *symconst; /**< the SymConst representing array */ pmap *fname_map; /**< set containing all found filenames */ @@ -66,7 +66,7 @@ typedef struct _block_id_walker_data_t { unsigned flags; /**< profile flags */ } block_id_walker_data_t; -typedef struct _execcount_t { +typedef struct execcount_t { unsigned long block; unsigned int count; } execcount_t; @@ -126,12 +126,12 @@ static void instrument_block(ir_node *bb, ir_node *address, unsigned int id) cnst = new_r_Const_long(irg, mode_Iu, get_mode_size_bytes(mode_Iu) * id); offset = new_r_Add(bb, address, cnst, get_modeP_data()); load = new_r_Load(bb, unknown, offset, mode_Iu, 0); - projm = new_r_Proj(bb, load, mode_M, pn_Load_M); - proji = new_r_Proj(bb, load, mode_Iu, pn_Load_res); + projm = new_r_Proj(load, mode_M, pn_Load_M); + proji = new_r_Proj(load, mode_Iu, pn_Load_res); cnst = new_r_Const_long(irg, mode_Iu, 1); add = new_r_Add(bb, proji, cnst, mode_Iu); store = new_r_Store(bb, projm, offset, add, 0); - projm = new_r_Proj(bb, store, mode_M, pn_Store_M); + projm = new_r_Proj(store, mode_M, pn_Store_M); set_irn_link(bb, projm); set_irn_link(projm, load); } @@ -180,7 +180,7 @@ static void add_constructor(ir_entity *method) ir_entity *ptr = new_entity(constructors, ide, ptr_type); ir_graph *irg = get_const_code_irg(); ir_node *val = new_rd_SymConst_addr_ent(NULL, irg, mode_P_code, - method, NULL); + method); set_entity_compiler_generated(ptr, 1); set_entity_linkage(ptr, IR_LINKAGE_CONSTANT); @@ -191,7 +191,7 @@ static void add_constructor(ir_entity *method) * Generates a new irg which calls the initializer * * Pseudocode: - * void __firmprof_initializer(void) { __init_firmprof(ent_filename, bblock_id, bblock_counts, n_blocks); } + * void __firmprof_initializer(void) { __init_firmprof(ent_filename, bblock_id, bblock_counts, n_blocks); } */ static ir_graph *gen_initializer_irg(ir_entity *ent_filename, ir_entity *bblock_id, ir_entity *bblock_counts, int n_blocks) { @@ -241,7 +241,7 @@ static ir_graph *gen_initializer_irg(ir_entity *ent_filename, ir_entity *bblock_ ins[3] = new_r_Const_long(irg, mode_Iu, n_blocks); call = new_r_Call(bb, get_irg_initial_mem(irg), symconst, 4, ins, init_type); - ret = new_r_Return(bb, new_r_Proj(bb, call, mode_M, pn_Call_M), 0, NULL); + ret = new_r_Return(bb, new_r_Proj(call, mode_M, pn_Call_M), 0, NULL); mature_immBlock(bb); add_immBlock_pred(get_irg_end_block(irg), ret); @@ -268,17 +268,17 @@ static void create_location_data(dbg_info *dbg, block_id_walker_data_t *wd) if (! entry) { static unsigned nr = 0; - ident *id; - char buf[128]; - ir_type *arr; - int i, len = strlen(fname) + 1; - tarval **tarval_string; + ident *id; + char buf[128]; + ir_type *arr; + int i, len = strlen(fname) + 1; + ir_tarval **tarval_string; - snprintf(buf, sizeof(buf), "firm_name_arr.%d", nr); + snprintf(buf, sizeof(buf), "firm_name_arr.%u", nr); arr = new_type_array(1, wd->tp_char); set_array_bounds_int(arr, 0, 0, len); - snprintf(buf, sizeof(buf), "__firm_name.%d", nr++); + snprintf(buf, sizeof(buf), "__firm_name.%u", nr++); id = new_id_from_str(buf); ent = new_entity(get_glob_type(), id, arr); set_entity_ld_ident(ent, id); @@ -286,7 +286,7 @@ static void create_location_data(dbg_info *dbg, block_id_walker_data_t *wd) pmap_insert(wd->fname_map, (void *)fname, ent); /* initialize file name string constant */ - tarval_string = ALLOCAN(tarval*, len); + tarval_string = ALLOCAN(ir_tarval*, len); for (i = 0; i < len; ++i) { tarval_string[i] = new_tarval_from_long(fname[i], mode_Bs); } @@ -321,34 +321,32 @@ static void block_id_walker(ir_node *bb, void *data) ++wd->id; } -#define IDENT(x) new_id_from_chars(x, sizeof(x) - 1) +#define IDENT(x) new_id_from_chars(x, sizeof(x) - 1) ir_graph *ir_profile_instrument(const char *filename, unsigned flags) { int n, i; int n_blocks = 0; - ir_entity *bblock_id; - ir_entity *bblock_counts; - ir_entity *ent_filename; - ir_entity *ent_locations = NULL; - ir_entity *loc_lineno = NULL; - ir_entity *loc_name = NULL; - ir_entity *ent; - ir_type *array_type; - ir_type *uint_type; - ir_type *string_type; - ir_type *character_type; - ir_type *loc_type = NULL; - ir_type *charptr_type; - ir_type *gtp; - ir_node *start_block; - tarval **tarval_array; - tarval **tarval_string; - tarval *tv; + ir_entity *bblock_id; + ir_entity *bblock_counts; + ir_entity *ent_filename; + ir_entity *ent_locations = NULL; + ir_entity *loc_lineno = NULL; + ir_entity *loc_name = NULL; + ir_entity *ent; + ir_type *array_type; + ir_type *uint_type; + ir_type *string_type; + ir_type *character_type; + ir_type *loc_type = NULL; + ir_type *charptr_type; + ir_type *gtp; + ir_tarval **tarval_array; + ir_tarval **tarval_string; + ir_tarval *tv; int filename_len = strlen(filename)+1; ident *cur_ident; unsigned align_l, align_n, size; - ir_graph *rem; block_id_walker_data_t wd; symconst_symbol sym; @@ -422,7 +420,7 @@ ir_graph *ir_profile_instrument(const char *filename, unsigned flags) } /* initialize count array */ - NEW_ARR_A(tarval *, tarval_array, n_blocks); + NEW_ARR_A(ir_tarval *, tarval_array, n_blocks); tv = get_mode_null(mode_Iu); for (i = 0; i < n_blocks; ++i) { tarval_array[i] = tv; @@ -430,7 +428,7 @@ ir_graph *ir_profile_instrument(const char *filename, unsigned flags) set_array_entity_values(bblock_counts, tarval_array, n_blocks); /* initialize function name string constant */ - tarval_string = ALLOCAN(tarval*, filename_len); + tarval_string = ALLOCAN(ir_tarval*, filename_len); for (i = 0; i < filename_len; ++i) { tarval_string[i] = new_tarval_from_long(filename[i], mode_Bs); } @@ -448,20 +446,17 @@ ir_graph *ir_profile_instrument(const char *filename, unsigned flags) } for (n = get_irp_n_irgs() - 1; n >= 0; --n) { - ir_graph *irg = get_irp_irg(n); - int i; - ir_node *endbb = get_irg_end_block(irg); - fix_env env; - - set_current_ir_graph(irg); + ir_graph *irg = get_irp_irg(i); + ir_node *endbb = get_irg_end_block(irg); + int i; + fix_env env; /* generate a symbolic constant pointing to the count array */ sym.entity_p = bblock_counts; wd.symconst = new_r_SymConst(irg, mode_P_data, sym, symconst_addr_ent); irg_block_walk_graph(irg, block_id_walker, NULL, &wd); - start_block = get_irg_start_block(irg); - env.end_block = get_irg_end_block(irg); + env.end_block = get_irg_end_block(irg); irg_block_walk_graph(irg, fix_ssa, NULL, &env); for (i = get_Block_n_cfgpreds(endbb) - 1; i >= 0; --i) { ir_node *node = skip_Proj(get_Block_cfgpred(endbb, i)); @@ -492,14 +487,13 @@ ir_graph *ir_profile_instrument(const char *filename, unsigned flags) set_array_entity_values(bblock_id, tarval_array, n_blocks); if (flags & profile_with_locations) { + ir_graph *irg = get_const_code_irg(); /* build the initializer for the locations */ - rem = current_ir_graph; - current_ir_graph = get_const_code_irg(); ent = get_array_element_entity(loc_type); set_entity_linkage(ent_locations, IR_LINKAGE_CONSTANT); for (i = 0; i < n_blocks; ++i) { compound_graph_path *path; - tarval *tv; + ir_tarval *tv; ir_node *n; /* lineno */ @@ -508,7 +502,7 @@ ir_graph *ir_profile_instrument(const char *filename, unsigned flags) set_compound_graph_path_node(path, 0, ent); set_compound_graph_path_node(path, 1, loc_lineno); tv = new_tarval_from_long(wd.locs[i].lineno, mode_Iu); - add_compound_ent_value_w_path(ent_locations, new_Const(tv), path); + add_compound_ent_value_w_path(ent_locations, new_r_Const(irg, tv), path); /* name */ path = new_compound_graph_path(loc_type, 2); @@ -517,9 +511,9 @@ ir_graph *ir_profile_instrument(const char *filename, unsigned flags) set_compound_graph_path_node(path, 1, loc_name); if (wd.locs[i].fname) { sym.entity_p = wd.locs[i].fname; - n = new_SymConst(mode_P_data, sym, symconst_addr_ent); + n = new_r_SymConst(irg, mode_P_data, sym, symconst_addr_ent); } else { - n = new_Const(get_mode_null(mode_P_data)); + n = new_r_Const(irg, get_mode_null(mode_P_data)); } add_compound_ent_value_w_path(ent_locations, n, path); } @@ -628,7 +622,7 @@ ir_profile_get_block_execcount(const ir_node *block) } } -typedef struct _intialize_execfreq_env_t { +typedef struct intialize_execfreq_env_t { ir_graph *irg; ir_exec_freq *execfreqs; double freq_factor;