ipa-cp.c (ipcp_cloning_candidate_p): Use opt_for_fn.
[gcc.git] / gcc / timevar.h
index d71ba3110c712768dac25a2de8f1b0ce364b950c..f018e39ce07c72507ae99b1088bf5f543b87cd62 100644 (file)
@@ -1,5 +1,5 @@
 /* Timing variables for measuring compiler performance.
-   Copyright (C) 2000, 2003, 2004, 2005, 2007 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.
@@ -62,7 +62,7 @@ struct timevar_time_def
   double wall;
 
   /* Garbage collector memory.  */
-  unsigned ggc_mem;
+  size_t ggc_mem;
 };
 
 /* An enumeration of timing variable identifiers.  Constructed from
@@ -72,29 +72,68 @@ struct timevar_time_def
     identifier__,
 typedef enum
 {
+  TV_NONE,
 #include "timevar.def"
   TIMEVAR_LAST
 }
 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 */