On Mon, 23 Mar 2015, Jakub Jelinek wrote: > Hi! > > The recent IPA ICF hashing changes broke -fcompare-debug, hashing in > pointers is not stable not just for -fcompare-debug, but supposedly even > just different runs with the exact same options could yield different > assembly. Hashing on DECL_UID is not good either, that is not guaranteed to > be the same for -g/-g0. > symtab_node::order is printed in the -fdump-final-insns= dumps, so I assume > it must be stable across -g/-g0. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
Ok. Thanks, Richard. > 2014-03-23 Jakub Jelinek <ja...@redhat.com> > > PR ipa/65521 > * ipa-icf.c (sem_item::update_hash_by_addr_refs): Hash > ultimate_alias_target ()->order ints instead of > ultimate_alias_target () pointers. > > * gcc.dg/pr65521.c: New test. > > --- gcc/ipa-icf.c.jj 2015-03-23 08:47:53.000000000 +0100 > +++ gcc/ipa-icf.c 2015-03-23 11:02:53.129630089 +0100 > @@ -575,7 +575,7 @@ sem_item::update_hash_by_addr_refs (hash > { > ref = node->iterate_reference (i, ref); > if (ref->address_matters_p () || !m_symtab_node_map.get > (ref->referred)) > - hstate.add_ptr (ref->referred->ultimate_alias_target ()); > + hstate.add_int (ref->referred->ultimate_alias_target ()->order); > } > > if (is_a <cgraph_node *> (node)) > @@ -585,7 +585,7 @@ sem_item::update_hash_by_addr_refs (hash > { > sem_item **result = m_symtab_node_map.get (e->callee); > if (!result) > - hstate.add_ptr (e->callee->ultimate_alias_target ()); > + hstate.add_int (e->callee->ultimate_alias_target ()->order); > } > } > > --- gcc/testsuite/gcc.dg/pr65521.c.jj 2015-03-23 11:03:16.190252436 +0100 > +++ gcc/testsuite/gcc.dg/pr65521.c 2015-03-23 11:02:07.000000000 +0100 > @@ -0,0 +1,39 @@ > +/* PR ipa/65521 */ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -fcompare-debug" } */ > + > +struct S { int s; }; > +int f6 (void *, unsigned long); > +int f7 (int, int *, unsigned long); > +int f8 (void); > +int f9 (void (*) (void)); > + > +int > +f1 (void *p) > +{ > + return f6 (p, 256UL); > +} > + > +int > +f2 (void *p) > +{ > + return f6 (p, 256UL); > +} > + > +int > +f3 (struct S *x) > +{ > + return f7 (f8 (), &x->s, 16UL); > +} > + > +int > +f4 (struct S *x) > +{ > + return f7 (f8 (), &x->s, 16UL); > +} > + > +void > +f5 (void) > +{ > + f9 (f5); > +} > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Jennifer Guild, Dilip Upmanyu, Graham Norton HRB 21284 (AG Nuernberg)