X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firgraph.c;h=5247dd12b40ac28c968e72206b7f8d95af93d5f9;hb=44eb3083a03af79ddfbd85c542b11024aa88b9f5;hp=724fea80f44e4254f1b30b5f84523f2cd538b8b4;hpb=aea17ae12e3517e3992eef3da7e44c4ce36eefe1;p=libfirm diff --git a/ir/ir/irgraph.c b/ir/ir/irgraph.c index 724fea80f..5247dd12b 100644 --- a/ir/ir/irgraph.c +++ b/ir/ir/irgraph.c @@ -1,20 +1,6 @@ /* - * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved. - * * This file is part of libFirm. - * - * This file may be distributed and/or modified under the terms of the - * GNU General Public License version 2 as published by the Free Software - * Foundation and appearing in the file LICENSE.GPL included in the - * packaging of this file. - * - * Licensees holding valid libFirm Professional Edition licenses may use - * this file in accordance with the libFirm Commercial License. - * Agreement provided with the Software. - * - * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE - * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE. + * Copyright (C) 2012 University of Karlsruhe. */ /** @@ -50,18 +36,8 @@ #include "irgopt.h" #define INITIAL_IDX_IRN_MAP_SIZE 1024 - -/** - * Indicates, whether additional data can be registered to graphs. - * If set to 1, this is not possible anymore. - */ -static int forbid_new_data = 0; - -/** - * The amount of additional space for custom data to be allocated upon - * creating a new graph. - */ -static size_t additional_graph_data_size = 0; +/** Suffix that is added to every frame type. */ +#define FRAME_TP_SUFFIX "frame_tp" ir_graph *current_ir_graph; ir_graph *get_current_ir_graph(void) @@ -80,7 +56,6 @@ static ident *frame_type_suffix = NULL; void firm_init_irgraph(void) { frame_type_suffix = new_id_from_str(FRAME_TP_SUFFIX); - forbid_new_data = 1; } /** @@ -92,16 +67,16 @@ void firm_init_irgraph(void) */ static ir_graph *alloc_graph(void) { - ir_graph *res; - size_t size = sizeof(ir_graph) + additional_graph_data_size; - char *ptr = XMALLOCNZ(char, size); - - res = (ir_graph *)(ptr + additional_graph_data_size); + ir_graph *const res = XMALLOCZ(ir_graph); res->kind = k_ir_graph; /* initialize the idx->node map. */ - res->idx_irn_map = NEW_ARR_F(ir_node *, INITIAL_IDX_IRN_MAP_SIZE); - memset(res->idx_irn_map, 0, INITIAL_IDX_IRN_MAP_SIZE * sizeof(res->idx_irn_map[0])); + res->idx_irn_map = NEW_ARR_FZ(ir_node*, INITIAL_IDX_IRN_MAP_SIZE); + + obstack_init(&res->obst); + + /* value table for global value numbering for optimizing use in iropt.c */ + new_identities(res); return res; } @@ -111,13 +86,10 @@ static ir_graph *alloc_graph(void) */ static void free_graph(ir_graph *irg) { - char *ptr = (char *)irg; - ir_edge_kind_t i; - - for (i = EDGE_KIND_FIRST; i < EDGE_KIND_LAST; ++i) + for (ir_edge_kind_t i = EDGE_KIND_FIRST; i < EDGE_KIND_LAST; ++i) edges_deactivate_kind(irg, i); DEL_ARR_F(irg->idx_irn_map); - free(ptr - additional_graph_data_size); + free(irg); } void irg_set_nloc(ir_graph *res, int n_loc) @@ -146,30 +118,14 @@ ir_graph *new_r_ir_graph(ir_entity *ent, int n_loc) /* inform statistics here, as blocks will be already build on this graph */ hook_new_graph(res, ent); - /*-- initialized for each graph. --*/ - res->kind = k_ir_graph; - res->obst = XMALLOC(struct obstack); - obstack_init(res->obst); - /* graphs are in construction mode by default */ add_irg_constraints(res, IR_GRAPH_CONSTRAINT_CONSTRUCTION); irg_set_nloc(res, n_loc); - /* descriptions will be allocated on demand */ - res->loc_descriptions = NULL; - - res->visited = 0; /* visited flag, for the ir walker */ - res->block_visited = 0; /* visited flag, for the 'block'-walker */ - - res->last_node_idx = 0; - - new_identities(res); - res->irg_pinned_state = op_pin_state_pinned; res->typeinfo_state = ir_typeinfo_none; set_irp_typeinfo_inconsistent(); /* there is a new graph with typeinfo_none. */ res->callee_info_state = irg_callee_info_none; - res->class_cast_state = ir_class_casts_transitive; res->fp_model = fp_model_precise; res->mem_disambig_opt = aa_opt_inherited; @@ -214,7 +170,6 @@ ir_graph *new_r_ir_graph(ir_entity *ent, int n_loc) set_r_cur_block(res, first_block); res->method_execution_frequency = -1.0; - res->estimated_node_count = 0; return res; } @@ -240,22 +195,10 @@ ir_graph *new_const_code_irg(void) /* inform statistics here, as blocks will be already build on this graph */ hook_new_graph(res, NULL); - res->n_loc = 1; /* Only the memory. */ - res->visited = 0; /* visited flag, for the ir walker */ - res->block_visited = 0; /* visited flag, for the 'block'-walker */ - res->obst = XMALLOC(struct obstack); - obstack_init(res->obst); - - res->last_node_idx = 0; - + res->n_loc = 1; /* Only the memory. */ res->irg_pinned_state = op_pin_state_pinned; res->fp_model = fp_model_precise; - /* value table for global value numbering for optimizing use in iropt.c */ - new_identities(res); - res->ent = NULL; - res->frame_type = NULL; - add_irg_constraints(res, IR_GRAPH_CONSTRAINT_CONSTRUCTION); /* the Anchor node must be created first */ @@ -344,19 +287,9 @@ ir_graph *create_irg_copy(ir_graph *irg) res = alloc_graph(); - res->n_loc = 0; - res->visited = 0; /* visited flag, for the ir walker */ - res->block_visited = 0; /* visited flag, for the 'block'-walker */ - res->obst = XMALLOC(struct obstack); - obstack_init(res->obst); - - res->last_node_idx = 0; - res->irg_pinned_state = irg->irg_pinned_state; res->fp_model = irg->fp_model; - new_identities(res); - /* clone the frame type here for safety */ irp_reserve_resources(irp, IRP_RESOURCE_ENTITY_LINK); res->frame_type = clone_frame_type(irg->frame_type); @@ -381,10 +314,6 @@ ir_graph *create_irg_copy(ir_graph *irg) /* Proj results of start node */ set_irg_initial_mem(res, get_new_node(get_irg_initial_mem(irg))); - /* Copy the node count estimation. Would be strange if this - is different from the original one. */ - res->estimated_node_count = irg->estimated_node_count; - ir_free_resources(irg, IR_RESOURCE_IRN_LINK); irp_free_resources(irp, IRP_RESOURCE_ENTITY_LINK); @@ -406,8 +335,7 @@ void free_ir_graph(ir_graph *irg) } free_End(get_irg_end(irg)); - obstack_free(irg->obst, NULL); - free(irg->obst); + obstack_free(&irg->obst, NULL); if (irg->loc_descriptions) free(irg->loc_descriptions); irg->kind = k_BAD; @@ -556,20 +484,11 @@ int get_irg_n_locs(ir_graph *irg) return irg->n_loc - 1; } -struct obstack *(get_irg_obstack)(const ir_graph *irg) -{ - return get_irg_obstack_(irg); -} - int node_is_in_irgs_storage(const ir_graph *irg, const ir_node *n) { - struct _obstack_chunk *p; - - /* - * checks weather the ir_node pointer is on the obstack. - * A more sophisticated check would test the "whole" ir_node - */ - for (p = irg->obst->chunk; p; p = p->prev) { + /* Check whether the ir_node pointer is on the obstack. + * A more sophisticated check would test the "whole" ir_node. */ + for (struct _obstack_chunk const *p = irg->obst.chunk; p; p = p->prev) { if (((char *)p->contents <= (char *)n) && ((char *)n < (char *)p->limit)) return 1; } @@ -582,11 +501,6 @@ op_pin_state (get_irg_pinned)(const ir_graph *irg) return get_irg_pinned_(irg); } -void (set_irg_pinned)(ir_graph *irg, op_pin_state p) -{ - set_irg_pinned_(irg, p); -} - irg_callee_info_state (get_irg_callee_info_state)(const ir_graph *irg) { return get_irg_callee_info_state_(irg); @@ -711,26 +625,11 @@ ir_resources_t ir_resources_reserved(const ir_graph *irg) } #endif -unsigned (get_irg_estimated_node_cnt)(const ir_graph *irg) -{ - return get_irg_estimated_node_cnt_(irg); -} - unsigned get_irg_last_idx(const ir_graph *irg) { return irg->last_node_idx; } -size_t register_additional_graph_data(size_t size) -{ - assert(!forbid_new_data && "Too late to register additional node data"); - - if (forbid_new_data) - return 0; - - return additional_graph_data_size += size; -} - void add_irg_constraints(ir_graph *irg, ir_graph_constraints_t constraints) { irg->constraints |= constraints;