# HG changeset patch # User Lukas Stadler # Date 1352290684 -3600 # Node ID fd71ca8c5f88ff92f82835448e272cb583769eb8 # Parent a52320a6bbda24540b69887be5d7b1889f1ee71b VM infrstructure for OnStackReplacement diff -r a52320a6bbda -r fd71ca8c5f88 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Wed Nov 07 12:18:37 2012 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Wed Nov 07 13:18:04 2012 +0100 @@ -150,7 +150,7 @@ @Override public void run() { final CodeInfo[] info = Debug.isDumpEnabled() ? new CodeInfo[1] : null; - graalRuntime.getRuntime().installMethod(method, tm, info); + graalRuntime.getRuntime().installMethod(method, -1, tm, info); if (info != null) { Debug.dump(new Object[] {tm, info[0]}, "After code installation"); } diff -r a52320a6bbda -r fd71ca8c5f88 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCompilationResult.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCompilationResult.java Wed Nov 07 12:18:37 2012 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCompilationResult.java Wed Nov 07 13:18:04 2012 +0100 @@ -36,14 +36,16 @@ private static final long serialVersionUID = 7807321392203253218L; public final CompilationResult comp; public final HotSpotResolvedJavaMethod method; // used only for methods + public final int entryBCI; // used only for methods public final String name; // used only for stubs public final Site[] sites; public final ExceptionHandler[] exceptionHandlers; - public HotSpotCompilationResult(HotSpotResolvedJavaMethod method, CompilationResult comp) { + public HotSpotCompilationResult(HotSpotResolvedJavaMethod method, int entryBCI, CompilationResult comp) { this.method = method; this.comp = comp; + this.entryBCI = entryBCI; this.name = null; sites = getSortedSites(comp); diff -r a52320a6bbda -r fd71ca8c5f88 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Wed Nov 07 12:18:37 2012 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Wed Nov 07 13:18:04 2012 +0100 @@ -179,6 +179,7 @@ public long vmErrorStub; public long deoptimizeStub; public long unwindExceptionStub; + public long osrMigrationEndStub; public long registerFinalizerStub; public long setDeoptInfoStub; public long createNullPointerExceptionStub; diff -r a52320a6bbda -r fd71ca8c5f88 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Wed Nov 07 12:18:37 2012 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Wed Nov 07 13:18:04 2012 +0100 @@ -667,15 +667,15 @@ return hsInfo; } - public void installMethod(ResolvedJavaMethod method, CompilationResult compResult, CodeInfo[] info) { + public void installMethod(ResolvedJavaMethod method, int entryBCI, CompilationResult compResult, CodeInfo[] info) { HotSpotCodeInfo hsInfo = makeInfo(method, compResult, info); - graalRuntime.getCompilerToVM().installMethod(new HotSpotCompilationResult((HotSpotResolvedJavaMethod) method, compResult), true, hsInfo); + graalRuntime.getCompilerToVM().installMethod(new HotSpotCompilationResult((HotSpotResolvedJavaMethod) method, entryBCI, compResult), true, hsInfo); } @Override public InstalledCode addMethod(ResolvedJavaMethod method, CompilationResult compResult, CodeInfo[] info) { HotSpotCodeInfo hsInfo = makeInfo(method, compResult, info); - return graalRuntime.getCompilerToVM().installMethod(new HotSpotCompilationResult((HotSpotResolvedJavaMethod) method, compResult), false, hsInfo); + return graalRuntime.getCompilerToVM().installMethod(new HotSpotCompilationResult((HotSpotResolvedJavaMethod) method, -1, compResult), false, hsInfo); } @Override diff -r a52320a6bbda -r fd71ca8c5f88 src/cpu/x86/vm/c1_Runtime1_x86.cpp --- a/src/cpu/x86/vm/c1_Runtime1_x86.cpp Wed Nov 07 12:18:37 2012 +0100 +++ b/src/cpu/x86/vm/c1_Runtime1_x86.cpp Wed Nov 07 13:18:04 2012 +0100 @@ -1889,6 +1889,17 @@ break; } + case graal_OSR_migration_end_id: { + __ enter(); + save_live_registers(sasm, 0); + __ movptr(c_rarg0, j_rarg0); + __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::OSR_migration_end))); + restore_live_registers(sasm); + __ leave(); + __ ret(0); + break; + } + case graal_set_deopt_info_id: { __ movptr(Address(r15_thread, JavaThread::graal_deopt_info_offset()), rscratch1); __ ret(0); diff -r a52320a6bbda -r fd71ca8c5f88 src/cpu/x86/vm/c1_globals_x86.hpp --- a/src/cpu/x86/vm/c1_globals_x86.hpp Wed Nov 07 12:18:37 2012 +0100 +++ b/src/cpu/x86/vm/c1_globals_x86.hpp Wed Nov 07 13:18:04 2012 +0100 @@ -51,7 +51,7 @@ #ifdef GRAAL define_pd_global(bool, ProfileTraps, true ); -define_pd_global(bool, UseOnStackReplacement, false); +define_pd_global(bool, UseOnStackReplacement, true); define_pd_global(intx, CompileThreshold, 2500 ); define_pd_global(intx, InitialCodeCacheSize, 4*M ); define_pd_global(intx, ReservedCodeCacheSize, 64*M ); diff -r a52320a6bbda -r fd71ca8c5f88 src/share/vm/c1/c1_Runtime1.cpp --- a/src/share/vm/c1/c1_Runtime1.cpp Wed Nov 07 12:18:37 2012 +0100 +++ b/src/share/vm/c1/c1_Runtime1.cpp Wed Nov 07 13:18:04 2012 +0100 @@ -208,6 +208,7 @@ #ifdef GRAAL case graal_verify_oop_id: case graal_unwind_exception_call_id: + case graal_OSR_migration_end_id: case graal_arithmetic_frem_id: case graal_arithmetic_drem_id: case graal_set_deopt_info_id: diff -r a52320a6bbda -r fd71ca8c5f88 src/share/vm/c1/c1_Runtime1.hpp --- a/src/share/vm/c1/c1_Runtime1.hpp Wed Nov 07 12:18:37 2012 +0100 +++ b/src/share/vm/c1/c1_Runtime1.hpp Wed Nov 07 13:18:04 2012 +0100 @@ -71,6 +71,7 @@ stub(fpu2long_stub) \ stub(counter_overflow) \ stub(graal_unwind_exception_call) \ + stub(graal_OSR_migration_end) \ stub(graal_arithmetic_frem) \ stub(graal_arithmetic_drem) \ stub(graal_monitorenter) \ diff -r a52320a6bbda -r fd71ca8c5f88 src/share/vm/classfile/systemDictionary.hpp --- a/src/share/vm/classfile/systemDictionary.hpp Wed Nov 07 12:18:37 2012 +0100 +++ b/src/share/vm/classfile/systemDictionary.hpp Wed Nov 07 13:18:04 2012 +0100 @@ -200,13 +200,13 @@ template(BytecodePosition_klass, com_oracle_graal_api_code_BytecodePosition, Opt) \ template(DebugInfo_klass, com_oracle_graal_api_code_DebugInfo, Opt) \ template(BytecodeFrame_klass, com_oracle_graal_api_code_BytecodeFrame, Opt) \ - template(InstalledCode_klass, com_oracle_graal_api_code_InstalledCode, Opt) \ - template(InstalledCode_Call_klass, com_oracle_graal_api_code_InstalledCode_Call, Opt) \ - template(InstalledCode_DataPatch_klass, com_oracle_graal_api_code_InstalledCode_DataPatch, Opt) \ - template(InstalledCode_ExceptionHandler_klass, com_oracle_graal_api_code_InstalledCode_ExceptionHandler, Opt) \ - template(InstalledCode_Mark_klass, com_oracle_graal_api_code_InstalledCode_Mark, Opt) \ - template(InstalledCode_Safepoint_klass, com_oracle_graal_api_code_InstalledCode_Safepoint, Opt) \ - template(InstalledCode_Site_klass, com_oracle_graal_api_code_InstalledCode_Site, Opt) \ + template(CompilationResult_klass, com_oracle_graal_api_code_CompilationResult, Opt) \ + template(CompilationResult_Call_klass, com_oracle_graal_api_code_CompilationResult_Call, Opt) \ + template(CompilationResult_DataPatch_klass, com_oracle_graal_api_code_CompilationResult_DataPatch, Opt) \ + template(CompilationResult_ExceptionHandler_klass, com_oracle_graal_api_code_CompilationResult_ExceptionHandler, Opt) \ + template(CompilationResult_Mark_klass, com_oracle_graal_api_code_CompilationResult_Mark, Opt) \ + template(CompilationResult_Safepoint_klass, com_oracle_graal_api_code_CompilationResult_Safepoint, Opt) \ + template(CompilationResult_Site_klass, com_oracle_graal_api_code_CompilationResult_Site, Opt) \ template(code_MonitorValue_klass, com_oracle_graal_api_code_MonitorValue, Opt) \ template(code_Register_klass, com_oracle_graal_api_code_Register, Opt) \ template(RegisterValue_klass, com_oracle_graal_api_code_RegisterValue, Opt) \ diff -r a52320a6bbda -r fd71ca8c5f88 src/share/vm/classfile/vmSymbols.hpp --- a/src/share/vm/classfile/vmSymbols.hpp Wed Nov 07 12:18:37 2012 +0100 +++ b/src/share/vm/classfile/vmSymbols.hpp Wed Nov 07 13:18:04 2012 +0100 @@ -303,13 +303,13 @@ template(com_oracle_graal_api_code_Assumptions_MethodContents, "com/oracle/graal/api/code/Assumptions$MethodContents") \ template(com_oracle_graal_api_code_Assumptions_ConcreteSubtype, "com/oracle/graal/api/code/Assumptions$ConcreteSubtype") \ template(com_oracle_graal_api_code_Assumptions_ConcreteMethod, "com/oracle/graal/api/code/Assumptions$ConcreteMethod") \ - template(com_oracle_graal_api_code_InstalledCode, "com/oracle/graal/api/code/CompilationResult") \ - template(com_oracle_graal_api_code_InstalledCode_Call, "com/oracle/graal/api/code/CompilationResult$Call") \ - template(com_oracle_graal_api_code_InstalledCode_DataPatch, "com/oracle/graal/api/code/CompilationResult$DataPatch") \ - template(com_oracle_graal_api_code_InstalledCode_ExceptionHandler, "com/oracle/graal/api/code/CompilationResult$ExceptionHandler") \ - template(com_oracle_graal_api_code_InstalledCode_Mark, "com/oracle/graal/api/code/CompilationResult$Mark") \ - template(com_oracle_graal_api_code_InstalledCode_Safepoint, "com/oracle/graal/api/code/CompilationResult$Safepoint") \ - template(com_oracle_graal_api_code_InstalledCode_Site, "com/oracle/graal/api/code/CompilationResult$Site") \ + template(com_oracle_graal_api_code_CompilationResult, "com/oracle/graal/api/code/CompilationResult") \ + template(com_oracle_graal_api_code_CompilationResult_Call, "com/oracle/graal/api/code/CompilationResult$Call") \ + template(com_oracle_graal_api_code_CompilationResult_DataPatch, "com/oracle/graal/api/code/CompilationResult$DataPatch") \ + template(com_oracle_graal_api_code_CompilationResult_ExceptionHandler, "com/oracle/graal/api/code/CompilationResult$ExceptionHandler") \ + template(com_oracle_graal_api_code_CompilationResult_Mark, "com/oracle/graal/api/code/CompilationResult$Mark") \ + template(com_oracle_graal_api_code_CompilationResult_Safepoint, "com/oracle/graal/api/code/CompilationResult$Safepoint") \ + template(com_oracle_graal_api_code_CompilationResult_Site, "com/oracle/graal/api/code/CompilationResult$Site") \ template(com_oracle_graal_api_code_BytecodeFrame, "com/oracle/graal/api/code/BytecodeFrame") \ template(com_oracle_graal_api_code_BytecodePosition, "com/oracle/graal/api/code/BytecodePosition") \ template(com_oracle_graal_api_code_DebugInfo, "com/oracle/graal/api/code/DebugInfo") \ diff -r a52320a6bbda -r fd71ca8c5f88 src/share/vm/graal/graalCodeInstaller.cpp --- a/src/share/vm/graal/graalCodeInstaller.cpp Wed Nov 07 12:18:37 2012 +0100 +++ b/src/share/vm/graal/graalCodeInstaller.cpp Wed Nov 07 13:18:04 2012 +0100 @@ -247,7 +247,7 @@ _env->set_oop_recorder(_oop_recorder); _env->set_dependencies(_dependencies); _dependencies = new Dependencies(_env); - Handle assumptions_handle = InstalledCode::assumptions(HotSpotCompilationResult::comp(target_method)); + Handle assumptions_handle = CompilationResult::assumptions(HotSpotCompilationResult::comp(target_method)); if (!assumptions_handle.is_null()) { objArrayHandle assumptions(Thread::current(), (objArrayOop)Assumptions::list(assumptions_handle())); int length = assumptions->length(); @@ -275,6 +275,7 @@ GraalCompiler::initialize_buffer_blob(); CodeBuffer buffer(JavaThread::current()->get_buffer_blob()); jobject comp_result_obj = JNIHandles::make_local(comp_result()); + jint entry_bci = HotSpotCompilationResult::entryBCI(comp_result); initialize_assumptions(JNIHandles::resolve(comp_result_obj)); { @@ -287,7 +288,7 @@ int stack_slots = _total_frame_size / HeapWordSize; // conversion to words methodHandle method = getMethodFromHotSpotMethod(HotSpotCompilationResult::method(JNIHandles::resolve(comp_result_obj))); - nm = GraalEnv::register_method(method, -1, &_offsets, _custom_stack_area_offset, &buffer, stack_slots, _debug_recorder->_oopmaps, &_exception_handler_table, + nm = GraalEnv::register_method(method, entry_bci, &_offsets, _custom_stack_area_offset, &buffer, stack_slots, _debug_recorder->_oopmaps, &_exception_handler_table, &_implicit_exception_table, GraalCompiler::instance(), _debug_recorder, _dependencies, NULL, -1, true, false, install_code); method->clear_queued_for_compilation(); @@ -326,11 +327,11 @@ _sites = (arrayOop) HotSpotCompilationResult::sites(comp_result); _exception_handlers = (arrayOop) HotSpotCompilationResult::exceptionHandlers(comp_result); - _code = (arrayOop) InstalledCode::targetCode(_comp_result); - _code_size = InstalledCode::targetCodeSize(_comp_result); + _code = (arrayOop) CompilationResult::targetCode(_comp_result); + _code_size = CompilationResult::targetCodeSize(_comp_result); // The frame size we get from the target method does not include the return address, so add one word for it here. - _total_frame_size = InstalledCode::frameSize(_comp_result) + HeapWordSize; - _custom_stack_area_offset = InstalledCode::customStackAreaOffset(_comp_result); + _total_frame_size = CompilationResult::frameSize(_comp_result) + HeapWordSize; + _custom_stack_area_offset = CompilationResult::customStackAreaOffset(_comp_result); // (very) conservative estimate: each site needs a constant section entry _constants_size = _sites->length() * (BytesPerLong*2); @@ -363,18 +364,18 @@ oop* sites = (oop*) _sites->base(T_OBJECT); for (int i = 0; i < _sites->length(); i++) { oop site = sites[i]; - jint pc_offset = InstalledCode_Site::pcOffset(site); + jint pc_offset = CompilationResult_Site::pcOffset(site); - if (site->is_a(InstalledCode_Call::klass())) { + if (site->is_a(CompilationResult_Call::klass())) { TRACE_graal_4("call at %i", pc_offset); site_Call(buffer, pc_offset, site); - } else if (site->is_a(InstalledCode_Safepoint::klass())) { + } else if (site->is_a(CompilationResult_Safepoint::klass())) { TRACE_graal_4("safepoint at %i", pc_offset); site_Safepoint(buffer, pc_offset, site); - } else if (site->is_a(InstalledCode_DataPatch::klass())) { + } else if (site->is_a(CompilationResult_DataPatch::klass())) { TRACE_graal_4("datapatch at %i", pc_offset); site_DataPatch(buffer, pc_offset, site); - } else if (site->is_a(InstalledCode_Mark::klass())) { + } else if (site->is_a(CompilationResult_Mark::klass())) { TRACE_graal_4("mark at %i", pc_offset); site_Mark(buffer, pc_offset, site); } else { @@ -426,8 +427,8 @@ oop* exception_handlers = (oop*) _exception_handlers->base(T_OBJECT); for (int i = 0; i < _exception_handlers->length(); i++) { oop exc = exception_handlers[i]; - jint pc_offset = InstalledCode_Site::pcOffset(exc); - jint handler_offset = InstalledCode_ExceptionHandler::handlerPos(exc); + jint pc_offset = CompilationResult_Site::pcOffset(exc); + jint handler_offset = CompilationResult_ExceptionHandler::handlerPos(exc); // Subtable header _exception_handler_table.add_entry(HandlerTableEntry(1, pc_offset, 0)); @@ -517,7 +518,7 @@ } void CodeInstaller::site_Safepoint(CodeBuffer& buffer, jint pc_offset, oop site) { - oop debug_info = InstalledCode_Safepoint::debugInfo(site); + oop debug_info = CompilationResult_Safepoint::debugInfo(site); assert(debug_info != NULL, "debug info expected"); // address instruction = _instructions->start() + pc_offset; @@ -531,7 +532,7 @@ } void CodeInstaller::site_Call(CodeBuffer& buffer, jint pc_offset, oop site) { - oop target = InstalledCode_Call::target(site); + oop target = CompilationResult_Call::target(site); instanceKlass* target_klass = instanceKlass::cast(target->klass()); oop hotspot_method = NULL; // JavaMethod @@ -543,7 +544,7 @@ hotspot_method = target; } - oop debug_info = InstalledCode_Call::debugInfo(site); + oop debug_info = CompilationResult_Call::debugInfo(site); assert((hotspot_method ? 1 : 0) + (global_stub ? 1 : 0) == 1, "Call site needs exactly one type"); @@ -659,8 +660,8 @@ } void CodeInstaller::site_DataPatch(CodeBuffer& buffer, jint pc_offset, oop site) { - oop constant = InstalledCode_DataPatch::constant(site); - int alignment = InstalledCode_DataPatch::alignment(site); + oop constant = CompilationResult_DataPatch::constant(site); + int alignment = CompilationResult_DataPatch::alignment(site); oop kind = Constant::kind(constant); address instruction = _instructions->start() + pc_offset; @@ -723,8 +724,8 @@ } void CodeInstaller::site_Mark(CodeBuffer& buffer, jint pc_offset, oop site) { - oop id_obj = InstalledCode_Mark::id(site); - arrayOop references = (arrayOop) InstalledCode_Mark::references(site); + oop id_obj = CompilationResult_Mark::id(site); + arrayOop references = (arrayOop) CompilationResult_Mark::references(site); if (id_obj != NULL) { assert(java_lang_boxing_object::is_instance(id_obj, T_INT), "Integer id expected"); @@ -751,7 +752,7 @@ case MARK_STATIC_CALL_STUB: { assert(references->length() == 1, "static call stub needs one reference"); oop ref = ((oop*) references->base(T_OBJECT))[0]; - address call_pc = _instructions->start() + InstalledCode_Site::pcOffset(ref); + address call_pc = _instructions->start() + CompilationResult_Site::pcOffset(ref); _instructions->relocate(instruction, static_stub_Relocation::spec(call_pc)); _instructions->relocate(instruction, oop_Relocation::spec_for_immediate(), Assembler::imm_operand); break; @@ -805,14 +806,14 @@ assert(references->length() == 2, "MARK_KLASS_PATCHING/MARK_ACCESS_FIELD_PATCHING needs 2 references"); oop ref1 = ((oop*) references->base(T_OBJECT))[0]; oop ref2 = ((oop*) references->base(T_OBJECT))[1]; - int i_byte_count = InstalledCode_Site::pcOffset(ref2) - InstalledCode_Site::pcOffset(ref1); + int i_byte_count = CompilationResult_Site::pcOffset(ref2) - CompilationResult_Site::pcOffset(ref1); assert(i_byte_count == (unsigned char)i_byte_count, "invalid offset"); *byte_count = i_byte_count; *being_initialized_entry_offset = *byte_count + *byte_skip; // we need to correct the offset of a field access - it's created with MAX_INT to ensure the correct size, and hotspot expects 0 if (id == MARK_ACCESS_FIELD_PATCHING) { - NativeMovRegMem* inst = nativeMovRegMem_at(_instructions->start() + InstalledCode_Site::pcOffset(ref1)); + NativeMovRegMem* inst = nativeMovRegMem_at(_instructions->start() + CompilationResult_Site::pcOffset(ref1)); assert(inst->offset() == max_jint, "unexpected offset value"); inst->set_offset(0); } diff -r a52320a6bbda -r fd71ca8c5f88 src/share/vm/graal/graalCompiler.hpp --- a/src/share/vm/graal/graalCompiler.hpp Wed Nov 07 12:18:37 2012 +0100 +++ b/src/share/vm/graal/graalCompiler.hpp Wed Nov 07 13:18:04 2012 +0100 @@ -50,7 +50,7 @@ // Native / OSR not supported virtual bool supports_native() { return true; } - virtual bool supports_osr () { return false; } + virtual bool supports_osr () { return true; } // Pretend to be C1 bool is_c1 () { return true; } diff -r a52320a6bbda -r fd71ca8c5f88 src/share/vm/graal/graalCompilerToVM.cpp --- a/src/share/vm/graal/graalCompilerToVM.cpp Wed Nov 07 12:18:37 2012 +0100 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Wed Nov 07 13:18:04 2012 +0100 @@ -739,6 +739,7 @@ set_long(env, config, "vmErrorStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_vm_error_id))); set_long(env, config, "deoptimizeStub", VmIds::addStub(SharedRuntime::deopt_blob()->uncommon_trap())); set_long(env, config, "unwindExceptionStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_unwind_exception_call_id))); + set_long(env, config, "osrMigrationEndStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_OSR_migration_end_id))); set_long(env, config, "registerFinalizerStub", VmIds::addStub(Runtime1::entry_for(Runtime1::register_finalizer_id))); set_long(env, config, "setDeoptInfoStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_set_deopt_info_id))); set_long(env, config, "createNullPointerExceptionStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_create_null_pointer_exception_id))); diff -r a52320a6bbda -r fd71ca8c5f88 src/share/vm/graal/graalJavaAccess.hpp --- a/src/share/vm/graal/graalJavaAccess.hpp Wed Nov 07 12:18:37 2012 +0100 +++ b/src/share/vm/graal/graalJavaAccess.hpp Wed Nov 07 13:18:04 2012 +0100 @@ -29,7 +29,7 @@ #include "classfile/systemDictionary.hpp" #include "oops/instanceMirrorKlass.hpp" -/* This macro defines the structure of the InstalledCode - classes. +/* This macro defines the structure of the CompilationResult - classes. * It will generate classes with accessors similar to javaClasses.hpp, but with specializations for oops, Handles and jni handles. * * The public interface of these classes will look like this: @@ -72,147 +72,148 @@ int_field(HotSpotResolvedJavaMethod, maxLocals) \ int_field(HotSpotResolvedJavaMethod, maxStackSize) \ boolean_field(HotSpotResolvedJavaMethod, canBeInlined) \ - end_class \ - start_class(HotSpotMethodData) \ - oop_field(HotSpotMethodData, hotspotMirror, "Ljava/lang/Object;") \ - int_field(HotSpotMethodData, normalDataSize) \ - int_field(HotSpotMethodData, extraDataSize) \ - end_class \ + end_class \ + start_class(HotSpotMethodData) \ + oop_field(HotSpotMethodData, hotspotMirror, "Ljava/lang/Object;") \ + int_field(HotSpotMethodData, normalDataSize) \ + int_field(HotSpotMethodData, extraDataSize) \ + end_class \ start_class(HotSpotJavaType) \ oop_field(HotSpotJavaType, name, "Ljava/lang/String;") \ - end_class \ - start_class(HotSpotResolvedJavaField) \ - oop_field(HotSpotResolvedJavaField, constant, "Lcom/oracle/graal/api/meta/Constant;") \ - int_field(HotSpotResolvedJavaField, offset) \ - int_field(HotSpotResolvedJavaField, accessFlags) \ - end_class \ - start_class(HotSpotCompiledMethod) \ - long_field(HotSpotCompiledMethod, nmethod) \ - oop_field(HotSpotCompiledMethod, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;")\ - end_class \ - start_class(HotSpotCodeInfo) \ - long_field(HotSpotCodeInfo, start) \ - oop_field(HotSpotCodeInfo, code, "[B") \ - end_class \ - start_class(HotSpotCompilationResult) \ + end_class \ + start_class(HotSpotResolvedJavaField) \ + oop_field(HotSpotResolvedJavaField, constant, "Lcom/oracle/graal/api/meta/Constant;") \ + int_field(HotSpotResolvedJavaField, offset) \ + int_field(HotSpotResolvedJavaField, accessFlags) \ + end_class \ + start_class(HotSpotCompiledMethod) \ + long_field(HotSpotCompiledMethod, nmethod) \ + oop_field(HotSpotCompiledMethod, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;") \ + end_class \ + start_class(HotSpotCodeInfo) \ + long_field(HotSpotCodeInfo, start) \ + oop_field(HotSpotCodeInfo, code, "[B") \ + end_class \ + start_class(HotSpotCompilationResult) \ oop_field(HotSpotCompilationResult, comp, "Lcom/oracle/graal/api/code/CompilationResult;") \ oop_field(HotSpotCompilationResult, method, "Lcom/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod;") \ - oop_field(HotSpotCompilationResult, name, "Ljava/lang/String;") \ + int_field(HotSpotCompilationResult, entryBCI) \ + oop_field(HotSpotCompilationResult, name, "Ljava/lang/String;") \ oop_field(HotSpotCompilationResult, sites, "[Lcom/oracle/graal/api/code/CompilationResult$Site;") \ oop_field(HotSpotCompilationResult, exceptionHandlers, "[Lcom/oracle/graal/api/code/CompilationResult$ExceptionHandler;") \ - end_class \ - start_class(ExceptionHandler) \ - int_field(ExceptionHandler, startBCI) \ - int_field(ExceptionHandler, endBCI) \ - int_field(ExceptionHandler, handlerBCI) \ - int_field(ExceptionHandler, catchTypeCPI) \ - oop_field(ExceptionHandler, catchType, "Lcom/oracle/graal/api/meta/JavaType;") \ - end_class \ - start_class(InstalledCode) \ - int_field(InstalledCode, frameSize) \ - int_field(InstalledCode, customStackAreaOffset) \ - oop_field(InstalledCode, targetCode, "[B") \ - oop_field(InstalledCode, assumptions, "Lcom/oracle/graal/api/code/Assumptions;") \ - int_field(InstalledCode, targetCodeSize) \ - end_class \ - start_class(Assumptions) \ - oop_field(Assumptions, list, "[Lcom/oracle/graal/api/code/Assumptions$Assumption;") \ - end_class \ - start_class(Assumptions_MethodContents) \ + end_class \ + start_class(ExceptionHandler) \ + int_field(ExceptionHandler, startBCI) \ + int_field(ExceptionHandler, endBCI) \ + int_field(ExceptionHandler, handlerBCI) \ + int_field(ExceptionHandler, catchTypeCPI) \ + oop_field(ExceptionHandler, catchType, "Lcom/oracle/graal/api/meta/JavaType;") \ + end_class \ + start_class(CompilationResult) \ + int_field(CompilationResult, frameSize) \ + int_field(CompilationResult, customStackAreaOffset) \ + oop_field(CompilationResult, targetCode, "[B") \ + oop_field(CompilationResult, assumptions, "Lcom/oracle/graal/api/code/Assumptions;") \ + int_field(CompilationResult, targetCodeSize) \ + end_class \ + start_class(Assumptions) \ + oop_field(Assumptions, list, "[Lcom/oracle/graal/api/code/Assumptions$Assumption;") \ + end_class \ + start_class(Assumptions_MethodContents) \ oop_field(Assumptions_MethodContents, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;") \ - end_class \ - start_class(Assumptions_ConcreteSubtype) \ + end_class \ + start_class(Assumptions_ConcreteSubtype) \ oop_field(Assumptions_ConcreteSubtype, context, "Lcom/oracle/graal/api/meta/ResolvedJavaType;") \ oop_field(Assumptions_ConcreteSubtype, subtype, "Lcom/oracle/graal/api/meta/ResolvedJavaType;") \ - end_class \ - start_class(Assumptions_ConcreteMethod) \ + end_class \ + start_class(Assumptions_ConcreteMethod) \ oop_field(Assumptions_ConcreteMethod, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;") \ oop_field(Assumptions_ConcreteMethod, context, "Lcom/oracle/graal/api/meta/ResolvedJavaType;") \ oop_field(Assumptions_ConcreteMethod, impl, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;") \ - end_class \ - start_class(InstalledCode_Site) \ - int_field(InstalledCode_Site, pcOffset) \ - end_class \ - start_class(InstalledCode_Call) \ - oop_field(InstalledCode_Call, target, "Ljava/lang/Object;") \ - oop_field(InstalledCode_Call, debugInfo, "Lcom/oracle/graal/api/code/DebugInfo;") \ - end_class \ - start_class(InstalledCode_DataPatch) \ - oop_field(InstalledCode_DataPatch, constant, "Lcom/oracle/graal/api/meta/Constant;") \ - int_field(InstalledCode_DataPatch, alignment) \ - end_class \ - start_class(InstalledCode_Safepoint) \ - oop_field(InstalledCode_Safepoint, debugInfo, "Lcom/oracle/graal/api/code/DebugInfo;") \ - end_class \ - start_class(InstalledCode_ExceptionHandler) \ - int_field(InstalledCode_ExceptionHandler, handlerPos) \ - end_class \ - start_class(InstalledCode_Mark) \ - oop_field(InstalledCode_Mark, id, "Ljava/lang/Object;") \ - oop_field(InstalledCode_Mark, references, "[Lcom/oracle/graal/api/code/CompilationResult$Mark;") \ - end_class \ - start_class(DebugInfo) \ - oop_field(DebugInfo, bytecodePosition, "Lcom/oracle/graal/api/code/BytecodePosition;") \ - oop_field(DebugInfo, registerRefMap, "Ljava/util/BitSet;") \ - oop_field(DebugInfo, frameRefMap, "Ljava/util/BitSet;") \ - end_class \ - start_class(GraalBitMap) \ - oop_field(GraalBitMap, words, "[J") \ - end_class \ - start_class(BytecodeFrame) \ - oop_field(BytecodeFrame, values, "[Lcom/oracle/graal/api/meta/Value;") \ - int_field(BytecodeFrame, numLocals) \ - int_field(BytecodeFrame, numStack) \ - int_field(BytecodeFrame, numLocks) \ - long_field(BytecodeFrame, leafGraphId) \ - boolean_field(BytecodeFrame, rethrowException) \ - boolean_field(BytecodeFrame, duringCall) \ - end_class \ - start_class(BytecodePosition) \ - oop_field(BytecodePosition, caller, "Lcom/oracle/graal/api/code/BytecodePosition;") \ - oop_field(BytecodePosition, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;") \ - int_field(BytecodePosition, bci) \ - end_class \ - start_class(Constant) \ - oop_field(Constant, kind, "Lcom/oracle/graal/api/meta/Kind;") \ - oop_field(Constant, object, "Ljava/lang/Object;") \ - long_field(Constant, primitive) \ - end_class \ - start_class(Kind) \ - char_field(Kind, typeChar) \ - static_oop_field(Kind, Boolean, "Lcom/oracle/graal/api/meta/Kind;"); \ - static_oop_field(Kind, Byte, "Lcom/oracle/graal/api/meta/Kind;"); \ - static_oop_field(Kind, Char, "Lcom/oracle/graal/api/meta/Kind;"); \ - static_oop_field(Kind, Short, "Lcom/oracle/graal/api/meta/Kind;"); \ - static_oop_field(Kind, Int, "Lcom/oracle/graal/api/meta/Kind;"); \ - static_oop_field(Kind, Long, "Lcom/oracle/graal/api/meta/Kind;"); \ - end_class \ - start_class(JavaMethod) \ - end_class \ - start_class(Value) \ - oop_field(Value, kind, "Lcom/oracle/graal/api/meta/Kind;") \ - static_oop_field(Value, ILLEGAL, "Lcom/oracle/graal/api/meta/Value;"); \ - end_class \ - start_class(RegisterValue) \ - oop_field(RegisterValue, reg, "Lcom/oracle/graal/api/code/Register;") \ - end_class \ - start_class(code_Register) \ - int_field(code_Register, number) \ - end_class \ - start_class(StackSlot) \ - int_field(StackSlot, offset) \ - boolean_field(StackSlot, addFrameSize) \ - end_class \ - start_class(VirtualObject) \ - int_field(VirtualObject, id) \ + end_class \ + start_class(CompilationResult_Site) \ + int_field(CompilationResult_Site, pcOffset) \ + end_class \ + start_class(CompilationResult_Call) \ + oop_field(CompilationResult_Call, target, "Ljava/lang/Object;") \ + oop_field(CompilationResult_Call, debugInfo, "Lcom/oracle/graal/api/code/DebugInfo;") \ + end_class \ + start_class(CompilationResult_DataPatch) \ + oop_field(CompilationResult_DataPatch, constant, "Lcom/oracle/graal/api/meta/Constant;") \ + int_field(CompilationResult_DataPatch, alignment) \ + end_class \ + start_class(CompilationResult_Safepoint) \ + oop_field(CompilationResult_Safepoint, debugInfo, "Lcom/oracle/graal/api/code/DebugInfo;") \ + end_class \ + start_class(CompilationResult_ExceptionHandler) \ + int_field(CompilationResult_ExceptionHandler, handlerPos) \ + end_class \ + start_class(CompilationResult_Mark) \ + oop_field(CompilationResult_Mark, id, "Ljava/lang/Object;") \ + oop_field(CompilationResult_Mark, references, "[Lcom/oracle/graal/api/code/CompilationResult$Mark;") \ + end_class \ + start_class(DebugInfo) \ + oop_field(DebugInfo, bytecodePosition, "Lcom/oracle/graal/api/code/BytecodePosition;") \ + oop_field(DebugInfo, registerRefMap, "Ljava/util/BitSet;") \ + oop_field(DebugInfo, frameRefMap, "Ljava/util/BitSet;") \ + end_class \ + start_class(GraalBitMap) \ + oop_field(GraalBitMap, words, "[J") \ + end_class \ + start_class(BytecodeFrame) \ + oop_field(BytecodeFrame, values, "[Lcom/oracle/graal/api/meta/Value;") \ + int_field(BytecodeFrame, numLocals) \ + int_field(BytecodeFrame, numStack) \ + int_field(BytecodeFrame, numLocks) \ + long_field(BytecodeFrame, leafGraphId) \ + boolean_field(BytecodeFrame, rethrowException) \ + boolean_field(BytecodeFrame, duringCall) \ + end_class \ + start_class(BytecodePosition) \ + oop_field(BytecodePosition, caller, "Lcom/oracle/graal/api/code/BytecodePosition;") \ + oop_field(BytecodePosition, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;") \ + int_field(BytecodePosition, bci) \ + end_class \ + start_class(Constant) \ + oop_field(Constant, kind, "Lcom/oracle/graal/api/meta/Kind;") \ + oop_field(Constant, object, "Ljava/lang/Object;") \ + long_field(Constant, primitive) \ + end_class \ + start_class(Kind) \ + char_field(Kind, typeChar) \ + static_oop_field(Kind, Boolean, "Lcom/oracle/graal/api/meta/Kind;"); \ + static_oop_field(Kind, Byte, "Lcom/oracle/graal/api/meta/Kind;"); \ + static_oop_field(Kind, Char, "Lcom/oracle/graal/api/meta/Kind;"); \ + static_oop_field(Kind, Short, "Lcom/oracle/graal/api/meta/Kind;"); \ + static_oop_field(Kind, Int, "Lcom/oracle/graal/api/meta/Kind;"); \ + static_oop_field(Kind, Long, "Lcom/oracle/graal/api/meta/Kind;"); \ + end_class \ + start_class(JavaMethod) \ + end_class \ + start_class(Value) \ + oop_field(Value, kind, "Lcom/oracle/graal/api/meta/Kind;") \ + static_oop_field(Value, ILLEGAL, "Lcom/oracle/graal/api/meta/Value;"); \ + end_class \ + start_class(RegisterValue) \ + oop_field(RegisterValue, reg, "Lcom/oracle/graal/api/code/Register;") \ + end_class \ + start_class(code_Register) \ + int_field(code_Register, number) \ + end_class \ + start_class(StackSlot) \ + int_field(StackSlot, offset) \ + boolean_field(StackSlot, addFrameSize) \ + end_class \ + start_class(VirtualObject) \ + int_field(VirtualObject, id) \ oop_field(VirtualObject, type, "Lcom/oracle/graal/api/meta/JavaType;") \ - oop_field(VirtualObject, values, "[Lcom/oracle/graal/api/meta/Value;") \ - end_class \ - start_class(code_MonitorValue) \ - oop_field(code_MonitorValue, owner, "Lcom/oracle/graal/api/meta/Value;") \ - oop_field(code_MonitorValue, lockData, "Lcom/oracle/graal/api/meta/Value;") \ - boolean_field(code_MonitorValue, eliminated) \ - end_class \ + oop_field(VirtualObject, values, "[Lcom/oracle/graal/api/meta/Value;") \ + end_class \ + start_class(code_MonitorValue) \ + oop_field(code_MonitorValue, owner, "Lcom/oracle/graal/api/meta/Value;") \ + oop_field(code_MonitorValue, lockData, "Lcom/oracle/graal/api/meta/Value;") \ + boolean_field(code_MonitorValue, eliminated) \ + end_class \ /* end*/ #define START_CLASS(name) \ diff -r a52320a6bbda -r fd71ca8c5f88 src/share/vm/runtime/compilationPolicy.cpp --- a/src/share/vm/runtime/compilationPolicy.cpp Wed Nov 07 12:18:37 2012 +0100 +++ b/src/share/vm/runtime/compilationPolicy.cpp Wed Nov 07 13:18:04 2012 +0100 @@ -208,7 +208,7 @@ } void NonTieredCompPolicy::reset_counter_for_back_branch_event(methodHandle m) { - GRAAL_ONLY(assert(false, "unexpected")); +// GRAAL_ONLY(assert(false, "unexpected")); // Delay next back-branch event but pump up invocation counter to triger // whole method compilation. InvocationCounter* i = m->invocation_counter();