alias.c (alias_set_subset_of): Correctly handle asking if zero is a subset of an alias set with zero child.
2008-04-23 Richard Guenther <rguenther@suse.de> * alias.c (alias_set_subset_of): Correctly handle asking if zero is a subset of an alias set with zero child. * tree-ssa-alias.c (have_common_aliases_p): Simplify logic. (compute_flow_insensitive_aliasing): Correctly walk all pointers. Do not unnecessarily union sets. From-SVN: r134597
This commit is contained in:
parent
f3f75f693d
commit
a7a512beff
@ -1,3 +1,11 @@
|
||||
2008-04-23 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* alias.c (alias_set_subset_of): Correctly handle asking
|
||||
if zero is a subset of an alias set with zero child.
|
||||
* tree-ssa-alias.c (have_common_aliases_p): Simplify logic.
|
||||
(compute_flow_insensitive_aliasing): Correctly walk all
|
||||
pointers. Do not unnecessarily union sets.
|
||||
|
||||
2008-04-23 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/36021
|
||||
|
@ -305,8 +305,9 @@ alias_set_subset_of (alias_set_type set1, alias_set_type set2)
|
||||
/* Otherwise, check if set1 is a subset of set2. */
|
||||
ase = get_alias_set_entry (set2);
|
||||
if (ase != 0
|
||||
&& (splay_tree_lookup (ase->children,
|
||||
(splay_tree_key) set1)))
|
||||
&& ((ase->has_zero_child && set1 == 0)
|
||||
|| splay_tree_lookup (ase->children,
|
||||
(splay_tree_key) set1)))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
@ -2390,9 +2390,7 @@ have_common_aliases_p (bitmap tag1aliases, bitmap tag2aliases)
|
||||
/* This is the old behavior of have_common_aliases_p, which is to
|
||||
return false if both sets are empty, or one set is and the other
|
||||
isn't. */
|
||||
if ((tag1aliases == NULL && tag2aliases != NULL)
|
||||
|| (tag2aliases == NULL && tag1aliases != NULL)
|
||||
|| (tag1aliases == NULL && tag2aliases == NULL))
|
||||
if (tag1aliases == NULL || tag2aliases == NULL)
|
||||
return false;
|
||||
|
||||
return bitmap_intersect_p (tag1aliases, tag2aliases);
|
||||
@ -2490,12 +2488,16 @@ compute_flow_insensitive_aliasing (struct alias_info *ai)
|
||||
if (PTR_IS_REF_ALL (p_map1->var))
|
||||
continue;
|
||||
|
||||
for (j = i + 1; j < ai->num_pointers; j++)
|
||||
for (j = 0; j < ai->num_pointers; j++)
|
||||
{
|
||||
struct alias_map_d *p_map2 = ai->pointers[j];
|
||||
tree tag2 = symbol_mem_tag (p_map2->var);
|
||||
bitmap may_aliases2 = may_aliases (tag2);
|
||||
|
||||
/* By convention tags don't alias themselves. */
|
||||
if (tag1 == tag2)
|
||||
continue;
|
||||
|
||||
if (PTR_IS_REF_ALL (p_map2->var))
|
||||
continue;
|
||||
|
||||
@ -2508,18 +2510,8 @@ compute_flow_insensitive_aliasing (struct alias_info *ai)
|
||||
if (have_common_aliases_p (may_aliases1, may_aliases2))
|
||||
continue;
|
||||
|
||||
if (may_aliases2 && !bitmap_empty_p (may_aliases2))
|
||||
{
|
||||
union_alias_set_into (tag1, may_aliases2);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Since TAG2 does not have any aliases of its own, add
|
||||
TAG2 itself to the alias set of TAG1. */
|
||||
add_may_alias (tag1, tag2);
|
||||
}
|
||||
add_may_alias (tag1, tag2);
|
||||
}
|
||||
|
||||
}
|
||||
timevar_pop (TV_FLOW_INSENSITIVE);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user