diff options
author | Richard Guenther <rguenther@suse.de> | 2011-04-27 09:17:01 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2011-04-27 09:17:01 +0000 |
commit | f63d806d66059fa17ea7e095ee4e029d725dca6f (patch) | |
tree | be3da49024cb13e1218aa97ce2838924c8995df7 /gcc/tree-ssa-alias.c | |
parent | 97d20907940d5cf2160794cfbf705da463273d9f (diff) | |
download | gcc-f63d806d66059fa17ea7e095ee4e029d725dca6f.zip gcc-f63d806d66059fa17ea7e095ee4e029d725dca6f.tar.gz gcc-f63d806d66059fa17ea7e095ee4e029d725dca6f.tar.bz2 |
tree-ssa-alias.c (indirect_refs_may_alias_p): Fix TARGET_MEM_REF handling.
2011-04-27 Richard Guenther <rguenther@suse.de>
* tree-ssa-alias.c (indirect_refs_may_alias_p): Fix
TARGET_MEM_REF handling.
From-SVN: r173018
Diffstat (limited to 'gcc/tree-ssa-alias.c')
-rw-r--r-- | gcc/tree-ssa-alias.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index f324099..315a252 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -925,12 +925,12 @@ indirect_refs_may_alias_p (tree ref1 ATTRIBUTE_UNUSED, tree base1, /* If both references are through the same type, they do not alias if the accesses do not overlap. This does extra disambiguation for mixed/pointer accesses but requires strict aliasing. */ - if ((TREE_CODE (base1) != TARGET_MEM_REF || !TMR_INDEX (base1)) - && (TREE_CODE (base2) != TARGET_MEM_REF || !TMR_INDEX (base2)) - && (TREE_CODE (base1) != MEM_REF - || same_type_for_tbaa (TREE_TYPE (base1), TREE_TYPE (ptrtype1)) == 1) - && (TREE_CODE (base2) != MEM_REF - || same_type_for_tbaa (TREE_TYPE (base2), TREE_TYPE (ptrtype2)) == 1) + if ((TREE_CODE (base1) != TARGET_MEM_REF + || (!TMR_INDEX (base1) && !TMR_INDEX2 (base1))) + && (TREE_CODE (base2) != TARGET_MEM_REF + || (!TMR_INDEX (base2) && !TMR_INDEX2 (base2))) + && same_type_for_tbaa (TREE_TYPE (base1), TREE_TYPE (ptrtype1)) == 1 + && same_type_for_tbaa (TREE_TYPE (base2), TREE_TYPE (ptrtype2)) == 1 && same_type_for_tbaa (TREE_TYPE (ptrtype1), TREE_TYPE (ptrtype2)) == 1) return ranges_overlap_p (offset1, max_size1, offset2, max_size2); @@ -942,14 +942,9 @@ indirect_refs_may_alias_p (tree ref1 ATTRIBUTE_UNUSED, tree base1, /* Do access-path based disambiguation. */ if (ref1 && ref2 - && handled_component_p (ref1) - && handled_component_p (ref2) - && TREE_CODE (base1) != TARGET_MEM_REF - && TREE_CODE (base2) != TARGET_MEM_REF - && (TREE_CODE (base1) != MEM_REF - || same_type_for_tbaa (TREE_TYPE (base1), TREE_TYPE (ptrtype1)) == 1) - && (TREE_CODE (base2) != MEM_REF - || same_type_for_tbaa (TREE_TYPE (base2), TREE_TYPE (ptrtype2)) == 1)) + && (handled_component_p (ref1) || handled_component_p (ref2)) + && same_type_for_tbaa (TREE_TYPE (base1), TREE_TYPE (ptrtype1)) == 1 + && same_type_for_tbaa (TREE_TYPE (base2), TREE_TYPE (ptrtype2)) == 1) return aliasing_component_refs_p (ref1, ref1_alias_set, base1_alias_set, offset1, max_size1, |