http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53547

             Bug #: 53547
           Summary: Changing the source file between -fprofile-generate
                    and -fprofile-use can lead to performance degradation
    Classification: Unclassified
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: gcov-profile
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: asha...@gcc.gnu.org


Created attachment 27536
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27536
Test case.

Please take a look at the attached test case.

gcc -O2 -fprofile-generate test.c
rm -rf test.gcda && ./a.out
gcc -O2 -fprofile-use -DSTALE test.c

Note that with -DSTALE, a function is added which changes the function id
ordering within the module. With this re-ordering, the profile data no longer
matches up with the updated source file.

What is worse is that the performance actually *drops* below that of regular
-O2 (without -fprofile-use). This is because the summary information (sum_max,
etc.) is still valid while the edge count is considered to be 0 for all edges.
This leads to pessimistic inlining decisions.

Here is a patch that fixes solves the performance loss:
http://codereview.appspot.com/5989046/

Reply via email to