This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Do not stream BINFO_VIRTUALs to ltrans unit
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 13 Jun 2011 14:54:13 +0200
- Subject: 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)));