Mercurial > hg > graal-jvmci-8
changeset 21731:df9d2375512a
Track max live register value in reference map
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Wed, 03 Jun 2015 20:24:05 -0700 |
parents | b9f9b8af17ff |
children | bc2ec35a7189 |
files | graal/com.oracle.jvmci.hotspot/src/com/oracle/jvmci/hotspot/HotSpotReferenceMap.java src/share/vm/jvmci/jvmciCodeInstaller.cpp src/share/vm/jvmci/jvmciCodeInstaller.hpp src/share/vm/jvmci/jvmciEnv.cpp src/share/vm/jvmci/jvmciEnv.hpp src/share/vm/jvmci/jvmciJavaAccess.hpp |
diffstat | 6 files changed, 23 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- 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<Value> 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
--- 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() {
--- 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;
--- 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.)
--- 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);
--- 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;") \