aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-copy.c
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2006-04-10 23:52:45 -0600
committerJeff Law <law@gcc.gnu.org>2006-04-10 23:52:45 -0600
commitcf282d0a4a9174888fd9add60d26acfac1601a0e (patch)
tree8f3fb1be74c0d398df2d5f881cf972cd746e2d0b /gcc/tree-ssa-copy.c
parentb3b2cbc4fad08189660fe2aba344227b653891bb (diff)
downloadgcc-cf282d0a4a9174888fd9add60d26acfac1601a0e.zip
gcc-cf282d0a4a9174888fd9add60d26acfac1601a0e.tar.gz
gcc-cf282d0a4a9174888fd9add60d26acfac1601a0e.tar.bz2
tree-ssa-copy.c (may_propagate_copy): Test flow sensitive alias information too.
PR/27087 * tree-ssa-copy.c (may_propagate_copy): Test flow sensitive alias information too. * gcc.c-torture/compile/pr27087.c: New test. From-SVN: r112849
Diffstat (limited to 'gcc/tree-ssa-copy.c')
-rw-r--r--gcc/tree-ssa-copy.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/tree-ssa-copy.c b/gcc/tree-ssa-copy.c
index fca44d76..f1b67b5b 100644
--- a/gcc/tree-ssa-copy.c
+++ b/gcc/tree-ssa-copy.c
@@ -117,6 +117,21 @@ may_propagate_copy (tree dest, tree orig)
else if (get_alias_set (TREE_TYPE (type_d)) !=
get_alias_set (TREE_TYPE (type_o)))
return false;
+
+ /* Also verify flow-sensitive information is compatible. */
+ if (SSA_NAME_PTR_INFO (orig) && SSA_NAME_PTR_INFO (dest))
+ {
+ struct ptr_info_def *orig_ptr_info = SSA_NAME_PTR_INFO (orig);
+ struct ptr_info_def *dest_ptr_info = SSA_NAME_PTR_INFO (dest);
+
+ if (orig_ptr_info->name_mem_tag
+ && dest_ptr_info->name_mem_tag
+ && orig_ptr_info->pt_vars
+ && dest_ptr_info->pt_vars
+ && !bitmap_intersect_p (dest_ptr_info->pt_vars,
+ orig_ptr_info->pt_vars))
+ return false;
+ }
}
/* If the destination is a SSA_NAME for a virtual operand, then we have