X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firprofile.c;h=83de892651a6213cc95f38826a5df4c27abcc5e9;hb=b4647d67ab7885d5da32c2a30242fbc4ed93d81b;hp=5ff78fec12617dae798497c00e0a5292ea47b9b4;hpb=a6e674f74ea93c3661f100088db520acb701571f;p=libfirm diff --git a/ir/ir/irprofile.c b/ir/ir/irprofile.c index 5ff78fec1..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; @@ -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) { @@ -268,11 +268,11 @@ 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.%u", nr); arr = new_type_array(1, wd->tp_char); @@ -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,33 +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; - 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; @@ -421,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; @@ -429,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); } @@ -447,19 +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); - 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)); @@ -490,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 */ @@ -506,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); @@ -515,14 +511,13 @@ 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); } pmap_destroy(wd.fname_map); - current_ir_graph = rem; } return gen_initializer_irg(ent_filename, bblock_id, bblock_counts, n_blocks); } @@ -627,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;