/*
- * 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.
*
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)) {
/*
* 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.
*/
*/
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:
/**
* 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;
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