From c38ee9a2e87ea6d23580c364b3997acfce4a125c Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Thu, 7 Nov 2019 17:06:04 +0000 Subject: [PATCH] lto-streamer-in.c: Include alloc-pool.h. * lto-streamer-in.c: Include alloc-pool.h. (freeing_string_slot_hasher): Remove. (string_slot_allocator): New object allocator. (file_name_hash_table): Turn to hash_table. (file_name_obstack): New obstack. (canon_file_name): Allocate in obstack and allocator. (lto_reader_init): Initialize obstack and allocator. (lto_free_file_name_hash): New function. * lto-streamer.h (lto_free_file_name_hash): New. * lto.c (do_whole_program_analysis): Call lto_free_file_name_hash. From-SVN: r277924 --- gcc/ChangeLog | 12 ++++++++++++ gcc/lto-streamer-in.c | 43 ++++++++++++++++++++++++++++--------------- gcc/lto-streamer.h | 1 + gcc/lto/ChangeLog | 4 ++++ gcc/lto/lto.c | 4 ++++ 5 files changed, 49 insertions(+), 15 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d3ef9311126..6fb0facd878 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2019-11-06 Jan Hubicka + + * lto-streamer-in.c: Include alloc-pool.h. + (freeing_string_slot_hasher): Remove. + (string_slot_allocator): New object allocator. + (file_name_hash_table): Turn to hash_table. + (file_name_obstack): New obstack. + (canon_file_name): Allocate in obstack and allocator. + (lto_reader_init): Initialize obstack and allocator. + (lto_free_file_name_hash): New function. + * lto-streamer.h (lto_free_file_name_hash): New. + 2019-11-07 Feng Xue PR tree-optimization/89134 diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c index 76a005e71e2..93ec8be5351 100644 --- a/gcc/lto-streamer-in.c +++ b/gcc/lto-streamer-in.c @@ -42,21 +42,18 @@ along with GCC; see the file COPYING3. If not see #include "cgraph.h" #include "cfgloop.h" #include "debug.h" +#include "alloc-pool.h" - -struct freeing_string_slot_hasher : string_slot_hasher -{ - static inline void remove (value_type *); -}; - -inline void -freeing_string_slot_hasher::remove (value_type *v) -{ - free (v); -} +/* Allocator used to hold string slot entries for line map streaming. */ +static struct object_allocator *string_slot_allocator; /* The table to hold the file names. */ -static hash_table *file_name_hash_table; +static hash_table *file_name_hash_table; + +/* This obstack holds file names used in locators. Line map datastructures + points here and thus it needs to be kept allocated as long as linemaps + exists. */ +static struct obstack file_name_obstack; /* Check that tag ACTUAL has one of the given values. NUM_TAGS is the @@ -113,8 +110,8 @@ canon_file_name (const char *string) char *saved_string; struct string_slot *new_slot; - saved_string = (char *) xmalloc (len + 1); - new_slot = XCNEW (struct string_slot); + saved_string = XOBNEWVEC (&file_name_obstack, char, len + 1); + new_slot = string_slot_allocator->allocate (); memcpy (saved_string, string, len + 1); new_slot->s = saved_string; new_slot->len = len; @@ -1722,7 +1719,23 @@ lto_reader_init (void) { lto_streamer_init (); file_name_hash_table - = new hash_table (37); + = new hash_table (37); + string_slot_allocator = new object_allocator + ("line map file name hash"); + gcc_obstack_init (&file_name_obstack); +} + +/* Free hash table used to stream in location file names. */ + +void +lto_free_file_name_hash (void) +{ + delete file_name_hash_table; + file_name_hash_table = NULL; + delete string_slot_allocator; + string_slot_allocator = NULL; + /* file_name_obstack must stay allocated since it is referred to by + line map table. */ } diff --git a/gcc/lto-streamer.h b/gcc/lto-streamer.h index 116642740f4..067a6660d2f 100644 --- a/gcc/lto-streamer.h +++ b/gcc/lto-streamer.h @@ -874,6 +874,7 @@ extern void lto_streamer_hooks_init (void); /* In lto-streamer-in.c */ extern void lto_input_cgraph (struct lto_file_decl_data *, const char *); extern void lto_reader_init (void); +extern void lto_free_file_name_hash (void); extern void lto_input_function_body (struct lto_file_decl_data *, struct cgraph_node *, const char *); diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 98554b88874..91a8ec1c8c8 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,7 @@ +2019-11-07 Jan Hubicka + + * lto.c (do_whole_program_analysis): Call lto_free_file_name_hash. + 2019-11-02 Jan Hubicka * lto-common.c (read_cgraph_and_symbols): Improve -Q reporting. diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index 86d58010e0e..9ef70da91a9 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -475,6 +475,10 @@ do_whole_program_analysis (void) /* We are about to launch the final LTRANS phase, stop the WPA timer. */ timevar_pop (TV_WHOPR_WPA); + /* We are no longer going to stream in anything. Free some memory. */ + lto_free_file_name_hash (); + + timevar_push (TV_WHOPR_PARTITIONING); gcc_assert (!dump_file); -- 2.30.2