# HG changeset patch # User Tom Rodriguez # Date 1433388245 25200 # Node ID df9d2375512a1a908174918954e4dd401b35222c # Parent b9f9b8af17ffb439553ece71e1cb172b76e8d2c9 Track max live register value in reference map diff -r b9f9b8af17ff -r df9d2375512a graal/com.oracle.jvmci.hotspot/src/com/oracle/jvmci/hotspot/HotSpotReferenceMap.java --- a/graal/com.oracle.jvmci.hotspot/src/com/oracle/jvmci/hotspot/HotSpotReferenceMap.java Wed Jun 03 19:57:38 2015 -0700 +++ b/graal/com.oracle.jvmci.hotspot/src/com/oracle/jvmci/hotspot/HotSpotReferenceMap.java Wed Jun 03 20:24:05 2015 -0700 @@ -33,6 +33,7 @@ private Value[] objects; private int[] bytesPerElement; + private int maxRegisterSize; private ArrayList objectValues; private final TargetDescription target; @@ -47,6 +48,7 @@ objectValues = new ArrayList<>(); objects = Value.NO_VALUES; bytesPerElement = null; + maxRegisterSize = 0; } @Override @@ -58,6 +60,12 @@ if (!lirKind.isValue()) { objectValues.add(v); } + if (isRegister(v)) { + int size = target.getSizeInBytes(lirKind.getPlatformKind()); + if (size > maxRegisterSize) { + maxRegisterSize = size; + } + } } @Override diff -r b9f9b8af17ff -r df9d2375512a src/share/vm/jvmci/jvmciCodeInstaller.cpp --- a/src/share/vm/jvmci/jvmciCodeInstaller.cpp Wed Jun 03 19:57:38 2015 -0700 +++ b/src/share/vm/jvmci/jvmciCodeInstaller.cpp Wed Jun 03 20:24:05 2015 -0700 @@ -72,6 +72,9 @@ // creates a HotSpot oop map out of the byte arrays provided by DebugInfo OopMap* CodeInstaller::create_oop_map(oop debug_info) { oop reference_map = DebugInfo::referenceMap(debug_info); + if (HotSpotReferenceMap::maxRegisterSize(reference_map) > 16) { + _has_wide_vector = true; + } OopMap* map = new OopMap(_total_frame_size, _parameter_count); objArrayOop objects = HotSpotReferenceMap::objects(reference_map); typeArrayOop bytesPerArray = HotSpotReferenceMap::bytesPerElement(reference_map); @@ -447,8 +450,10 @@ // Make sure a valid compile_id is associated with every compile id = CompileBroker::assign_compile_id_unlocked(Thread::current(), method, entry_bci); } - result = JVMCIEnv::register_method(method, nm, entry_bci, &_offsets, _custom_stack_area_offset, &buffer, stack_slots, _debug_recorder->_oopmaps, &_exception_handler_table, - JVMCICompiler::instance(), _debug_recorder, _dependencies, env, id, false, installed_code, compiled_code, speculation_log); + result = JVMCIEnv::register_method(method, nm, entry_bci, &_offsets, _custom_stack_area_offset, &buffer, + stack_slots, _debug_recorder->_oopmaps, &_exception_handler_table, + JVMCICompiler::instance(), _debug_recorder, _dependencies, env, id, + false, _has_wide_vector, installed_code, compiled_code, speculation_log); cb = nm; } @@ -490,6 +495,8 @@ #endif _next_call_type = INVOKE_INVALID; + + _has_wide_vector = false; } int CodeInstaller::estimate_stub_entries() { diff -r b9f9b8af17ff -r df9d2375512a src/share/vm/jvmci/jvmciCodeInstaller.hpp --- a/src/share/vm/jvmci/jvmciCodeInstaller.hpp Wed Jun 03 19:57:38 2015 -0700 +++ b/src/share/vm/jvmci/jvmciCodeInstaller.hpp Wed Jun 03 20:24:05 2015 -0700 @@ -70,6 +70,8 @@ jobject _comments_handle; #endif + bool _has_wide_vector; + MarkId _next_call_type; address _invoke_mark_pc; diff -r b9f9b8af17ff -r df9d2375512a src/share/vm/jvmci/jvmciEnv.cpp --- a/src/share/vm/jvmci/jvmciEnv.cpp Wed Jun 03 19:57:38 2015 -0700 +++ b/src/share/vm/jvmci/jvmciEnv.cpp Wed Jun 03 20:24:05 2015 -0700 @@ -483,6 +483,7 @@ JVMCIEnv* env, int compile_id, bool has_unsafe_access, + bool has_wide_vector, Handle installed_code, Handle compiled_code, Handle speculation_log) { @@ -546,12 +547,7 @@ } } else { nm->set_has_unsafe_access(has_unsafe_access); -#ifdef TARGET_ARCH_x86 - // It might be preferable to set this only for methods which - // use vector instructions but we currently don't track this - // and it probably wouldn't make much difference. - nm->set_has_wide_vectors(MaxVectorSize > 16); -#endif + nm->set_has_wide_vectors(has_wide_vector); // Record successful registration. // (Put nm into the task handle *before* publishing to the Java heap.) diff -r b9f9b8af17ff -r df9d2375512a src/share/vm/jvmci/jvmciEnv.hpp --- a/src/share/vm/jvmci/jvmciEnv.hpp Wed Jun 03 19:57:38 2015 -0700 +++ b/src/share/vm/jvmci/jvmciEnv.hpp Wed Jun 03 20:24:05 2015 -0700 @@ -157,6 +157,7 @@ JVMCIEnv* env, int compile_id, bool has_unsafe_access, + bool has_wide_vector, Handle installed_code, Handle compiled_code, Handle speculation_log); diff -r b9f9b8af17ff -r df9d2375512a src/share/vm/jvmci/jvmciJavaAccess.hpp --- a/src/share/vm/jvmci/jvmciJavaAccess.hpp Wed Jun 03 19:57:38 2015 -0700 +++ b/src/share/vm/jvmci/jvmciJavaAccess.hpp Wed Jun 03 20:24:05 2015 -0700 @@ -159,6 +159,7 @@ start_class(HotSpotReferenceMap) \ objArrayOop_field(HotSpotReferenceMap, objects, "[Lcom/oracle/jvmci/meta/Value;") \ typeArrayOop_field(HotSpotReferenceMap, bytesPerElement, "[I") \ + int_field(HotSpotReferenceMap, maxRegisterSize) \ end_class \ start_class(RegisterSaveLayout) \ objArrayOop_field(RegisterSaveLayout, registers, "[Lcom/oracle/jvmci/code/Register;") \