/* This file contains the definitions for timing variables used to -*- C -*-
   measure run-time performance of the compiler.

   Copyright (C) 2002, 2007, 2009-2015, 2018-2019 Free Software
   Foundation, Inc.

   Contributed by Akim Demaille <akim@freefriends.org>.

   This file is part of Bison, the GNU Compiler Compiler.

   This program is free software: you can redistribute it and/or modify
   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,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

/* This file contains timing variable definitions, used by timevar.h
   and timevar.c.

   Syntax:

     DEFTIMEVAR (id, name)

   where ID is the enum value used to identify the timing
   variable, and NAME is a character string describing its purpose.  */

/* The total execution time.  */
DEFTIMEVAR (tv_total                 , "total time")

/* Time spent in the reader.  */
DEFTIMEVAR (tv_reader                , "reader")
DEFTIMEVAR (tv_scanning              , "scanner")
DEFTIMEVAR (tv_parsing               , "parser")

/* Time spent handling the grammar.  */
DEFTIMEVAR (tv_reduce                , "reducing the grammar")
DEFTIMEVAR (tv_sets                  , "computing the sets")
DEFTIMEVAR (tv_lr0                   , "LR(0)")
DEFTIMEVAR (tv_lalr                  , "LALR(1)")
DEFTIMEVAR (tv_ielr_phase1           , "IELR(1) Phase 1")
DEFTIMEVAR (tv_ielr_phase2           , "IELR(1) Phase 2")
DEFTIMEVAR (tv_ielr_phase3           , "IELR(1) Phase 3")
DEFTIMEVAR (tv_ielr_phase4           , "IELR(1) Phase 4")
DEFTIMEVAR (tv_conflicts             , "conflicts")

/* Time spent outputting results.  */
DEFTIMEVAR (tv_report                , "outputting report")
DEFTIMEVAR (tv_graph                 , "outputting graph")
DEFTIMEVAR (tv_xml                   , "outputting xml")
DEFTIMEVAR (tv_actions               , "parser action tables")
DEFTIMEVAR (tv_parser                , "outputting parser")
DEFTIMEVAR (tv_m4                    , "running m4")

/* Time spent by freeing the memory :).  */
DEFTIMEVAR (tv_free                  , "freeing")
