aboutsummaryrefslogtreecommitdiff
path: root/gcc/lto
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2015-11-24 20:35:38 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2015-11-24 19:35:38 +0000
commitaea50b45f5db36d77d4cf8488dd98d8a06c073a8 (patch)
tree2720a21d3a42af746351fb5f5e419414f55e6da8 /gcc/lto
parent73c923307beaf7c49d753528fead01615ff85847 (diff)
downloadgcc-aea50b45f5db36d77d4cf8488dd98d8a06c073a8.zip
gcc-aea50b45f5db36d77d4cf8488dd98d8a06c073a8.tar.gz
gcc-aea50b45f5db36d77d4cf8488dd98d8a06c073a8.tar.bz2
lto-streamer-in.c (lto_read_body_or_constructor): Set TYPE_CANONICAL only for types where LTO sets them.
* lto-streamer-in.c (lto_read_body_or_constructor): Set TYPE_CANONICAL only for types where LTO sets them. * tree.c (build_array_type_1): Do ont set TYPE_CANONICAL for LTO. (make_vector_type): Likewise. (gimple_canonical_types_compatible_p): Use canonical_type_used_p. * tree.h (canonical_type_used_p): New inline. * alias.c (get_alias_set): Handle structural equality for all types that pass canonical_type_used_p. (record_component_aliases): Look through all types with record_component_aliases for possible pointers; sanity check that the alias sets match. * lto.c (iterative_hash_canonical_type): Recruse for all types which pass !canonical_type_used_p. (gimple_register_canonical_type_1): Sanity check we do not compute canonical type of anything with !canonical_type_used_p. (gimple_register_canonical_type): Skip all types that are !canonical_type_used_p From-SVN: r230835
Diffstat (limited to 'gcc/lto')
-rw-r--r--gcc/lto/ChangeLog9
-rw-r--r--gcc/lto/lto.c9
2 files changed, 13 insertions, 5 deletions
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index 9d6b126..be0eb7f 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,5 +1,14 @@
2015-11-24 Jan Hubicka <hubicka@ucw.cz>
+ * lto.c (iterative_hash_canonical_type): Recruse for all types
+ which pass !canonical_type_used_p.
+ (gimple_register_canonical_type_1): Sanity check we do not compute
+ canonical type of anything with !canonical_type_used_p.
+ (gimple_register_canonical_type): Skip all types that are
+ !canonical_type_used_p
+
+2015-11-24 Jan Hubicka <hubicka@ucw.cz>
+
* lto.c (unify_scc): Use free_node.
2015-11-21 Jan Hubicka <hubicka@ucw.cz>
diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
index c4c5158..b1e2d6e 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -389,9 +389,7 @@ iterative_hash_canonical_type (tree type, inchash::hash &hstate)
/* All type variants have same TYPE_CANONICAL. */
type = TYPE_MAIN_VARIANT (type);
- /* We do not compute TYPE_CANONICAl of POINTER_TYPE because the aliasing
- code never use it anyway. */
- if (POINTER_TYPE_P (type))
+ if (!canonical_type_used_p (type))
v = hash_canonical_type (type);
/* An already processed type. */
else if (TYPE_CANONICAL (type))
@@ -444,7 +442,7 @@ gimple_register_canonical_type_1 (tree t, hashval_t hash)
gcc_checking_assert (TYPE_P (t) && !TYPE_CANONICAL (t)
&& type_with_alias_set_p (t)
- && !POINTER_TYPE_P (t));
+ && canonical_type_used_p (t));
slot = htab_find_slot_with_hash (gimple_canonical_types, t, hash, INSERT);
if (*slot)
@@ -477,7 +475,8 @@ gimple_register_canonical_type_1 (tree t, hashval_t hash)
static void
gimple_register_canonical_type (tree t)
{
- if (TYPE_CANONICAL (t) || !type_with_alias_set_p (t) || POINTER_TYPE_P (t))
+ if (TYPE_CANONICAL (t) || !type_with_alias_set_p (t)
+ || !canonical_type_used_p (t))
return;
/* Canonical types are same among all complete variants. */