From e27ef4689fd2b241e7b9cefd0e69cf923fbf148a Mon Sep 17 00:00:00 2001
From: law <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 11 Apr 2006 05:52:45 +0000
Subject: [PATCH]         PR/27087         * tree-ssa-copy.c
 (may_propagate_copy): Test flow sensitive         alias information too.

        * gcc.c-torture/compile/pr27087.c: New test.




git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112849 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog                                 |  6 +++++
 gcc/testsuite/ChangeLog                       |  5 ++++
 gcc/testsuite/gcc.c-torture/compile/pr27087.c | 23 +++++++++++++++++++
 gcc/tree-ssa-copy.c                           | 15 ++++++++++++
 4 files changed, 49 insertions(+)
 create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr27087.c

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c5aa369f7f4c..0588113f0481 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-04-03  Jeff Law  <law@redhat.com>
+
+	PR/27087
+	* tree-ssa-copy.c (may_propagate_copy): Test flow sensitive
+	alias information too.
+
 2006-04-10  Mike Frysinger  <vapier@gentoo.org>
 
 	* gcc/Makefile.in (gcc-cross): Add $(exeext) to target name.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 237a690b6578..f71c86bc6c2a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-04-10  Jeff Law  <law@redhat.com>
+
+	PR/27087
+	* gcc.c-torture/compile/pr27087.c: New test.
+
 2006-04-10  Aldy Hernandez  <aldyh@redhat.com>
 
 	PR/21391
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr27087.c b/gcc/testsuite/gcc.c-torture/compile/pr27087.c
new file mode 100644
index 000000000000..3add13bcbeb3
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr27087.c
@@ -0,0 +1,23 @@
+extern int ptbl[4];
+extern int ctbl[4];
+
+void doViews(void) {
+    int  *c = ctbl, *p = ptbl;
+    while (1)
+  {
+        p++;
+        c++;
+        if (*p)
+        {
+            if (c == p)
+            {
+                if (*c)
+                    return;
+            }
+            else
+              return;
+        }
+    }
+
+    g();
+}
diff --git a/gcc/tree-ssa-copy.c b/gcc/tree-ssa-copy.c
index fca44d76c055..f1b67b5bf2aa 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
-- 
GitLab