src/share/vm/compiler/abstractCompiler.hpp
Print this page
@@ -25,26 +25,22 @@
#ifndef SHARE_VM_COMPILER_ABSTRACTCOMPILER_HPP
#define SHARE_VM_COMPILER_ABSTRACTCOMPILER_HPP
#include "ci/compilerInterface.hpp"
-typedef void (*initializer)(void);
-
class AbstractCompiler : public CHeapObj<mtCompiler> {
- private:
- bool _is_initialized; // Mark whether compiler object is initialized
-
protected:
+ volatile int _compiler_state;
// Used for tracking global state of compiler runtime initialization
- enum { uninitialized, initializing, initialized };
+ enum { uninitialized, initializing, initialized, failed };
- // This method will call the initialization method "f" once (per compiler class/subclass)
- // and do so without holding any locks
- void initialize_runtimes(initializer f, volatile int* state);
+ // This method returns true for the first compiler thread that reaches that methods.
+ // This thread will initialize the compiler runtime.
+ bool should_perform_init();
public:
- AbstractCompiler() : _is_initialized(false) {}
+ AbstractCompiler() : _compiler_state(uninitialized) {}
// Name of this compiler
virtual const char* name() = 0;
// Missing feature tests
@@ -72,21 +68,18 @@
bool is_shark() { return true; }
#endif // SHARK
#endif // TIERED
// Customization
- virtual bool needs_stubs () = 0;
-
- void mark_initialized() { _is_initialized = true; }
- bool is_initialized() { return _is_initialized; }
-
- virtual void initialize() = 0;
+ virtual void initialize () = 0;
+ // Get/set state of compiler objects
+ bool is_initialized () { return _compiler_state == initialized; }
+ bool is_state_failed () { return _compiler_state == failed; }
+ void set_state (int state);
// Compilation entry point for methods
- virtual void compile_method(ciEnv* env,
- ciMethod* target,
- int entry_bci) {
+ virtual void compile_method(ciEnv* env, ciMethod* target, int entry_bci) {
ShouldNotReachHere();
}
// Print compilation timers and statistics