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]

Re: [patch] Add timers around PCH save/restore


On Mon, Apr 12, 2010 at 11:54 PM, Diego Novillo <dnovillo@google.com> wrote:
>
> This patch adds several timers around PCH generation and restore.
>
> Tested on x86_64. ?OK for trunk?

Ok.

Thanks,
Richard.

>
> Diego.
>
>
> ? ? ? ?* Makefile.in (c-pch.o, ggc-common.o): Depend on timevar.h.
> ? ? ? ?* c-pch.c: Include timevar.h.
> ? ? ? ?(c_common_write_pch): Use TV_PCH_SAVE and TV_PCH_CPP_SAVE timers.
> ? ? ? ?(c_common_read_pch): Use TV_PCH_RESTORE and TV_PCH_CPP_RESTORE
> ? ? ? ?timers.
> ? ? ? ?* ggc-common.c: Include timevar.h.
> ? ? ? ?(gt_pch_save): Use TV_PCH_PTR_REALLOC and TV_PCH_PTR_SORT
> ? ? ? ?timers.
> ? ? ? ?* timevar.def (TV_PCH_SAVE): Define.
> ? ? ? ?(TV_PCH_CPP_SAVE): Define.
> ? ? ? ?(TV_PCH_PTR_REALLOC): Define.
> ? ? ? ?(TV_PCH_PTR_SORT): Define.
> ? ? ? ?(TV_PCH_RESTORE): Define.
> ? ? ? ?(TV_PCH_CPP_RESTORE): Define.
>
> diff --git a/gcc/Makefile.in b/gcc/Makefile.in
> index 20529d0..3b1a49e 100644
> --- a/gcc/Makefile.in
> +++ b/gcc/Makefile.in
> @@ -2087,7 +2087,8 @@ c-dump.o : c-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
>
> ?c-pch.o : c-pch.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(CPPLIB_H) $(TREE_H) \
> ? ? ? ?$(C_COMMON_H) output.h $(TOPLEV_H) $(C_PRAGMA_H) $(GGC_H) debug.h \
> - ? ? ? langhooks.h $(FLAGS_H) hosthooks.h version.h $(TARGET_H) opts.h
> + ? ? ? langhooks.h $(FLAGS_H) hosthooks.h version.h $(TARGET_H) opts.h \
> + ? ? ? timevar.h
> ? ? ? ?$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) \
> ? ? ? ? ?-DHOST_MACHINE=\"$(host)\" -DTARGET_MACHINE=\"$(target)\" \
> ? ? ? ? ?$< $(OUTPUT_OPTION)
> @@ -2182,7 +2183,7 @@ gtype-desc.o: gtype-desc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
>
> ?ggc-common.o: ggc-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h ? ? ? ? \
> ? ? ? ?$(GGC_H) $(HASHTAB_H) $(TOPLEV_H) $(PARAMS_H) hosthooks.h ? ? ? \
> - ? ? ? $(HOSTHOOKS_DEF_H) vec.h $(PLUGIN_H)
> + ? ? ? $(HOSTHOOKS_DEF_H) vec.h $(PLUGIN_H) timevar.h
>
> ?ggc-page.o: ggc-page.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
> ? ? ? ?$(FLAGS_H) $(TOPLEV_H) $(GGC_H) $(TIMEVAR_H) $(TM_P_H) $(PARAMS_H) $(TREE_FLOW_H) $(PLUGIN_H)
> diff --git a/gcc/c-pch.c b/gcc/c-pch.c
> index 8433f86..951ab1f 100644
> --- a/gcc/c-pch.c
> +++ b/gcc/c-pch.c
> @@ -35,6 +35,7 @@ along with GCC; see the file COPYING3. ?If not see
> ?#include "hosthooks.h"
> ?#include "target.h"
> ?#include "opts.h"
> +#include "timevar.h"
>
> ?/* This is a list of flag variables that must match exactly, and their
> ? ?names for the error message. ?The possible values for *flag_var must
> @@ -178,6 +179,8 @@ c_common_write_pch (void)
> ? long written;
> ? struct c_pch_header h;
>
> + ?timevar_push (TV_PCH_SAVE);
> +
> ? (*debug_hooks->handle_pch) (1);
>
> ? cpp_write_pch_deps (parse_in, pch_outfile);
> @@ -211,13 +214,18 @@ c_common_write_pch (void)
> ? ? fatal_error ("can%'t seek in %s: %m", asm_file_name);
>
> ? gt_pch_save (pch_outfile);
> +
> + ?timevar_push (TV_PCH_CPP_SAVE);
> ? cpp_write_pch_state (parse_in, pch_outfile);
> + ?timevar_pop (TV_PCH_CPP_SAVE);
>
> ? if (fseek (pch_outfile, 0, SEEK_SET) != 0
> ? ? ? || fwrite (get_ident (), IDENT_LENGTH, 1, pch_outfile) != 1)
> ? ? fatal_error ("can%'t write %s: %m", pch_file);
>
> ? fclose (pch_outfile);
> +
> + ?timevar_pop (TV_PCH_SAVE);
> ?}
>
> ?/* Check the PCH file called NAME, open on FD, to see if it can be
> @@ -371,12 +379,14 @@ c_common_read_pch (cpp_reader *pfile, const char *name,
> ? expanded_location saved_loc;
> ? bool saved_trace_includes;
>
> + ?timevar_push (TV_PCH_RESTORE);
> +
> ? f = fdopen (fd, "rb");
> ? if (f == NULL)
> ? ? {
> ? ? ? cpp_errno (pfile, CPP_DL_ERROR, "calling fdopen");
> ? ? ? close (fd);
> - ? ? ?return;
> + ? ? ?goto end;
> ? ? }
>
> ? cpp_get_callbacks (parse_in)->valid_pch = NULL;
> @@ -385,7 +395,7 @@ c_common_read_pch (cpp_reader *pfile, const char *name,
> ? ? {
> ? ? ? cpp_errno (pfile, CPP_DL_ERROR, "reading");
> ? ? ? fclose (f);
> - ? ? ?return;
> + ? ? ?goto end;
> ? ? }
>
> ? if (!flag_preprocess_only)
> @@ -417,15 +427,21 @@ c_common_read_pch (cpp_reader *pfile, const char *name,
> ? saved_loc = expand_location (line_table->highest_line);
> ? saved_trace_includes = line_table->trace_includes;
>
> + ?timevar_push (TV_PCH_CPP_RESTORE);
> ? cpp_prepare_state (pfile, &smd);
> + ?timevar_pop (TV_PCH_CPP_RESTORE);
>
> ? gt_pch_restore (f);
>
> + ?timevar_push (TV_PCH_CPP_RESTORE);
> ? if (cpp_read_state (pfile, name, f, smd) != 0)
> ? ? {
> ? ? ? fclose (f);
> - ? ? ?return;
> + ? ? ?timevar_pop (TV_PCH_CPP_RESTORE);
> + ? ? ?goto end;
> ? ? }
> + ?timevar_pop (TV_PCH_CPP_RESTORE);
> +
>
> ? fclose (f);
>
> @@ -437,6 +453,9 @@ c_common_read_pch (cpp_reader *pfile, const char *name,
> ? ? ?been loaded. ?*/
> ? if (lang_post_pch_load)
> ? ? (*lang_post_pch_load) ();
> +
> +end:
> + ?timevar_pop (TV_PCH_RESTORE);
> ?}
>
> ?/* Indicate that no more PCH files should be read. ?*/
> diff --git a/gcc/ggc-common.c b/gcc/ggc-common.c
> index fc42f45..28c2b79 100644
> --- a/gcc/ggc-common.c
> +++ b/gcc/ggc-common.c
> @@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. ?If not see
> ?#include "hosthooks-def.h"
> ?#include "plugin.h"
> ?#include "vec.h"
> +#include "timevar.h"
>
> ?#ifdef HAVE_SYS_RESOURCE_H
> ?# include <sys/resource.h>
> @@ -501,6 +502,7 @@ gt_pch_save (FILE *f)
>
> ? gt_pch_save_stringpool ();
>
> + ?timevar_push (TV_PCH_PTR_REALLOC);
> ? saving_htab = htab_create (50000, saving_htab_hash, saving_htab_eq, free);
>
> ? for (rt = gt_ggc_rtab; *rt; rt++)
> @@ -532,8 +534,13 @@ gt_pch_save (FILE *f)
>
> ? state.ptrs = XNEWVEC (struct ptr_data *, state.count);
> ? state.ptrs_i = 0;
> +
> ? htab_traverse (saving_htab, call_alloc, &state);
> + ?timevar_pop (TV_PCH_PTR_REALLOC);
> +
> + ?timevar_push (TV_PCH_PTR_SORT);
> ? qsort (state.ptrs, state.count, sizeof (*state.ptrs), compare_ptr_data);
> + ?timevar_pop (TV_PCH_PTR_SORT);
>
> ? /* Write out all the scalar variables. ?*/
> ? for (rt = gt_pch_scalar_rtab; *rt; rt++)
> diff --git a/gcc/timevar.def b/gcc/timevar.def
> index deb853a..19dec14 100644
> --- a/gcc/timevar.def
> +++ b/gcc/timevar.def
> @@ -39,6 +39,14 @@ DEFTIMEVAR (TV_GC ? ? ? ? ? ? ? ? ? ?, "garbage collection")
> ?/* Time spent generating dump files. ?*/
> ?DEFTIMEVAR (TV_DUMP ? ? ? ? ? ? ? ? ?, "dump files")
>
> +/* Time spent saving/restoring PCH state. ?*/
> +DEFTIMEVAR (TV_PCH_SAVE ? ? ? ? ? ? ?, "PCH main state save")
> +DEFTIMEVAR (TV_PCH_CPP_SAVE ? ? ? ? ?, "PCH preprocessor state save")
> +DEFTIMEVAR (TV_PCH_PTR_REALLOC ? ? ? , "PCH pointer reallocation")
> +DEFTIMEVAR (TV_PCH_PTR_SORT ? ? ? ? ?, "PCH pointer sort")
> +DEFTIMEVAR (TV_PCH_RESTORE ? ? ? ? ? , "PCH main state restore")
> +DEFTIMEVAR (TV_PCH_CPP_RESTORE ? ? ? , "PCH preprocessor state restore")
> +
> ?DEFTIMEVAR (TV_CGRAPH ? ? ? ? ? ? ? ?, "callgraph construction")
> ?DEFTIMEVAR (TV_CGRAPHOPT ? ? ? ? ? ? , "callgraph optimization")
> ?DEFTIMEVAR (TV_IPA_CONSTANT_PROP ? ? , "ipa cp")
>


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