[PATCH][?/n] Cleanup LTO type merging

Richard Guenther rguenther@suse.de
Tue May 17 11:41:00 GMT 2011


On Mon, 16 May 2011, Jan Hubicka wrote:

> > 
> > I've seen us merge different named structs which happen to reside
> > on the same variant list.  That's bogus, not only because we are
> > adjusting TYPE_MAIN_VARIANT during incremental type-merging and
> > fixup, so computing a persistent hash by looking at it looks
> > fishy as well.
> 
> Hi,
> as reported on IRC earlier, I get the segfault while building libxul
> duea to infinite recursion problem.
> 
> I now however also get a lot more of the following ICEs:
> In function '__unguarded_insertion_sort':
> lto1: internal compiler error: in splice_child_die, at dwarf2out.c:8274
> previously it reported once during Mozilla build (and I put testcase into
> bugzilla), now it reproduces on many libraries. I did not see this problem
> when applying only the SCC hasing change.

This change causes us to preserve more TYPE_DECLs I think, so we might
run more often into pre-existing debuginfo issues.  Previously most
of the types were merged into their nameless variant which probably
didn't get output into debug info.

Do you by chance have small testcases for your problems? ;)

Richard.

> perhaps another unrelated thing, but I now also get undefined symbols during
> the builds.
> 
> Honza
> > 
> > Bootstrapped and tested on x86_64-unknown-linux-gnu.
> > 
> > Richard.
> > 
> > 2011-05-16  Richard Guenther  <rguenther@suse.de>
> > 
> > 	* gimple.c (gimple_types_compatible_p_1): Use names of the
> > 	type itself, not its main variant.
> > 	(iterative_hash_gimple_type): Likewise.
> > 
> > Index: gcc/gimple.c
> > ===================================================================
> > *** gcc/gimple.c	(revision 173794)
> > --- gcc/gimple.c	(working copy)
> > *************** gimple_types_compatible_p_1 (tree t1, tr
> > *** 3817,3824 ****
> >   	tree f1, f2;
> >   
> >   	/* The struct tags shall compare equal.  */
> > ! 	if (!compare_type_names_p (TYPE_MAIN_VARIANT (t1),
> > ! 				   TYPE_MAIN_VARIANT (t2), false))
> >   	  goto different_types;
> >   
> >   	/* For aggregate types, all the fields must be the same.  */
> > --- 3817,3823 ----
> >   	tree f1, f2;
> >   
> >   	/* The struct tags shall compare equal.  */
> > ! 	if (!compare_type_names_p (t1, t2, false))
> >   	  goto different_types;
> >   
> >   	/* For aggregate types, all the fields must be the same.  */
> > *************** iterative_hash_gimple_type (tree type, h
> > *** 4193,4199 ****
> >         unsigned nf;
> >         tree f;
> >   
> > !       v = iterative_hash_name (TYPE_NAME (TYPE_MAIN_VARIANT (type)), v);
> >   
> >         for (f = TYPE_FIELDS (type), nf = 0; f; f = TREE_CHAIN (f))
> >   	{
> > --- 4192,4198 ----
> >         unsigned nf;
> >         tree f;
> >   
> > !       v = iterative_hash_name (TYPE_NAME (type), v);
> >   
> >         for (f = TYPE_FIELDS (type), nf = 0; f; f = TREE_CHAIN (f))
> >   	{
> 
> 

-- 
Richard Guenther <rguenther@suse.de>
Novell / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer


More information about the Gcc-patches mailing list