> On 1/21/21 7:40 PM, Martin Liška wrote: > > Most of the changes are in known contexts: > > I've made some progress here, but still I'm unable to get a reproducible > build. > Now I see difference in: > > 161/ 649: cp/decl.o: different > 180/ 649: cp/parser.o: different > 262/ 649: generic-match.o: different > 283/ 649: gimple-match.o: different > 343/ 649: insn-emit.o: different > 360/ 649: ipa-icf.o: different > > looking at *profile dump files, I only have changes in tp_first_run which end > with a different output. > > Do you have any idea what can influence the minimum merging of tp_first_run > profiles?
What is function with smallest profile difference that differs? There are no really differences in edge counters at all? I suppose with memory randomization we may end up with different hash collisions and different number of calls in code resolving them or diferent leaders of equialence classes that may result in some divergence, but I would expect this to also show in edge counters... Honza > > Martin > > diff --git a/Makefile.in b/Makefile.in > index 03785200dc7..c8ebc90f622 100644 > --- a/Makefile.in > +++ b/Makefile.in > @@ -565,7 +565,7 @@ STAGEprofile_TFLAGS = $(STAGE2_TFLAGS) > STAGEtrain_CFLAGS = $(filter-out -fchecking=1,$(STAGE3_CFLAGS)) > STAGEtrain_TFLAGS = $(filter-out -fchecking=1,$(STAGE3_TFLAGS)) > > -STAGEfeedback_CFLAGS = $(STAGE4_CFLAGS) -fprofile-use > -fprofile-reproducible=parallel-runs > +STAGEfeedback_CFLAGS = $(STAGE4_CFLAGS) -fprofile-use > -fprofile-reproducible=parallel-runs -fdump-ipa-profile > STAGEfeedback_TFLAGS = $(STAGE4_TFLAGS) > > STAGEautoprofile_CFLAGS = $(STAGE2_CFLAGS) -g > diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c > index 1a114a2e2d0..6aeeb7118e1 100644 > --- a/gcc/cp/decl.c > +++ b/gcc/cp/decl.c > @@ -3927,6 +3927,7 @@ struct typename_hasher : ggc_ptr_hash<tree_node> > > static bool > equal (tree t1, const typename_info *t2) > + __attribute__ ((no_profile_instrument_function)) > { > return (TYPE_IDENTIFIER (t1) == t2->name > && TYPE_CONTEXT (t1) == t2->scope > diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c > index 4b2bca3fd11..3cd2130c3de 100644 > --- a/gcc/cp/parser.c > +++ b/gcc/cp/parser.c > @@ -1492,6 +1492,7 @@ static struct obstack declarator_obstack; > /* Alloc BYTES from the declarator memory pool. */ > > static inline void * > +__attribute__ ((no_profile_instrument_function)) > alloc_declarator (size_t bytes) > { > return obstack_alloc (&declarator_obstack, bytes); > @@ -23056,6 +23057,7 @@ cp_parser_late_return_type_opt (cp_parser* parser, > cp_declarator *declarator, > unqualified-id. */ > > static tree > +__attribute__ ((no_profile_instrument_function)) > cp_parser_declarator_id (cp_parser* parser, bool optional_p) > { > tree id; > diff --git a/gcc/hash-table.h b/gcc/hash-table.h > index a6e0ac8eea9..3a4d01d5ef8 100644 > --- a/gcc/hash-table.h > +++ b/gcc/hash-table.h > @@ -347,6 +347,7 @@ hash_table_mod1 (hashval_t hash, unsigned int index) > /* Compute the secondary table index for HASH given current prime index. */ > > inline hashval_t > +__attribute__ ((no_profile_instrument_function)) > hash_table_mod2 (hashval_t hash, unsigned int index) > { > const struct prime_ent *p = &prime_tab[index]; > @@ -422,7 +423,7 @@ public: > /* This function searches for a hash table entry equal to the given > COMPARABLE element starting with the given HASH value. It cannot > be used to insert or delete an element. */ > - value_type &find_with_hash (const compare_type &, hashval_t); > + value_type &find_with_hash (const compare_type &, hashval_t) __attribute__ > ((no_profile_instrument_function)); > > /* Like find_slot_with_hash, but compute the hash value from the element. > */ > value_type &find (const value_type &value) > @@ -443,7 +444,7 @@ public: > write the value you want into the returned slot. When inserting an > entry, NULL may be returned if memory allocation fails. */ > value_type *find_slot_with_hash (const compare_type &comparable, > - hashval_t hash, enum insert_option insert); > + hashval_t hash, enum insert_option insert) > __attribute__ ((no_profile_instrument_function)); > > /* This function deletes an element with the given COMPARABLE value > from hash table starting with the given HASH. If there is no > @@ -527,7 +528,7 @@ private: > void empty_slow (); > > value_type *alloc_entries (size_t n CXX_MEM_STAT_INFO) const; > - value_type *find_empty_slot_for_expand (hashval_t); > + value_type *find_empty_slot_for_expand (hashval_t) __attribute__ > ((no_profile_instrument_function)); > void verify (const compare_type &comparable, hashval_t hash); > bool too_empty_p (unsigned int); > void expand ();