From 09eb10edf9eb3f69a4337a4f4793b6f20feea37e Mon Sep 17 00:00:00 2001 From: rguenth Date: Sun, 13 Jun 2010 14:14:17 +0000 Subject: 2010-06-13 Richard Guenther * lto-streamer-in.c (lto_input_ts_type_tree_pointers): Do not stream but initialize TYPE_CANONICAL to NULL. (lto_output_ts_type_tree_pointers): Do not stream TYPE_CANONICAL. * gimple.c (gimple_types_compatible_p): Disregard TYPE_STRUCTURAL_EQUALITY_P. (gimple_register_type): Use TYPE_CANONICAL as cache. * lto-streamer.c (lto_record_common_node): Zero TYPE_CANONICAL before registering common types. * config/i386/i386.c (ix86_function_arg_boundary): Do not use TYPE_CANONICAL, instead use TYPE_MAIN_VARIANT. * tree.h (TYPE_CANONICAL): Clarify documentation. lto/ * lto.c (lto_fixup_type): Do not register or fixup TYPE_CANONICAL. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160679 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/gimple.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'gcc/gimple.c') diff --git a/gcc/gimple.c b/gcc/gimple.c index b94998540de..1a10f31a405 100644 --- a/gcc/gimple.c +++ b/gcc/gimple.c @@ -3593,12 +3593,6 @@ gimple_types_compatible_p (tree t1, tree t2) { tree f1, f2; - /* If one type requires structural equality checks and the - other doesn't, do not merge the types. */ - if (TYPE_STRUCTURAL_EQUALITY_P (t1) - != TYPE_STRUCTURAL_EQUALITY_P (t2)) - goto different_types; - /* The struct tags shall compare equal. */ if (!compare_type_names_p (TYPE_MAIN_VARIANT (t1), TYPE_MAIN_VARIANT (t2), false)) @@ -3955,6 +3949,11 @@ gimple_register_type (tree t) gcc_assert (TYPE_P (t)); + /* In TYPE_CANONICAL we cache the result of gimple_register_type. + It is initially set to NULL during LTO streaming. */ + if (TYPE_CANONICAL (t)) + return TYPE_CANONICAL (t); + /* Always register the main variant first. This is important so we pick up the non-typedef variants as canonical, otherwise we'll end up taking typedef ids for structure tags during comparison. */ @@ -4018,10 +4017,14 @@ gimple_register_type (tree t) TYPE_NEXT_REF_TO (t) = NULL_TREE; } + TYPE_CANONICAL (t) = new_type; t = new_type; } else - *slot = (void *) t; + { + TYPE_CANONICAL (t) = t; + *slot = (void *) t; + } return t; } -- cgit v1.2.1