This is the mail archive of the gcc-patches@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]

Do not stream BINFO_VIRTUALs to ltrans unit


Hi,
by accident I noticed that BINFO_VIRTUALs streaming is really expensive. It
about doubles amount of IL and types streamed by Mozilla.

One obvious optimization is to not stream into ltrans unit where it is
too late to do any useful devirtualization anyway.
Doing so reduces /tmp usage from 1.7GB to 1.1GB and proportionaly reduces
streaming out time.

Bootstrapped/regtested x86_64-linux.
OK?
Honza
	* lto-streamer-out.c (lto_output_ts_binfo_tree_pointers): Do not
	stream BINFO_VIRTUALS to ltrans units.
Index: lto-streamer-out.c
===================================================================
--- lto-streamer-out.c	(revision 174985)
+++ lto-streamer-out.c	(working copy)
@@ -1117,7 +1117,11 @@
 
   lto_output_tree_or_ref (ob, BINFO_OFFSET (expr), ref_p);
   lto_output_tree_or_ref (ob, BINFO_VTABLE (expr), ref_p);
-  lto_output_tree_or_ref (ob, BINFO_VIRTUALS (expr), ref_p);
+  /* BINFO_VIRTUALS is used to drive type based devirtualizatoin.  It often links
+     together large portions of programs making it harder to partition.  Becuase
+     devirtualization is interesting before inlining, only, there is no real
+     need to ship it into ltrans partition.  */
+  lto_output_tree_or_ref (ob, flag_wpa ? NULL : BINFO_VIRTUALS (expr), ref_p);
   lto_output_tree_or_ref (ob, BINFO_VPTR_FIELD (expr), ref_p);
 
   output_uleb128 (ob, VEC_length (tree, BINFO_BASE_ACCESSES (expr)));


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