X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Firtypeinfo.c;h=79470c77e824c3f1da5ee3d326da34505a9515a4;hb=70cfa8796df2436b48a224e0568f5ee0b595dfb0;hp=ea2d4a14e5e214c7054826c9e040f7a35dbdb422;hpb=54076e63f1fd610e27a0aca959ee0e16572671d6;p=libfirm diff --git a/ir/ana/irtypeinfo.c b/ir/ana/irtypeinfo.c index ea2d4a14e..79470c77e 100644 --- a/ir/ana/irtypeinfo.c +++ b/ir/ana/irtypeinfo.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -23,7 +23,7 @@ * @author Goetz Lindenmaier * @date 28.8.2003 * @version $Id$ - * @summary + * @brief * Data structure to hold type information for nodes. * * This module defines a field "type" of type "type *" for each ir node. @@ -41,7 +41,7 @@ #include -#include "irgraph_t.h" /* for setting the state flag. */ +#include "irgraph_t.h" #include "irprog_t.h" #include "irnode_t.h" #include "pmap.h" @@ -67,56 +67,57 @@ ir_type *initial_type = NULL; * Calling set/get_irn_type is invalid before calling init. Requires memory * in the order of MIN(, #irnodes). */ -void init_irtypeinfo(void) { - int i, n; +void init_irtypeinfo(void) +{ + size_t i, n; - if (!initial_type) - initial_type = new_type_class(new_id_from_str("initial_type")); + if (initial_type == NULL) + initial_type = new_type_class(new_id_from_str("initial_type")); - /* We need a new, empty map. */ - if (type_node_map) pmap_destroy(type_node_map); - type_node_map = pmap_create(); + /* We need a new, empty map. */ + if (type_node_map != NULL) + pmap_destroy(type_node_map); + type_node_map = pmap_create(); - n = get_irp_n_irgs(); - for (i = 0; i < n; ++i) - set_irg_typeinfo_state(get_irp_irg(i), ir_typeinfo_none); + for (i = 0, n = get_irp_n_irgs(); i < n; ++i) + set_irg_typeinfo_state(get_irp_irg(i), ir_typeinfo_none); } -void free_irtypeinfo(void) { - int i, n; +void free_irtypeinfo(void) +{ + size_t i, n; - if (initial_type) { - free_type(initial_type); - initial_type = NULL; - } - //else assert(0 && "call init_type_info before freeing"); + if (initial_type != NULL) { + free_type(initial_type); + initial_type = NULL; + } - if (type_node_map) { - pmap_destroy(type_node_map); - type_node_map = NULL; - } - //else assert(0 && "call init_type_info before freeing"); + if (type_node_map != NULL) { + pmap_destroy(type_node_map); + type_node_map = NULL; + } - n = get_irp_n_irgs(); - for (i = 0; i < n; ++i) - set_irg_typeinfo_state(get_irp_irg(i), ir_typeinfo_none); + for (i = 0, n = get_irp_n_irgs(); i < n; ++i) + set_irg_typeinfo_state(get_irp_irg(i), ir_typeinfo_none); } /* ------------ Irgraph state handling. ------------------------------- */ -void set_irg_typeinfo_state(ir_graph *irg, ir_typeinfo_state s) { - assert(is_ir_graph(irg)); - irg->typeinfo_state = s; - if ((irg->typeinfo_state == ir_typeinfo_consistent) && - (irp->typeinfo_state == ir_typeinfo_consistent) && - (s != ir_typeinfo_consistent) ) - irp->typeinfo_state = ir_typeinfo_inconsistent; +void set_irg_typeinfo_state(ir_graph *irg, ir_typeinfo_state s) +{ + assert(is_ir_graph(irg)); + irg->typeinfo_state = s; + if ((irg->typeinfo_state == ir_typeinfo_consistent) && + (irp->typeinfo_state == ir_typeinfo_consistent) && + (s != ir_typeinfo_consistent) ) + irp->typeinfo_state = ir_typeinfo_inconsistent; } -ir_typeinfo_state get_irg_typeinfo_state(const ir_graph *irg) { - assert(is_ir_graph(irg)); - return irg->typeinfo_state; +ir_typeinfo_state get_irg_typeinfo_state(const ir_graph *irg) +{ + assert(is_ir_graph(irg)); + return irg->typeinfo_state; } @@ -126,16 +127,19 @@ ir_typeinfo_state get_irg_typeinfo_state(const ir_graph *irg) { * consistent. Returns ir_typeinfo_inconsistent if at least one irg has inconsistent * or no type information. Returns ir_typeinfo_none if no irg contains type information. */ -ir_typeinfo_state get_irp_typeinfo_state(void) { - return irp->typeinfo_state; +ir_typeinfo_state get_irp_typeinfo_state(void) +{ + return irp->typeinfo_state; } -void set_irp_typeinfo_state(ir_typeinfo_state s) { - irp->typeinfo_state = s; +void set_irp_typeinfo_state(ir_typeinfo_state s) +{ + irp->typeinfo_state = s; } /* If typeinfo is consistent, sets it to inconsistent. */ -void set_irp_typeinfo_inconsistent(void) { - if (irp->typeinfo_state == ir_typeinfo_consistent) - irp->typeinfo_state = ir_typeinfo_inconsistent; +void set_irp_typeinfo_inconsistent(void) +{ + if (irp->typeinfo_state == ir_typeinfo_consistent) + irp->typeinfo_state = ir_typeinfo_inconsistent; } @@ -145,22 +149,23 @@ void set_irp_typeinfo_inconsistent(void) { * ir_typeinfo_consistent or ir_typeinfo_inconsistent. They * assume current_ir_graph set properly. */ -ir_type *get_irn_typeinfo_type(const ir_node *n) { - ir_type *res = initial_type; - pmap_entry *entry; - assert(get_irg_typeinfo_state(get_irn_irg(n)) == ir_typeinfo_consistent || - get_irg_typeinfo_state(get_irn_irg(n)) == ir_typeinfo_inconsistent ); +ir_type *get_irn_typeinfo_type(const ir_node *n) +{ + ir_type *res = initial_type; + pmap_entry *entry; - entry = pmap_find(type_node_map, n); - if (entry) - res = entry->value; + assert(get_irg_typeinfo_state(get_irn_irg(n)) != ir_typeinfo_none); - return res; + entry = pmap_find(type_node_map, n); + if (entry != NULL) + res = (ir_type*) entry->value; + + return res; } -void set_irn_typeinfo_type(ir_node *n, ir_type *tp) { - assert(get_irg_typeinfo_state(current_ir_graph) == ir_typeinfo_consistent || - get_irg_typeinfo_state(current_ir_graph) == ir_typeinfo_inconsistent ); +void set_irn_typeinfo_type(ir_node *n, ir_type *tp) +{ + assert(get_irg_typeinfo_state(current_ir_graph) != ir_typeinfo_none); - pmap_insert(type_node_map, (void *)n, (void *)tp); + pmap_insert(type_node_map, (void *)n, (void *)tp); }