diff src/share/vm/graal/graalCompiler.hpp @ 16006:66a9286203a2

decoupled Graal runtime initialization and Graal compilation queue initialization
author Doug Simon <doug.simon@oracle.com>
date Tue, 03 Jun 2014 11:51:27 +0200
parents 063ec2920d21
children d32be0297274
line wrap: on
line diff
--- a/src/share/vm/graal/graalCompiler.hpp	Tue Jun 03 11:01:58 2014 +0200
+++ b/src/share/vm/graal/graalCompiler.hpp	Tue Jun 03 11:51:27 2014 +0200
@@ -31,8 +31,11 @@
 private:
 
 #ifdef COMPILERGRAAL
-  // Set to true once VMToCompiler.startCompiler() returns
-  bool _started;
+  bool _bootstrapping;
+
+  void start_compilation_queue();
+  void shutdown_compilation_queue();
+  void bootstrap();
 #endif
 
   static GraalCompiler* _instance;
@@ -66,8 +69,46 @@
   // Print compilation timers and statistics
   virtual void print_timers();
 
+  // Print compilation statistics
+  void reset_compilation_stats();
+
   void shutdown();
+#endif // COMPILERGRAAL
+
+#ifndef PRODUCT
+  void compile_the_world();
 #endif
 };
 
+#ifdef COMPILERGRAAL
+/**
+ * Creates a scope in which scheduling a Graal compilation is disabled.
+ * Scheduling a compilation can happen anywhere a counter can overflow and
+ * calling back into the Java code for scheduling a compilation (i.e.,
+ * CompilationTask.compileMetaspaceMethod()) from such arbitrary locations
+ * can cause objects to be in an unexpected state.
+ *
+ * In addition, it can be useful to disable compilation scheduling in
+ * other circumstances such as when initializing the Graal compilation
+ * queue or when running the Graal bootstrap process.
+ */
+class NoGraalCompilationScheduling: public StackObj {
+ private:
+  JavaThread* _thread;
+ public:
+
+  NoGraalCompilationScheduling(JavaThread *thread) {
+    assert(thread == JavaThread::current(), "not the current thread");
+    assert(thread->can_schedule_graal_compilation(), "recursive Graal compilation scheduling");
+    _thread = thread;
+    thread->set_can_schedule_graal_compilation(false);
+  }
+
+  ~NoGraalCompilationScheduling() {
+    assert(!_thread->can_schedule_graal_compilation(), "unexpected Graal compilation scheduling state");
+    _thread->set_can_schedule_graal_compilation(true);
+  }
+};
+#endif // COMPILERGRAAL
+
 #endif // SHARE_VM_GRAAL_GRAAL_COMPILER_HPP