hotspot/src/share/vm/opto/parse2.cpp
changeset 360 21d113ecbf6a
parent 210 6da234892f4a
child 376 7209afaaef5d
equal deleted inserted replaced
357:f4edb0d9f109 360:21d113ecbf6a
    65   const TypeAryPtr* arytype  = _gvn.type(ary)->is_aryptr();
    65   const TypeAryPtr* arytype  = _gvn.type(ary)->is_aryptr();
    66   const TypeInt*    sizetype = arytype->size();
    66   const TypeInt*    sizetype = arytype->size();
    67   const Type*       elemtype = arytype->elem();
    67   const Type*       elemtype = arytype->elem();
    68 
    68 
    69   if (UseUniqueSubclasses && result2 != NULL) {
    69   if (UseUniqueSubclasses && result2 != NULL) {
    70     const TypeInstPtr* toop = elemtype->isa_instptr();
    70     const Type* el = elemtype;
       
    71     if (elemtype->isa_narrowoop()) {
       
    72       el = elemtype->is_narrowoop()->make_oopptr();
       
    73     }
       
    74     const TypeInstPtr* toop = el->isa_instptr();
    71     if (toop) {
    75     if (toop) {
    72       if (toop->klass()->as_instance_klass()->unique_concrete_subklass()) {
    76       if (toop->klass()->as_instance_klass()->unique_concrete_subklass()) {
    73         // If we load from "AbstractClass[]" we must see "ConcreteSubClass".
    77         // If we load from "AbstractClass[]" we must see "ConcreteSubClass".
    74         const Type* subklass = Type::get_const_type(toop->klass());
    78         const Type* subklass = Type::get_const_type(toop->klass());
    75         elemtype = subklass->join(elemtype);
    79         elemtype = subklass->join(el);
    76       }
    80       }
    77     }
    81     }
    78   }
    82   }
    79 
    83 
    80   // Check for big class initializers with all constant offsets
    84   // Check for big class initializers with all constant offsets