X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Firmemory.c;h=52afe1bddc4c213f243494b7fe6ede162bf18cae;hb=78bac126e7f9ca55761ab892ebfa9c19a4a65fcf;hp=6888f425c1838a5fb9bfb1d5181e13c4a51281b8;hpb=af300963705d97b2f596e8cf2887813c25de6ad8;p=libfirm diff --git a/ir/ana/irmemory.c b/ir/ana/irmemory.c index 6888f425c..52afe1bdd 100644 --- a/ir/ana/irmemory.c +++ b/ir/ana/irmemory.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2010 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -437,17 +437,14 @@ ir_storage_class_class_t classify_pointer(const ir_node *irn, ir_storage_class_class_t res = ir_sc_pointer; if (is_Global(irn)) { ir_entity *entity = get_Global_entity(irn); - res = ir_sc_globalvar; + ir_type *owner = get_entity_owner(entity); + res = owner == get_tls_type() ? ir_sc_tls : ir_sc_globalvar; if (! (get_entity_usage(entity) & ir_usage_address_taken)) res |= ir_sc_modifier_nottaken; } else if (irn == get_irg_frame(irg)) { res = ir_sc_localvar; if (ent != NULL && !(get_entity_usage(ent) & ir_usage_address_taken)) res |= ir_sc_modifier_nottaken; - } else if (irn == get_irg_tls(irg)) { - res = ir_sc_tls; - if (ent != NULL && !(get_entity_usage(ent) & ir_usage_address_taken)) - res |= ir_sc_modifier_nottaken; } else if (is_Proj(irn) && is_malloc_Result(irn)) { return ir_sc_malloced; } else if (is_Const(irn)) { @@ -567,7 +564,7 @@ static ir_alias_relation _get_alias_relation( /* * Bitfields can be constructed as Sels from its base address. * As they have different entities, the disambiguator would find that they are - * alias free. While this is true for it's values, it is false for the addresses + * alias free. While this is true for its values, it is false for the addresses * (strictly speaking, the Sel's are NOT the addresses of the bitfields). * So, skip those bitfield selecting Sel's. */ @@ -1082,8 +1079,8 @@ static void init_entity_usage(ir_type *tp) */ static void check_initializer_nodes(ir_initializer_t *initializer) { - unsigned i; - ir_node *n; + size_t i; + ir_node *n; switch (initializer->kind) { case IR_INITIALIZER_CONST: @@ -1189,18 +1186,15 @@ static void print_entity_usage_flags(const ir_type *tp) /** * Post-walker: check for global entity address */ -static void check_global_address(ir_node *irn, void *env) +static void check_global_address(ir_node *irn, void *data) { - ir_node *tls = (ir_node*) env; ir_entity *ent; unsigned flags; + (void) data; if (is_Global(irn)) { /* A global. */ ent = get_Global_entity(irn); - } else if (is_Sel(irn) && get_Sel_ptr(irn) == tls) { - /* A TLS variable. */ - ent = get_Sel_entity(irn); } else return; @@ -1231,7 +1225,7 @@ static void analyse_irp_globals_entity_usage(void) ir_graph *irg = get_irp_irg(i); assure_irg_outs(irg); - irg_walk_graph(irg, NULL, check_global_address, get_irg_tls(irg)); + irg_walk_graph(irg, NULL, check_global_address, NULL); } #ifdef DEBUG_libfirm