/* Timing variables for measuring compiler performance.
- Copyright (C) 2000, 2003, 2004, 2005, 2007, 2009
- Free Software Foundation, Inc.
+ Copyright (C) 2000-2014 Free Software Foundation, Inc.
Contributed by Alex Samuel <samuel@codesourcery.com>
This file is part of GCC.
double wall;
/* Garbage collector memory. */
- unsigned ggc_mem;
+ size_t ggc_mem;
};
/* An enumeration of timing variable identifiers. Constructed from
timevar_id_t;
#undef DEFTIMEVAR
-/* Execute the sequence: timevar_pop (TV), return (E); */
-#define POP_TIMEVAR_AND_RETURN(TV, E) do { timevar_pop (TV); return (E); }while(0)
-#define timevar_pop(TV) do { if (timevar_enable) timevar_pop_1 (TV); }while(0)
-#define timevar_push(TV) do { if (timevar_enable) timevar_push_1 (TV); }while(0)
+/* True if timevars should be used. In GCC, this happens with
+ the -ftime-report flag. */
+extern bool timevar_enable;
+
+/* Total amount of memory allocated by garbage collector. */
+extern size_t timevar_ggc_mem_total;
extern void timevar_init (void);
extern void timevar_push_1 (timevar_id_t);
extern void timevar_pop_1 (timevar_id_t);
extern void timevar_start (timevar_id_t);
extern void timevar_stop (timevar_id_t);
+extern bool timevar_cond_start (timevar_id_t);
+extern void timevar_cond_stop (timevar_id_t, bool);
extern void timevar_print (FILE *);
/* Provided for backward compatibility. */
-extern void print_time (const char *, long);
+static inline void
+timevar_push (timevar_id_t tv)
+{
+ if (timevar_enable)
+ timevar_push_1 (tv);
+}
-extern bool timevar_enable;
+static inline void
+timevar_pop (timevar_id_t tv)
+{
+ if (timevar_enable)
+ timevar_pop_1 (tv);
+}
-extern size_t timevar_ggc_mem_total;
+// This is a simple timevar wrapper class that pushes a timevar in its
+// constructor and pops the timevar in its destructor.
+class auto_timevar
+{
+ public:
+ auto_timevar (timevar_id_t tv)
+ : m_tv (tv)
+ {
+ timevar_push (m_tv);
+ }
+
+ ~auto_timevar ()
+ {
+ timevar_pop (m_tv);
+ }
+
+ private:
+
+ // Private to disallow copies.
+ auto_timevar (const auto_timevar &);
+
+ timevar_id_t m_tv;
+};
+
+extern void print_time (const char *, long);
#endif /* ! GCC_TIMEVAR_H */