Commit a7a512be by Richard Guenther Committed by Richard Biener

alias.c (alias_set_subset_of): Correctly handle asking if zero is a subset of an…

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
parent f3f75f69
2008-04-23 Richard Guenther <rguenther@suse.de> 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 PR middle-end/36021
* c-common.c (handle_alloc_size_attribute): Use type_num_arguments. * c-common.c (handle_alloc_size_attribute): Use type_num_arguments.
......
...@@ -305,8 +305,9 @@ alias_set_subset_of (alias_set_type set1, alias_set_type set2) ...@@ -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. */ /* Otherwise, check if set1 is a subset of set2. */
ase = get_alias_set_entry (set2); ase = get_alias_set_entry (set2);
if (ase != 0 if (ase != 0
&& (splay_tree_lookup (ase->children, && ((ase->has_zero_child && set1 == 0)
(splay_tree_key) set1))) || splay_tree_lookup (ase->children,
(splay_tree_key) set1)))
return true; return true;
return false; return false;
} }
......
...@@ -2390,9 +2390,7 @@ have_common_aliases_p (bitmap tag1aliases, bitmap tag2aliases) ...@@ -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 /* 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 return false if both sets are empty, or one set is and the other
isn't. */ isn't. */
if ((tag1aliases == NULL && tag2aliases != NULL) if (tag1aliases == NULL || tag2aliases == NULL)
|| (tag2aliases == NULL && tag1aliases != NULL)
|| (tag1aliases == NULL && tag2aliases == NULL))
return false; return false;
return bitmap_intersect_p (tag1aliases, tag2aliases); return bitmap_intersect_p (tag1aliases, tag2aliases);
...@@ -2490,12 +2488,16 @@ compute_flow_insensitive_aliasing (struct alias_info *ai) ...@@ -2490,12 +2488,16 @@ compute_flow_insensitive_aliasing (struct alias_info *ai)
if (PTR_IS_REF_ALL (p_map1->var)) if (PTR_IS_REF_ALL (p_map1->var))
continue; 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]; struct alias_map_d *p_map2 = ai->pointers[j];
tree tag2 = symbol_mem_tag (p_map2->var); tree tag2 = symbol_mem_tag (p_map2->var);
bitmap may_aliases2 = may_aliases (tag2); 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)) if (PTR_IS_REF_ALL (p_map2->var))
continue; continue;
...@@ -2508,18 +2510,8 @@ compute_flow_insensitive_aliasing (struct alias_info *ai) ...@@ -2508,18 +2510,8 @@ compute_flow_insensitive_aliasing (struct alias_info *ai)
if (have_common_aliases_p (may_aliases1, may_aliases2)) if (have_common_aliases_p (may_aliases1, may_aliases2))
continue; continue;
if (may_aliases2 && !bitmap_empty_p (may_aliases2)) add_may_alias (tag1, tag2);
{
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);
}
} }
} }
timevar_pop (TV_FLOW_INSENSITIVE); timevar_pop (TV_FLOW_INSENSITIVE);
} }
......
Markdown is supported
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