Commit 96d91dcf by Richard Guenther Committed by Richard Biener

re PR bootstrap/49078 (LTO bootstrap failed with bootstrap-profiled)

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
parent 1ed1641d
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> 2011-05-24 Joseph Myers <joseph@codesourcery.com>
* Makefile.in (GCC_OBJS): Remove opts-common.o and options.o. * Makefile.in (GCC_OBJS): Remove opts-common.o and options.o.
......
...@@ -709,10 +709,8 @@ get_alias_set (tree t) ...@@ -709,10 +709,8 @@ get_alias_set (tree t)
t = TYPE_CANONICAL (t); t = TYPE_CANONICAL (t);
/* Canonical types shouldn't form a tree nor should the canonical /* The canonical type should not require structural equality checks. */
type require structural equality checks. */ gcc_checking_assert (!TYPE_STRUCTURAL_EQUALITY_P (t));
gcc_checking_assert (TYPE_CANONICAL (t) == t
&& !TYPE_STRUCTURAL_EQUALITY_P (t));
/* If this is a type with a known alias set, return it. */ /* If this is a type with a known alias set, return it. */
if (TYPE_ALIAS_SET_KNOWN_P (t)) if (TYPE_ALIAS_SET_KNOWN_P (t))
...@@ -813,11 +811,19 @@ get_alias_set (tree t) ...@@ -813,11 +811,19 @@ get_alias_set (tree t)
That's simple and avoids all the above problems. */ That's simple and avoids all the above problems. */
else if (POINTER_TYPE_P (t) else if (POINTER_TYPE_P (t)
&& t != ptr_type_node) && 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. */ /* Otherwise make a new alias set for this type. */
else 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; TYPE_ALIAS_SET (t) = set;
......
...@@ -4779,7 +4779,12 @@ gimple_canonical_type_eq (const void *p1, const void *p2) ...@@ -4779,7 +4779,12 @@ gimple_canonical_type_eq (const void *p1, const void *p2)
/* Register type T in the global type table gimple_types. /* Register type T in the global type table gimple_types.
If another type T', compatible with T, already existed in If another type T', compatible with T, already existed in
gimple_types then return T', otherwise return T. This is used by 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 tree
gimple_register_canonical_type (tree t) gimple_register_canonical_type (tree t)
...@@ -4800,25 +4805,6 @@ gimple_register_canonical_type (tree t) ...@@ -4800,25 +4805,6 @@ gimple_register_canonical_type (tree t)
if (TYPE_CANONICAL (t)) if (TYPE_CANONICAL (t))
return 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) if (gimple_canonical_types == NULL)
gimple_canonical_types = htab_create_ggc (16381, gimple_canonical_type_hash, gimple_canonical_types = htab_create_ggc (16381, gimple_canonical_type_hash,
gimple_canonical_type_eq, 0); gimple_canonical_type_eq, 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment