@@ -1,5 +1,9 @@
2014-03-19 Tom Tromey <tromey@redhat.com>
+ * timevar.h (auto_timevar): New class.
+
+2014-03-19 Tom Tromey <tromey@redhat.com>
+
* diagnostic.c (bt_stop): Use toplev::main.
* main.c (main): Update.
* toplev.c (do_compile): Remove argument. Don't check
@@ -1,5 +1,9 @@
2014-03-19 Tom Tromey <tromey@redhat.com>
+ * internal-api.c (compile): Use auto_timevar.
+
+2014-03-19 Tom Tromey <tromey@redhat.com>
+
* internal-api.c (compile): Use toplev, not toplev_options.
Simplify.
@@ -3737,8 +3737,6 @@ compile ()
if (get_bool_option (GCC_JIT_BOOL_OPTION_DUMP_GENERATED_CODE))
dump_generated_code ();
- timevar_push (TV_ASSEMBLE);
-
/* Gross hacks follow:
We have a .s file; we want a .so file.
We could reuse parts of gcc/gcc.c to do this.
@@ -3746,6 +3744,8 @@ compile ()
*/
/* FIXME: totally faking it for now, not even using pex */
{
+ auto_timevar assemble_timevar (TV_ASSEMBLE);
+
char cmd[1024];
snprintf (cmd, 1024, "gcc -shared %s -o %s",
m_path_s_file, m_path_so_file);
@@ -3753,20 +3753,16 @@ compile ()
printf ("cmd: %s\n", cmd);
int ret = system (cmd);
if (ret)
- {
- timevar_pop (TV_ASSEMBLE);
- return NULL;
- }
+ return NULL;
}
- timevar_pop (TV_ASSEMBLE);
// TODO: split out assembles vs linker
/* dlopen the .so file. */
{
- const char *error;
+ auto_timevar load_timevar (TV_LOAD);
- timevar_push (TV_LOAD);
+ const char *error;
/* Clear any existing error. */
dlerror ();
@@ -3779,8 +3775,6 @@ compile ()
result_obj = new result (handle);
else
result_obj = NULL;
-
- timevar_pop (TV_LOAD);
}
return result_obj;
@@ -1,5 +1,5 @@
/* Timing variables for measuring compiler performance.
- Copyright (C) 2000-2013 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.
@@ -110,6 +110,30 @@ timevar_pop (timevar_id_t tv)
timevar_pop_1 (tv);
}
+// 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 */