This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Compiler speed (vanilla vs. LTO, PGO and LTO+PGO)


> Interesting, I was able to get faste LTO+PGO compile times than non-LTO,PGO.
> I however did testng only on combine.c compliation, so not very scientific.
> 
> There are some cases FDO information is not streamed well in all cases.  I will
> post patch for that later today.  Perhaps it will make situation bit better.

Hi,
there is overflow in the histogram merging code truncating all gcov counters
that do not fit in integer. Fixed by the following patch I applied to mainline
as obvious.  It may make the LTO binaries noticeably smaller (we will see on
the next run of regular SPEC testers).

Honza

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 197205)
+++ ChangeLog	(working copy)
@@ -1,5 +1,9 @@
 2013-03-28  Jan Hubicka  <jh@suse.cz>
 
+	* lto-cgraph.c (merge_profile_summaries): Fix overflows.
+
+2013-03-28  Jan Hubicka  <jh@suse.cz>
+
 	* data-streamer-in.c (streamer_read_gcov_count): New function.
 	* gimple-streamer-out.c: Include value-prof.h.
 	(output_gimple_stmt): Output histogram.
Index: lto-cgraph.c
===================================================================
--- lto-cgraph.c	(revision 197205)
+++ lto-cgraph.c	(working copy)
@@ -1362,8 +1362,8 @@ merge_profile_summaries (struct lto_file
     {
       /* Scale up the min value as we did the corresponding sum_all
          above. Use that to find the new histogram index.  */
-      int scaled_min = RDIV (saved_profile_info->histogram[h_ix].min_value
-                             * saved_scale, REG_BR_PROB_BASE);
+      gcov_type scaled_min = RDIV (saved_profile_info->histogram[h_ix].min_value
+                                   * saved_scale, REG_BR_PROB_BASE);
       /* The new index may be shared with another scaled histogram entry,
          so we need to account for a non-zero histogram entry at new_ix.  */
       unsigned new_ix = gcov_histo_index (scaled_min);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]