src/share/vm/opto/c2compiler.cpp

Print this page

        

*** 42,65 **** #endif #ifdef TARGET_ARCH_MODEL_ppc # include "adfiles/ad_ppc.hpp" #endif - - volatile int C2Compiler::_runtimes = uninitialized; - // register information defined by ADLC extern const char register_save_policy[]; extern const int register_save_type[]; const char* C2Compiler::retry_no_subsuming_loads() { return "retry without subsuming loads"; } const char* C2Compiler::retry_no_escape_analysis() { return "retry without escape analysis"; } ! void C2Compiler::initialize_runtime() { // Check assumptions used while running ADLC Compile::adlc_verification(); assert(REG_COUNT <= ConcreteRegisterImpl::number_of_registers, "incompatible register counts"); --- 42,62 ---- #endif #ifdef TARGET_ARCH_MODEL_ppc # include "adfiles/ad_ppc.hpp" #endif // register information defined by ADLC extern const char register_save_policy[]; extern const int register_save_type[]; const char* C2Compiler::retry_no_subsuming_loads() { return "retry without subsuming loads"; } const char* C2Compiler::retry_no_escape_analysis() { return "retry without escape analysis"; } ! bool C2Compiler::init_c2_runtime() { // Check assumptions used while running ADLC Compile::adlc_verification(); assert(REG_COUNT <= ConcreteRegisterImpl::number_of_registers, "incompatible register counts");
*** 89,132 **** Compile::pd_compiler2_init(); CompilerThread* thread = CompilerThread::current(); HandleMark handle_mark(thread); ! ! OptoRuntime::generate(thread->env()); ! } void C2Compiler::initialize() { - - // This method can only be called once per C2Compiler object // The first compiler thread that gets here will initialize the ! // small amount of global state (and runtime stubs) that c2 needs. // There is a race possible once at startup and then we're fine // Note that this is being called from a compiler thread not the // main startup thread. ! ! if (_runtimes != initialized) { ! initialize_runtimes( initialize_runtime, &_runtimes); } - - // Mark this compiler object as ready to roll - mark_initialized(); } ! void C2Compiler::compile_method(ciEnv* env, ! ciMethod* target, ! int entry_bci) { ! if (!is_initialized()) { ! initialize(); ! } bool subsume_loads = SubsumeLoads; ! bool do_escape_analysis = DoEscapeAnalysis && ! !env->jvmti_can_access_local_variables(); bool eliminate_boxing = EliminateAutoBox; while (!env->failing()) { // Attempt to compile while subsuming loads into machine instructions. Compile C(env, this, target, entry_bci, subsume_loads, do_escape_analysis, eliminate_boxing); --- 86,119 ---- Compile::pd_compiler2_init(); CompilerThread* thread = CompilerThread::current(); HandleMark handle_mark(thread); ! return OptoRuntime::generate(thread->env()); } void C2Compiler::initialize() { // The first compiler thread that gets here will initialize the ! // small amount of global state (and runtime stubs) that C2 needs. // There is a race possible once at startup and then we're fine // Note that this is being called from a compiler thread not the // main startup thread. ! if (should_perform_init()) { ! bool successful = C2Compiler::init_c2_runtime(); ! int new_state = (successful) ? initialized : failed; ! set_state(new_state); } } ! void C2Compiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci) { ! assert(is_initialized(), "Compiler thread must be initialized"); ! bool subsume_loads = SubsumeLoads; ! bool do_escape_analysis = DoEscapeAnalysis && !env->jvmti_can_access_local_variables(); bool eliminate_boxing = EliminateAutoBox; while (!env->failing()) { // Attempt to compile while subsuming loads into machine instructions. Compile C(env, this, target, entry_bci, subsume_loads, do_escape_analysis, eliminate_boxing);