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/