Import of GCC head 2002-10-11

This commit is contained in:
Paul Eggert
2002-10-13 04:42:59 +00:00
parent 835cbc3d42
commit 5b8dfa1d7a
2 changed files with 99 additions and 87 deletions

View File

@@ -1,43 +1,29 @@
/* Timing variables for measuring compiler performance. /* Timing variables for measuring compiler performance.
Copyright (C) 2000, 2002, 2004, 2005, 2006 Free Software Foundation, Inc. Copyright (C) 2000 Free Software Foundation, Inc.
Contributed by Alex Samuel <samuel@codesourcery.com> Contributed by Alex Samuel <samuel@codesourcery.com>
This program is free software: you can redistribute it and/or modify This file is part of GCC.
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful, GCC is free software; you can redistribute it and/or modify it under
but WITHOUT ANY WARRANTY; without even the implied warranty of the terms of the GNU General Public License as published by the Free
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Software Foundation; either version 2, or (at your option) any later
GNU General Public License for more details. version.
You should have received a copy of the GNU General Public License GCC is distributed in the hope that it will be useful, but WITHOUT ANY
along with this program. If not, see <http://www.gnu.org/licenses/>. */ WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
#include <config.h> You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING. If not, write to the Free
#if IN_GCC Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#include "config.h"
#include "system.h" #include "system.h"
#include "intl.h" #include "intl.h"
#include "rtl.h" #include "rtl.h"
#else
/* This source file is taken from the GCC source code, with slight
modifications that are under control of the IN_GCC preprocessor
variable. The !IN_GCC part of this file is specific to Bison. */
# include "../src/system.h"
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# endif
int timevar_report = 0;
#endif
#ifdef HAVE_SYS_TIMES_H #ifdef HAVE_SYS_TIMES_H
# include <sys/times.h> # include <sys/times.h>
#endif #endif
@@ -60,13 +46,13 @@ struct tms
#endif #endif
#if defined HAVE_DECL_GETRUSAGE && !HAVE_DECL_GETRUSAGE #if defined HAVE_DECL_GETRUSAGE && !HAVE_DECL_GETRUSAGE
extern int getrusage (int, struct rusage *); extern int getrusage PARAMS ((int, struct rusage *));
#endif #endif
#if defined HAVE_DECL_TIMES && !HAVE_DECL_TIMES #if defined HAVE_DECL_TIMES && !HAVE_DECL_TIMES
extern clock_t times (struct tms *); extern clock_t times PARAMS ((struct tms *));
#endif #endif
#if defined HAVE_DECL_CLOCK && !HAVE_DECL_CLOCK #if defined HAVE_DECL_CLOCK && !HAVE_DECL_CLOCK
extern clock_t clock (void); extern clock_t clock PARAMS ((void));
#endif #endif
#ifndef RUSAGE_SELF #ifndef RUSAGE_SELF
@@ -115,23 +101,21 @@ extern clock_t clock (void);
_constants_ variable at run time, anyway? */ _constants_ variable at run time, anyway? */
#ifdef USE_TIMES #ifdef USE_TIMES
static float ticks_to_msec; static float ticks_to_msec;
#define TICKS_TO_MSEC (1.0 / TICKS_PER_SECOND) #define TICKS_TO_MSEC (1 / (float)TICKS_PER_SECOND)
#endif #endif
#ifdef USE_CLOCK #ifdef USE_CLOCK
static float clocks_to_msec; static float clocks_to_msec;
#define CLOCKS_TO_MSEC (1.0 / CLOCKS_PER_SEC) #define CLOCKS_TO_MSEC (1 / (float)CLOCKS_PER_SEC)
#endif #endif
#if IN_GCC
#include "flags.h" #include "flags.h"
#endif
#include "timevar.h" #include "timevar.h"
/* See timevar.h for an explanation of timing variables. */ /* See timevar.h for an explanation of timing variables. */
/* This macro evaluates to nonzero if timing variables are enabled. */ /* This macro evaluates to nonzero if timing variables are enabled. */
#define TIMEVAR_ENABLE (timevar_report) #define TIMEVAR_ENABLE (time_report)
/* A timing variable. */ /* A timing variable. */
@@ -184,10 +168,11 @@ static struct timevar_stack_def *unused_stack_instances;
element. */ element. */
static struct timevar_time_def start_time; static struct timevar_time_def start_time;
static void get_time (struct timevar_time_def *); static void get_time
static void timevar_accumulate (struct timevar_time_def *, PARAMS ((struct timevar_time_def *));
struct timevar_time_def *, static void timevar_accumulate
struct timevar_time_def *); PARAMS ((struct timevar_time_def *, struct timevar_time_def *,
struct timevar_time_def *));
/* Fill the current times into TIME. The definition of this function /* Fill the current times into TIME. The definition of this function
also defines any or all of the HAVE_USER_TIME, HAVE_SYS_TIME, and also defines any or all of the HAVE_USER_TIME, HAVE_SYS_TIME, and
@@ -208,21 +193,12 @@ get_time (now)
#ifdef USE_TIMES #ifdef USE_TIMES
struct tms tms; struct tms tms;
now->wall = times (&tms) * ticks_to_msec; now->wall = times (&tms) * ticks_to_msec;
#if IN_GCC
now->user = tms.tms_utime * ticks_to_msec; now->user = tms.tms_utime * ticks_to_msec;
now->sys = tms.tms_stime * ticks_to_msec; now->sys = tms.tms_stime * ticks_to_msec;
#else
now->user = (tms.tms_utime + tms.tms_cutime) * ticks_to_msec;
now->sys = (tms.tms_stime + tms.tms_cstime) * ticks_to_msec;
#endif
#endif #endif
#ifdef USE_GETRUSAGE #ifdef USE_GETRUSAGE
struct rusage rusage; struct rusage rusage;
#if IN_GCC
getrusage (RUSAGE_SELF, &rusage); getrusage (RUSAGE_SELF, &rusage);
#else
getrusage (RUSAGE_CHILDREN, &rusage);
#endif
now->user = rusage.ru_utime.tv_sec + rusage.ru_utime.tv_usec * 1e-6; now->user = rusage.ru_utime.tv_sec + rusage.ru_utime.tv_usec * 1e-6;
now->sys = rusage.ru_stime.tv_sec + rusage.ru_stime.tv_usec * 1e-6; now->sys = rusage.ru_stime.tv_sec + rusage.ru_stime.tv_usec * 1e-6;
#endif #endif
@@ -232,17 +208,17 @@ get_time (now)
} }
} }
/* Add the difference between STOP and START to TIMER. */ /* Add the difference between STOP_TIME and START_TIME to TIMER. */
static void static void
timevar_accumulate (timer, start, stop) timevar_accumulate (timer, start_time, stop_time)
struct timevar_time_def *timer; struct timevar_time_def *timer;
struct timevar_time_def *start; struct timevar_time_def *start_time;
struct timevar_time_def *stop; struct timevar_time_def *stop_time;
{ {
timer->user += stop->user - start->user; timer->user += stop_time->user - start_time->user;
timer->sys += stop->sys - start->sys; timer->sys += stop_time->sys - start_time->sys;
timer->wall += stop->wall - start->wall; timer->wall += stop_time->wall - start_time->wall;
} }
/* Initialize timing variables. */ /* Initialize timing variables. */
@@ -444,7 +420,7 @@ timevar_print (fp)
FILE *fp; FILE *fp;
{ {
/* Only print stuff if we have some sort of time information. */ /* Only print stuff if we have some sort of time information. */
#if defined HAVE_USER_TIME || defined HAVE_SYS_TIME || defined HAVE_WALL_TIME #if defined (HAVE_USER_TIME) || defined (HAVE_SYS_TIME) || defined (HAVE_WALL_TIME)
unsigned int /* timevar_id_t */ id; unsigned int /* timevar_id_t */ id;
struct timevar_time_def *total = &timevars[TV_TOTAL].elapsed; struct timevar_time_def *total = &timevars[TV_TOTAL].elapsed;
struct timevar_time_def now; struct timevar_time_def now;
@@ -485,7 +461,7 @@ timevar_print (fp)
continue; continue;
/* Don't print timing variables if we're going to get a row of /* Don't print timing variables if we're going to get a row of
zeroes. */ zeroes. */
if (tv->elapsed.user < tiny if (tv->elapsed.user < tiny
&& tv->elapsed.sys < tiny && tv->elapsed.sys < tiny
&& tv->elapsed.wall < tiny) && tv->elapsed.wall < tiny)

View File

@@ -1,22 +1,24 @@
/* This file contains the definitions for timing variables used to -*- C -*- /* This file contains the definitions for timing variables used to
measure run-time performance of the compiler. measure run-time performance of the compiler.
Copyright (C) 2002, 2007 Free Software Foundation, Inc. Copyright (C) 2000 Free Software Foundation, Inc.
Contributed by Akim Demaille <akim@freefriends.org>. Contributed by Alex Samuel <samuel@codesourcery.com>
This file is part of Bison, the GNU Compiler Compiler. This file is part of GCC.
This program is free software: you can redistribute it and/or modify GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation; either version 2, or (at your option)
(at your option) any later version. any later version.
This program is distributed in the hope that it will be useful, GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */ along with GCC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This file contains timing variable definitions, used by timevar.h /* This file contains timing variable definitions, used by timevar.h
and timevar.c. and timevar.c.
@@ -31,25 +33,59 @@
/* The total execution time. */ /* The total execution time. */
DEFTIMEVAR (TV_TOTAL , "total time") DEFTIMEVAR (TV_TOTAL , "total time")
/* Time spent in the reader. */ /* Time spent garbage-collecting. */
DEFTIMEVAR (TV_READER , "reader") DEFTIMEVAR (TV_GC , "garbage collection")
DEFTIMEVAR (TV_SCANNING , "scanner")
DEFTIMEVAR (TV_PARSING , "parser")
/* Time spent handling the grammar. */ /* Time spent generating dump files. */
DEFTIMEVAR (TV_REDUCE , "reducing the grammar") DEFTIMEVAR (TV_DUMP , "dump files")
DEFTIMEVAR (TV_SETS , "computing the sets")
DEFTIMEVAR (TV_LR0 , "LR(0)")
DEFTIMEVAR (TV_LALR , "LALR(1)")
DEFTIMEVAR (TV_CONFLICTS , "conflicts")
/* Time spent outputing results. */ /* Time spent by constructing CFG. */
DEFTIMEVAR (TV_REPORT , "outputing report") DEFTIMEVAR (TV_CFG , "cfg construction")
DEFTIMEVAR (TV_GRAPH , "outputing graph") /* Time spent by cleaning up CFG. */
DEFTIMEVAR (TV_XML , "outputing xml") DEFTIMEVAR (TV_CLEANUP_CFG , "cfg cleanup")
DEFTIMEVAR (TV_ACTIONS , "parser action tables") DEFTIMEVAR (TV_DELETE_TRIVIALLY_DEAD , "trivially dead code")
DEFTIMEVAR (TV_PARSER , "outputing parser") /* Time spent by life analysis. */
DEFTIMEVAR (TV_M4 , "running m4") DEFTIMEVAR (TV_LIFE , "life analysis")
DEFTIMEVAR (TV_LIFE_UPDATE , "life info update")
/* Timing in various stages of the compiler. */
DEFTIMEVAR (TV_CPP , "preprocessing")
DEFTIMEVAR (TV_LEX , "lexical analysis")
DEFTIMEVAR (TV_PARSE , "parser")
DEFTIMEVAR (TV_EXPAND , "expand")
DEFTIMEVAR (TV_VARCONST , "varconst")
DEFTIMEVAR (TV_INTEGRATION , "integration")
DEFTIMEVAR (TV_JUMP , "jump")
DEFTIMEVAR (TV_CSE , "CSE")
DEFTIMEVAR (TV_GCSE , "global CSE")
DEFTIMEVAR (TV_LOOP , "loop analysis")
DEFTIMEVAR (TV_TRACER , "tracer")
DEFTIMEVAR (TV_CSE2 , "CSE 2")
DEFTIMEVAR (TV_BRANCH_PROB , "branch prediction")
DEFTIMEVAR (TV_FLOW , "flow analysis")
DEFTIMEVAR (TV_COMBINE , "combiner")
DEFTIMEVAR (TV_IFCVT , "if-conversion")
DEFTIMEVAR (TV_REGMOVE , "regmove")
DEFTIMEVAR (TV_MODE_SWITCH , "mode switching")
DEFTIMEVAR (TV_SCHED , "scheduling")
DEFTIMEVAR (TV_LOCAL_ALLOC , "local alloc")
DEFTIMEVAR (TV_GLOBAL_ALLOC , "global alloc")
DEFTIMEVAR (TV_RELOAD_CSE_REGS , "reload CSE regs")
DEFTIMEVAR (TV_FLOW2 , "flow 2")
DEFTIMEVAR (TV_IFCVT2 , "if-conversion 2")
DEFTIMEVAR (TV_PEEPHOLE2 , "peephole 2")
DEFTIMEVAR (TV_RENAME_REGISTERS , "rename registers")
DEFTIMEVAR (TV_SCHED2 , "scheduling 2")
DEFTIMEVAR (TV_MACH_DEP , "machine dep reorg")
DEFTIMEVAR (TV_DBR_SCHED , "delay branch sched")
DEFTIMEVAR (TV_REORDER_BLOCKS , "reorder blocks")
DEFTIMEVAR (TV_SHORTEN_BRANCH , "shorten branches")
DEFTIMEVAR (TV_REG_STACK , "reg stack")
DEFTIMEVAR (TV_TO_SSA , "convert to SSA")
DEFTIMEVAR (TV_SSA_CCP , "SSA CCP")
DEFTIMEVAR (TV_SSA_DCE , "SSA aggressive DCE")
DEFTIMEVAR (TV_FROM_SSA , "convert from SSA")
DEFTIMEVAR (TV_FINAL , "final")
DEFTIMEVAR (TV_SYMOUT , "symout")
/* Time spent by freeing the memory :). */ /* Everything else in rest_of_compilation not included above. */
DEFTIMEVAR (TV_FREE , "freeing") DEFTIMEVAR (TV_REST_OF_COMPILATION , "rest of compilation")