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;")                                                                      \