Commit 41fac672 authored by Matthias Braun's avatar Matthias Braun
Browse files

analysis of address_tkane for union types is not that easy - be conservative

[r25640]
parent 901bb930
......@@ -850,7 +850,16 @@ static ir_entity_usage determine_entity_usage(const ir_node *irn, ir_entity *ent
case iro_Add:
case iro_Sub:
/* Check the successor of irn. */
res |= determine_entity_usage(succ, entity);
break;
case iro_Sel: {
ir_entity *entity = get_Sel_entity(succ);
/* this analyis can't handle unions correctly */
if (is_Union_type(get_entity_owner(entity))) {
red |= ir_usage_unknown;
break;
}
/* Check the successor of irn. */
res |= determine_entity_usage(succ, entity);
break;
......
......@@ -211,9 +211,13 @@ int is_address_taken(ir_node *sel)
break;
case iro_Sel: {
ir_entity* entity = get_Sel_entity(succ);
/* we can't handle unions correctly yet -> address taken */
if (is_Union_type(get_entity_owner(entity)))
return 1;
/* Check the Sel successor of Sel */
int res = is_address_taken(succ);
if (res)
return 1;
break;
......@@ -682,7 +686,7 @@ int scalar_replacement_opt(ir_graph *irg) {
/* Call algorithm that computes the out edges */
assure_irg_outs(irg);
/* we use the link firld to store the VNUM */
/* we use the link field to store the VNUM */
ir_reserve_resources(irg, IR_RESOURCE_IRN_LINK);
irp_reserve_resources(irp, IR_RESOURCE_ENTITY_LINK);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment