# HG changeset patch # User twisti # Date 1387342738 28800 # Node ID e8c4a6ea3f7724ad658373b54f86f2372dc83195 # Parent ad187607b784c7ee65c4832923619461c3243148 cleaned up VMToCompiler.createResolvedJavaType diff -r ad187607b784 -r e8c4a6ea3f77 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompiler.java --- 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); } diff -r ad187607b784 -r e8c4a6ea3f77 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java --- 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) { diff -r ad187607b784 -r e8c4a6ea3f77 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java --- 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. * diff -r ad187607b784 -r e8c4a6ea3f77 src/share/vm/classfile/vmSymbols.hpp --- 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") \ diff -r ad187607b784 -r e8c4a6ea3f77 src/share/vm/graal/graalCompiler.cpp --- 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) { diff -r ad187607b784 -r e8c4a6ea3f77 src/share/vm/graal/graalCompiler.hpp --- 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(); diff -r ad187607b784 -r e8c4a6ea3f77 src/share/vm/graal/graalCompilerToVM.cpp --- 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); } } diff -r ad187607b784 -r e8c4a6ea3f77 src/share/vm/graal/graalVMToCompiler.cpp --- 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(); diff -r ad187607b784 -r e8c4a6ea3f77 src/share/vm/graal/graalVMToCompiler.hpp --- 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);