re PR bootstrap/49078 (LTO bootstrap failed with bootstrap-profiled)
authorRichard Guenther <rguenther@suse.de>
Tue, 24 May 2011 12:40:28 +0000 (12:40 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 24 May 2011 12:40:28 +0000 (12:40 +0000)
2011-05-24  Richard Guenther  <rguenther@suse.de>

PR bootstrap/49078
* gimple.c (gimple_register_canonical_type): Revert
previous change.
* alias.c (get_alias_set): Only assert that TYPE_CANONICAL
does not for a tree for the case where it matters.  Cache
pointer-type alias-sets.

From-SVN: r174113

gcc/ChangeLog
gcc/alias.c
gcc/gimple.c

index cf44fed9bdf71e949deb33b9237c039b67282b1c..84724f0c5ba45af3728b10b47754f100d0865657 100644 (file)
@@ -1,3 +1,12 @@
+2011-05-24  Richard Guenther  <rguenther@suse.de>
+
+       PR bootstrap/49078
+       * gimple.c (gimple_register_canonical_type): Revert
+       previous change.
+       * alias.c (get_alias_set): Only assert that TYPE_CANONICAL
+       does not for a tree for the case where it matters.  Cache
+       pointer-type alias-sets.
+
 2011-05-24  Joseph Myers  <joseph@codesourcery.com>
 
        * Makefile.in (GCC_OBJS): Remove opts-common.o and options.o.
index c2a2c9d865540678f909eeaf5a08ab826f8cb5e3..b32e6b37cac2c15cbb76f841de6165c08c8147d5 100644 (file)
@@ -709,10 +709,8 @@ get_alias_set (tree t)
 
   t = TYPE_CANONICAL (t);
 
-  /* Canonical types shouldn't form a tree nor should the canonical
-     type require structural equality checks.  */
-  gcc_checking_assert (TYPE_CANONICAL (t) == t
-                      && !TYPE_STRUCTURAL_EQUALITY_P (t));
+  /* The canonical type should not require structural equality checks.  */
+  gcc_checking_assert (!TYPE_STRUCTURAL_EQUALITY_P (t));
 
   /* If this is a type with a known alias set, return it.  */
   if (TYPE_ALIAS_SET_KNOWN_P (t))
@@ -813,11 +811,19 @@ get_alias_set (tree t)
      That's simple and avoids all the above problems.  */
   else if (POINTER_TYPE_P (t)
           && t != ptr_type_node)
-    return get_alias_set (ptr_type_node);
+    set = get_alias_set (ptr_type_node);
 
   /* Otherwise make a new alias set for this type.  */
   else
-    set = new_alias_set ();
+    {
+      /* Each canonical type gets its own alias set, so canonical types
+        shouldn't form a tree.  It doesn't really matter for types
+        we handle specially above, so only check it where it possibly
+        would result in a bogus alias set.  */
+      gcc_checking_assert (TYPE_CANONICAL (t) == t);
+
+      set = new_alias_set ();
+    }
 
   TYPE_ALIAS_SET (t) = set;
 
index d6c79aa1f5c9971246e1b75aed49cb72a2011337..4c0e4a387df2abaf28332e1275184d94652a9247 100644 (file)
@@ -4779,7 +4779,12 @@ gimple_canonical_type_eq (const void *p1, const void *p2)
 /* Register type T in the global type table gimple_types.
    If another type T', compatible with T, already existed in
    gimple_types then return T', otherwise return T.  This is used by
-   LTO to merge identical types read from different TUs.  */
+   LTO to merge identical types read from different TUs.
+
+   ???  This merging does not exactly match how the tree.c middle-end
+   functions will assign TYPE_CANONICAL when new types are created
+   during optimization (which at least happens for pointer and array
+   types).  */
 
 tree
 gimple_register_canonical_type (tree t)
@@ -4800,25 +4805,6 @@ gimple_register_canonical_type (tree t)
   if (TYPE_CANONICAL (t))
     return TYPE_CANONICAL (t);
 
-  /* For pointer and reference types do as the middle-end does - the
-     canonical type is a pointer to the canonical pointed-to type.  */
-  if (TREE_CODE (t) == POINTER_TYPE)
-    {
-      TYPE_CANONICAL (t)
-         = build_pointer_type_for_mode
-         (gimple_register_canonical_type (TREE_TYPE (t)),
-          TYPE_MODE (t), TYPE_REF_CAN_ALIAS_ALL (t));
-      return TYPE_CANONICAL (t);
-    }
-  else if (TREE_CODE (t) == REFERENCE_TYPE)
-    {
-      TYPE_CANONICAL (t)
-         = build_reference_type_for_mode
-         (gimple_register_canonical_type (TREE_TYPE (t)),
-          TYPE_MODE (t), TYPE_REF_CAN_ALIAS_ALL (t));
-      return TYPE_CANONICAL (t);
-    }
-
   if (gimple_canonical_types == NULL)
     gimple_canonical_types = htab_create_ggc (16381, gimple_canonical_type_hash,
                                              gimple_canonical_type_eq, 0);