Honza, Thanks a lot for your information.
> On Mar 8, 2023, at 8:19 AM, Jan Hubicka <hubi...@ucw.cz> wrote: > >> Hi, Jan, >> >> I am studying one profiling feedback ICE bug with GCC8 recently. >> It’s an assertion failure inside the routine “compute_working_sets”of >> gcov-io.c: >> >> gcov_nonruntime_assert (ws_ix == NUM_GCOV_WORKING_SETS); >> >> After some debugging and study, I found that the corresponding .gcda file >> has two PROGRAM_SUMMARY sections: >> >> foo.gcda: a3000000: 202:PROGRAM_SUMMARY checksum=0x91f3e3ae >> foo.gcda: counts=10831, runs=0, sum_all=478965, >> run_max=125615, sum_max=201126 >> foo.gcda: counter histogram: >> foo.gcda: 0: num counts=10187, min counter=0, cum_counter=0 >> … >> foo.gcda: 51: num counts=1, min counter=14524, >> cum_counter=14524 >> foo.gcda: 63: num counts=1, min counter=125615, >> cum_counter=125615 >> foo.gcda: a3000000: 137:PROGRAM_SUMMARY checksum=0xcf9f0896 >> foo.gcda: counts=10502, runs=1, sum_all=48618, run_max=13999, >> sum_max=14046 >> foo.gcda: counter histogram: >> foo.gcda: 0: num counts=9821, min counter=0, cum_counter=0 >> … >> foo.gcda: 43: num counts=1, min counter=3830, >> cum_counter=3830 >> foo.gcda: 50: num counts=1, min counter=13999, >> cum_counter=13999 >> >> Looks like the 2nd PROGRAM_SUMMARY has some issue. If I manually change >> gcc/coverage.c >> to ignore the 2nd PROGRAM_SUMMARY section, the ICE disappears. >> >> I have several questions for the profiling feedback data file: >> >> 1. Under what situation, there will be multiple PROGRAM_SUMMARY sections for >> one module? > > This is itended to resolve situations where one object file is linked > into multiple final binaries (just like libbackend is linked into > multiple FEs). Okay, I see. (That was my guess too. -:) > The overall binary checksum is known to > the runtime and it creates entry for each checksum. Okay. >> 2. How to check whether one of the PROGRAM_SUMMARY has issue? > > The histograms was added by google to get better threshold for hot/cold > partitioning. They never worked too well, because it is hard to merge > histograms from multipe runs meaningfully, so we dropped them some time > ago. Just checked, the PROGRAM_SUMMARY has been removed completely since GCC9 with the following commit: commit 512cc0151207de4c7ff3a84f040f730fe0d52458 Author: Martin Liska <mli...@suse.cz> Date: Fri Sep 21 10:41:17 2018 +0200 Remove arc profile histogram in non-LTO mode. 2018-09-21 Martin Liska <mli...@suse.cz> > With LTO it is easier to produce the histogram after reading all > profiles together and without LTO we use easier heuristics that only > computes constant fraction of maximum number of iterations. Okay. > > What confuses me is the first summary having runs=0. I wonder how with > zero runs it even has an entry? I was surprised by this too. Don’t know the reason yet. The application that has this problem is huge. I don’t have the complete source codes and make files. The thing that is even more strange is, there are multiple files have the same ICE during profiling use phase, and as I checked today, all the corresponding .gcda files have the exactly same PROGRAM_SUMMARY sections, i.e. foo.gcda: foo.gcda: a3000000: 202:PROGRAM_SUMMARY checksum=0x91f3e3ae foo.gcda: counts=10831, runs=0, sum_all=478965, run_max=125615, sum_max=201126 foo.gcda: counter histogram: foo.gcda: 0: num counts=10187, min counter=0, cum_counter=0 … foo.gcda: 51: num counts=1, min counter=14524, cum_counter=14524 foo.gcda: 63: num counts=1, min counter=125615, cum_counter=125615 foo.gcda: a3000000: 137:PROGRAM_SUMMARY checksum=0xcf9f0896 foo.gcda: counts=10502, runs=1, sum_all=48618, run_max=13999, sum_max=14046 foo.gcda: counter histogram: foo.gcda: 0: num counts=9821, min counter=0, cum_counter=0 … foo.gcda: 43: num counts=1, min counter=3830, cum_counter=3830 foo.gcda: 50: num counts=1, min counter=13999, cum_counter=13999 foo_1.gcda: foo_1.gcda: a3000000: 202:PROGRAM_SUMMARY checksum=0x91f3e3ae foo_1.gcda: counts=10831, runs=0, sum_all=478965, run_max=125615, sum_max=201126 foo_1.gcda: counter histogram: foo_1.gcda: 0: num counts=10187, min counter=0, cum_counter=0 … foo_1.gcda: 51: num counts=1, min counter=14524, cum_counter=14524 foo_1.gcda: 63: num counts=1, min counter=125615, cum_counter=125615 foo_1.gcda: a3000000: 137:PROGRAM_SUMMARY checksum=0xcf9f0896 foo_1.gcda: counts=10502, runs=1, sum_all=48618, run_max=13999, sum_max=14046 foo_1.gcda: counter histogram: foo_1.gcda: 0: num counts=9821, min counter=0, cum_counter=0 … foo_1.gcda: 43: num counts=1, min counter=3830, cum_counter=3830 foo_1.gcda: 50: num counts=1, min counter=13999, cum_counter=13999 Exactly the same. Really don’t understand what’s going on. > > What is the assert that fials in gcov-io.c? during IPA pass: profile foo.c: In function ‘foo_print’: foo.c:509:1: internal compiler error: in compute_working_sets, at gcov-io.c:1066 (NOTE, I changed the names of the file and the function). For GCC8, what should we do to work around this issue? Do you have any suggestions? Thanks. Qing > > Honza > >> >> Thanks a lot for any help. >> >> Qing