changeset 13375:e8c4a6ea3f77

cleaned up VMToCompiler.createResolvedJavaType
author twisti
date Tue, 17 Dec 2013 20:58:58 -0800
parents ad187607b784
children 24ae4e7ecf03
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompiler.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java src/share/vm/classfile/vmSymbols.hpp src/share/vm/graal/graalCompiler.cpp src/share/vm/graal/graalCompiler.hpp src/share/vm/graal/graalCompilerToVM.cpp src/share/vm/graal/graalVMToCompiler.cpp src/share/vm/graal/graalVMToCompiler.hpp
diffstat 9 files changed, 23 insertions(+), 76 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompiler.java	Tue Dec 17 21:25:27 2013 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompiler.java	Tue Dec 17 20:58:58 2013 -0800
@@ -61,13 +61,10 @@
     /**
      * Creates a resolved Java type.
      * 
-     * @param metaspaceKlass the metaspace Klass object for the type
-     * @param name the {@linkplain JavaType#getName() name} of the type
-     * @param simpleName a simple, unqualified name for the type
      * @param javaMirror the {@link Class} mirror
      * @return the resolved type associated with {@code javaMirror} which may not be the type
      *         instantiated by this call in the case of another thread racing to create the same
      *         type
      */
-    ResolvedJavaType createResolvedJavaType(long metaspaceKlass, String name, String simpleName, Class javaMirror, int sizeOrSpecies);
+    ResolvedJavaType createResolvedJavaType(Class javaMirror);
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java	Tue Dec 17 21:25:27 2013 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java	Tue Dec 17 20:58:58 2013 -0800
@@ -679,15 +679,8 @@
     }
 
     @Override
-    public HotSpotResolvedObjectType createResolvedJavaType(long metaspaceKlass, String name, String simpleName, Class javaMirror, int sizeOrSpecies) {
-        HotSpotResolvedObjectType type = new HotSpotResolvedObjectType(metaspaceKlass, name, simpleName, javaMirror, sizeOrSpecies);
-
-        long offset = runtime().getConfig().graalMirrorInClassOffset;
-        if (!unsafe.compareAndSwapObject(javaMirror, offset, null, type)) {
-            // lost the race - return the existing value instead
-            type = (HotSpotResolvedObjectType) unsafe.getObject(javaMirror, offset);
-        }
-        return type;
+    public ResolvedJavaType createResolvedJavaType(Class javaMirror) {
+        return HotSpotResolvedObjectType.fromClass(javaMirror);
     }
 
     public PhasePlan createPhasePlan(HotSpotProviders providers, OptimisticOptimizations optimisticOpts, boolean onStackReplacement) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java	Tue Dec 17 21:25:27 2013 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java	Tue Dec 17 20:58:58 2013 -0800
@@ -109,13 +109,6 @@
         return type;
     }
 
-    public HotSpotResolvedObjectType(long metaspaceKlass, String name, String simpleName, Class javaMirror, int sizeOrSpecies) {
-        super(name);
-        assert HotSpotGraalRuntime.unsafeReadWord(javaMirror, runtime().getConfig().klassOffset) == metaspaceKlass;
-        this.javaClass = javaMirror;
-        assert name.charAt(0) != '[' || isArray() : name + " " + simpleName + " " + Long.toHexString(sizeOrSpecies);
-    }
-
     /**
      * Creates the Graal mirror for a {@link Class} object.
      * 
--- a/src/share/vm/classfile/vmSymbols.hpp	Tue Dec 17 21:25:27 2013 -0800
+++ b/src/share/vm/classfile/vmSymbols.hpp	Tue Dec 17 20:58:58 2013 -0800
@@ -369,7 +369,7 @@
   template(createUnresolvedJavaType_name,         "createUnresolvedJavaType")                                                         \
   template(createUnresolvedJavaType_signature,    "(Ljava/lang/String;)Lcom/oracle/graal/api/meta/JavaType;")                         \
   template(createResolvedJavaType_name,           "createResolvedJavaType")                                                           \
-  template(createResolvedJavaType_signature,      "(JLjava/lang/String;Ljava/lang/String;Ljava/lang/Class;I)Lcom/oracle/graal/api/meta/ResolvedJavaType;") \
+  template(createResolvedJavaType_signature,      "(Ljava/lang/Class;)Lcom/oracle/graal/api/meta/ResolvedJavaType;") \
   template(createPrimitiveJavaType_name,          "createPrimitiveJavaType")                                                          \
   template(createPrimitiveJavaType_signature,     "(I)Lcom/oracle/graal/api/meta/JavaType;")                                          \
   template(getVMToCompiler_name,                  "getVMToCompiler")                                                                  \
--- a/src/share/vm/graal/graalCompiler.cpp	Tue Dec 17 21:25:27 2013 -0800
+++ b/src/share/vm/graal/graalCompiler.cpp	Tue Dec 17 20:58:58 2013 -0800
@@ -219,21 +219,17 @@
   TRACE_graal_1("GraalCompiler::print_timers");
 }
 
-Handle GraalCompiler::get_JavaType(Symbol* klass_name, TRAPS) {
-   return VMToCompiler::createUnresolvedJavaType(java_lang_String::create_from_symbol(klass_name, THREAD), THREAD);
-}
-
 Handle GraalCompiler::get_JavaTypeFromSignature(Symbol* signature, KlassHandle loading_klass, TRAPS) {
-  
   BasicType field_type = FieldType::basic_type(signature);
   // If the field is a pointer type, get the klass of the
   // field.
   if (field_type == T_OBJECT || field_type == T_ARRAY) {
-    KlassHandle handle = GraalEnv::get_klass_by_name(loading_klass, signature, false);
-    if (handle.is_null()) {
-      return get_JavaType(signature, CHECK_NH);
+    KlassHandle klass = GraalEnv::get_klass_by_name(loading_klass, signature, false);
+    if (klass.is_null()) {
+      Handle signature_string = java_lang_String::create_from_symbol(signature, CHECK_NH);
+      return VMToCompiler::createUnresolvedJavaType(signature_string, CHECK_NH);
     } else {
-      return get_JavaType(handle, CHECK_NH);
+      return createHotSpotResolvedObjectType(klass, CHECK_NH);
     }
   } else {
     return VMToCompiler::createPrimitiveJavaType(field_type, CHECK_NH);
@@ -256,7 +252,7 @@
       if (tag.is_klass()) {
         // The klass has been inserted into the constant pool
         // very recently.
-        return GraalCompiler::get_JavaType(cp->resolved_klass_at(index), CHECK_NH);
+        return GraalCompiler::createHotSpotResolvedObjectType(cp->resolved_klass_at(index), CHECK_NH);
       } else if (tag.is_symbol()) {
         klass_name = cp->symbol_at(index);
       } else {
@@ -264,50 +260,26 @@
         klass_name = cp->unresolved_klass_at(index);
       }
     }
-    return GraalCompiler::get_JavaType(klass_name, CHECK_NH);
+    Handle klass_name_string = java_lang_String::create_from_symbol(klass_name, CHECK_NH);
+    return VMToCompiler::createUnresolvedJavaType(klass_name_string, CHECK_NH);
   } else {
-    return GraalCompiler::get_JavaType(klass, CHECK_NH);
+    return GraalCompiler::createHotSpotResolvedObjectType(klass, CHECK_NH);
   }
 }
 
-Handle GraalCompiler::get_JavaType(KlassHandle klass, TRAPS) {
-  Handle name = java_lang_String::create_from_symbol(klass->name(), THREAD);
-  return createHotSpotResolvedObjectType(klass, name, CHECK_NH);
-}
-
 Handle GraalCompiler::get_JavaField(int offset, int flags, Symbol* field_name, Handle field_holder, Handle field_type, TRAPS) {
   Handle name = java_lang_String::create_from_symbol(field_name, CHECK_NH);
   return VMToCompiler::createJavaField(field_holder, name, field_type, offset, flags, false, CHECK_NH);
 }
 
-Handle GraalCompiler::createHotSpotResolvedObjectType(KlassHandle klass, Handle name, TRAPS) {
+Handle GraalCompiler::createHotSpotResolvedObjectType(KlassHandle klass, TRAPS) {
   oop java_class = klass->java_mirror();
   oop graal_mirror = java_lang_Class::graal_mirror(java_class);
   if (graal_mirror != NULL) {
     assert(graal_mirror->is_a(HotSpotResolvedObjectType::klass()), "unexpected class...");
     return graal_mirror;
   }
-
-  Handle simpleName = name;
-  if (klass->oop_is_instance()) {
-    ResourceMark rm;
-    InstanceKlass* ik = (InstanceKlass*) klass();
-    name = java_lang_String::create_from_str(ik->signature_name(), CHECK_NH);
-  }
-
-  int sizeOrSpecies;
-  if (klass->is_interface()) {
-    sizeOrSpecies = (int) 0x80000000; // see HotSpotResolvedObjectType.INTERFACE_SPECIES_VALUE
-  } else if (klass->oop_is_array()) {
-    sizeOrSpecies = (int) 0x7fffffff; // see HotSpotResolvedObjectType.ARRAY_SPECIES_VALUE
-  } else {
-    sizeOrSpecies = InstanceKlass::cast(klass())->size_helper() * HeapWordSize;
-    if (!InstanceKlass::cast(klass())->can_be_fastpath_allocated()) {
-      sizeOrSpecies = -sizeOrSpecies;
-    }
-  }
-
-  return VMToCompiler::createResolvedJavaType(klass(), name, simpleName, java_class, sizeOrSpecies, CHECK_NH);
+  return VMToCompiler::createResolvedJavaType(java_class, CHECK_NH);
 }
 
 BasicType GraalCompiler::kindToBasicType(jchar ch) {
--- a/src/share/vm/graal/graalCompiler.hpp	Tue Dec 17 21:25:27 2013 -0800
+++ b/src/share/vm/graal/graalCompiler.hpp	Tue Dec 17 20:58:58 2013 -0800
@@ -73,11 +73,9 @@
 
   static Handle get_JavaTypeFromSignature(Symbol* signature, KlassHandle accessor, TRAPS);
   static Handle get_JavaType(constantPoolHandle cp, int index, KlassHandle accessor, TRAPS);
-  static Handle get_JavaType(Symbol* klass_name, TRAPS);
-  static Handle get_JavaType(KlassHandle klass, TRAPS);
   static Handle get_JavaField(int offset, int flags, Symbol* field_name, Handle field_holder, Handle field_type, TRAPS);
 
-  static Handle createHotSpotResolvedObjectType(KlassHandle klass, Handle name, TRAPS);
+  static Handle createHotSpotResolvedObjectType(KlassHandle klass, TRAPS);
 
   void exit();
 
--- a/src/share/vm/graal/graalCompilerToVM.cpp	Tue Dec 17 21:25:27 2013 -0800
+++ b/src/share/vm/graal/graalCompilerToVM.cpp	Tue Dec 17 20:58:58 2013 -0800
@@ -187,7 +187,7 @@
   if (klass->nof_implementors() == 1) {
     InstanceKlass* implementor = (InstanceKlass*) klass->implementor();
     if (!implementor->is_abstract() && !implementor->is_interface() && implementor->is_leaf_class()) {
-      Handle type = GraalCompiler::get_JavaType(implementor, CHECK_NULL);
+      Handle type = GraalCompiler::createHotSpotResolvedObjectType(implementor, CHECK_NULL);
       return JNIHandles::make_local(THREAD, type());
     }
   }
@@ -243,7 +243,7 @@
       Handle type = VMToCompiler::createUnresolvedJavaType(name, THREAD);
       result = type();
     } else {
-      Handle type = GraalCompiler::createHotSpotResolvedObjectType(resolved_type, name, CHECK_NULL);
+      Handle type = GraalCompiler::createHotSpotResolvedObjectType(resolved_type, CHECK_NULL);
       result = type();
     }
   }
@@ -288,7 +288,7 @@
 
   methodHandle method = GraalEnv::get_method_by_index(cp, cp_index, bc, pool_holder);
   if (!method.is_null()) {
-    Handle holder = GraalCompiler::get_JavaType(method->method_holder(), CHECK_NULL);
+    Handle holder = GraalCompiler::createHotSpotResolvedObjectType(method->method_holder(), CHECK_NULL);
     return JNIHandles::make_local(THREAD, VMToCompiler::createResolvedJavaMethod(holder, method(), THREAD));
   } else {
     // Get the method's name and signature.
@@ -363,7 +363,7 @@
       flags = result.access_flags();
       holder_klass = result.field_holder();
       basic_type = result.field_type();
-      holder = GraalCompiler::get_JavaType(holder_klass, CHECK_NULL);
+      holder = GraalCompiler::createHotSpotResolvedObjectType(holder_klass, CHECK_NULL);
     }
   }
 
--- a/src/share/vm/graal/graalVMToCompiler.cpp	Tue Dec 17 21:25:27 2013 -0800
+++ b/src/share/vm/graal/graalVMToCompiler.cpp	Tue Dec 17 20:58:58 2013 -0800
@@ -239,17 +239,11 @@
   return (oop) result.get_jobject();
 }
 
-oop VMToCompiler::createResolvedJavaType(Klass* klass, Handle name, Handle simpleName, Handle java_mirror, jint sizeOrSpecies, TRAPS) {
-  assert(!name.is_null(), "just checking");
-  assert(!simpleName.is_null(), "just checking");
+oop VMToCompiler::createResolvedJavaType(Handle java_mirror, TRAPS) {
   JavaValue result(T_OBJECT);
   JavaCallArguments args;
   args.push_oop(instance());
-  args.push_long((jlong) (address) klass);
-  args.push_oop(name);
-  args.push_oop(simpleName);
   args.push_oop(java_mirror);
-  args.push_int(sizeOrSpecies);
   JavaCalls::call_interface(&result, vmToCompilerKlass(), vmSymbols::createResolvedJavaType_name(), vmSymbols::createResolvedJavaType_signature(), &args, THREAD);
   check_pending_exception("Error while calling createResolvedJavaType");
   return (oop) result.get_jobject();
--- a/src/share/vm/graal/graalVMToCompiler.hpp	Tue Dec 17 21:25:27 2013 -0800
+++ b/src/share/vm/graal/graalVMToCompiler.hpp	Tue Dec 17 20:58:58 2013 -0800
@@ -87,8 +87,8 @@
   // public abstract JavaType createUnresolvedJavaType(String name);
   static oop createUnresolvedJavaType(Handle name, TRAPS);
 
-  // public abstract ResolvedJavaType createResolvedJavaType(long metaspaceKlass, String name, String simpleName, Class javaMirror, int sizeOrSpecies);
-  static oop createResolvedJavaType(Klass* klass, Handle name, Handle simpleName, Handle java_mirror, jint sizeOrSpecies, TRAPS);
+  // public abstract ResolvedJavaType createResolvedJavaType(Class javaMirror);
+  static oop createResolvedJavaType(Handle java_mirror, TRAPS);
 
   // public abstract JavaType createPrimitiveJavaType(int basicType);
   static oop createPrimitiveJavaType(int basicType, TRAPS);