OSDN Git Service

PR c++/34862
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 28 Jan 2008 19:43:51 +0000 (19:43 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 28 Jan 2008 19:43:51 +0000 (19:43 +0000)
PR c++/33407
* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Don't
coalesce pointers if they have different DECL_NO_TBAA_P values.
* tree-ssa-copy.c (may_propagate_copy): Don't propagate copies
between variables with different DECL_NO_TBAA_P values.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131916 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-ssa-copy.c
gcc/tree-ssa-copyrename.c

index 753539e..33a2c0b 100644 (file)
@@ -1,3 +1,12 @@
+2008-01-28  Ian Lance Taylor  <iant@google.com>
+
+       PR c++/34862
+       PR c++/33407
+       * tree-ssa-copyrename.c (copy_rename_partition_coalesce): Don't
+       coalesce pointers if they have different DECL_NO_TBAA_P values.
+       * tree-ssa-copy.c (may_propagate_copy): Don't propagate copies
+       between variables with different DECL_NO_TBAA_P values.
+
 2008-01-28  Nathan Froyd  <froydnj@codesourcery.com>
 
        PR 31535
index 7ae6825..2cd30c9 100644 (file)
@@ -1,5 +1,5 @@
 /* Copy propagation and SSA_NAME replacement support routines.
-   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -143,6 +143,11 @@ 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;
+      else if (!MTAG_P (SSA_NAME_VAR (dest))
+              && !MTAG_P (SSA_NAME_VAR (orig))
+              && (DECL_NO_TBAA_P (SSA_NAME_VAR (dest))
+                  != DECL_NO_TBAA_P (SSA_NAME_VAR (orig))))
+       return false;
 
       /* Also verify flow-sensitive information is compatible.  */
       if (SSA_NAME_PTR_INFO (orig) && SSA_NAME_PTR_INFO (dest))
index c5526f6..d701d43 100644 (file)
@@ -1,5 +1,5 @@
 /* Rename SSA copies.
-   Copyright (C) 2004, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006, 2007, 2008 Free Software Foundation, Inc.
    Contributed by Andrew MacLeod <amacleod@redhat.com>
 
 This file is part of GCC.
@@ -249,8 +249,11 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
   /* Don't coalesce if the aliasing sets of the types are different.  */
   if (POINTER_TYPE_P (TREE_TYPE (root1))
       && POINTER_TYPE_P (TREE_TYPE (root2))
-      && get_alias_set (TREE_TYPE (TREE_TYPE (root1)))
-          != get_alias_set (TREE_TYPE (TREE_TYPE (root2))))
+      && ((get_alias_set (TREE_TYPE (TREE_TYPE (root1)))
+          != get_alias_set (TREE_TYPE (TREE_TYPE (root2))))
+         || ((DECL_P (root1) && !MTAG_P (root1))
+             && (DECL_P (root2) && !MTAG_P (root2))
+             && DECL_NO_TBAA_P (root1) != DECL_NO_TBAA_P (root2))))
     {
       if (debug)
        fprintf (debug, " : 2 different aliasing sets. No coalesce.\n");