Mercurial > hg > truffle
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