src/hotspot/share/ci/ciInstanceKlass.cpp
changeset 52356 19c4a3eec4d7
parent 52311 274ba8fbd96d
child 52424 e3d79743f57d
equal deleted inserted replaced
52355:0caa36de8703 52356:19c4a3eec4d7
    55   InstanceKlass* ik = get_instanceKlass();
    55   InstanceKlass* ik = get_instanceKlass();
    56 
    56 
    57   AccessFlags access_flags = ik->access_flags();
    57   AccessFlags access_flags = ik->access_flags();
    58   _flags = ciFlags(access_flags);
    58   _flags = ciFlags(access_flags);
    59   _has_finalizer = access_flags.has_finalizer();
    59   _has_finalizer = access_flags.has_finalizer();
    60   _has_subklass = flags().is_final() ? subklass_false : subklass_unknown;
    60   _has_subklass = ik->subklass() != NULL;
    61   _init_state = ik->init_state();
    61   _init_state = ik->init_state();
    62   _nonstatic_field_size = ik->nonstatic_field_size();
    62   _nonstatic_field_size = ik->nonstatic_field_size();
    63   _has_nonstatic_fields = ik->has_nonstatic_fields();
    63   _has_nonstatic_fields = ik->has_nonstatic_fields();
    64   _has_nonstatic_concrete_methods = ik->has_nonstatic_concrete_methods();
    64   _has_nonstatic_concrete_methods = ik->has_nonstatic_concrete_methods();
    65   _is_unsafe_anonymous = ik->is_unsafe_anonymous();
    65   _is_unsafe_anonymous = ik->is_unsafe_anonymous();
   144 
   144 
   145 // ------------------------------------------------------------------
   145 // ------------------------------------------------------------------
   146 // ciInstanceKlass::compute_shared_has_subklass
   146 // ciInstanceKlass::compute_shared_has_subklass
   147 bool ciInstanceKlass::compute_shared_has_subklass() {
   147 bool ciInstanceKlass::compute_shared_has_subklass() {
   148   GUARDED_VM_ENTRY(
   148   GUARDED_VM_ENTRY(
   149     MutexLocker ml(Compile_lock);
       
   150     InstanceKlass* ik = get_instanceKlass();
   149     InstanceKlass* ik = get_instanceKlass();
   151     _has_subklass = ik->subklass() != NULL ? subklass_true : subklass_false;
   150     _has_subklass = ik->subklass() != NULL;
   152     return _has_subklass == subklass_true;
   151     return _has_subklass;
   153   )
   152   )
   154 }
   153 }
   155 
   154 
   156 // ------------------------------------------------------------------
   155 // ------------------------------------------------------------------
   157 // ciInstanceKlass::loader
   156 // ciInstanceKlass::loader
   373 ciInstanceKlass* ciInstanceKlass::unique_concrete_subklass() {
   372 ciInstanceKlass* ciInstanceKlass::unique_concrete_subklass() {
   374   if (!is_loaded())     return NULL; // No change if class is not loaded
   373   if (!is_loaded())     return NULL; // No change if class is not loaded
   375   if (!is_abstract())   return NULL; // Only applies to abstract classes.
   374   if (!is_abstract())   return NULL; // Only applies to abstract classes.
   376   if (!has_subklass())  return NULL; // Must have at least one subklass.
   375   if (!has_subklass())  return NULL; // Must have at least one subklass.
   377   VM_ENTRY_MARK;
   376   VM_ENTRY_MARK;
   378   MutexLocker ml(Compile_lock);
       
   379   InstanceKlass* ik = get_instanceKlass();
   377   InstanceKlass* ik = get_instanceKlass();
   380   Klass* up = ik->up_cast_abstract();
   378   Klass* up = ik->up_cast_abstract();
   381   assert(up->is_instance_klass(), "must be InstanceKlass");
   379   assert(up->is_instance_klass(), "must be InstanceKlass");
   382   if (ik == up) {
   380   if (ik == up) {
   383     return NULL;
   381     return NULL;
   388 // ------------------------------------------------------------------
   386 // ------------------------------------------------------------------
   389 // ciInstanceKlass::has_finalizable_subclass
   387 // ciInstanceKlass::has_finalizable_subclass
   390 bool ciInstanceKlass::has_finalizable_subclass() {
   388 bool ciInstanceKlass::has_finalizable_subclass() {
   391   if (!is_loaded())     return true;
   389   if (!is_loaded())     return true;
   392   VM_ENTRY_MARK;
   390   VM_ENTRY_MARK;
   393   MutexLocker ml(Compile_lock);
       
   394   return Dependencies::find_finalizable_subclass(get_instanceKlass()) != NULL;
   391   return Dependencies::find_finalizable_subclass(get_instanceKlass()) != NULL;
   395 }
   392 }
   396 
   393 
   397 // ------------------------------------------------------------------
   394 // ------------------------------------------------------------------
   398 // ciInstanceKlass::get_field_by_offset
   395 // ciInstanceKlass::get_field_by_offset
   578 bool ciInstanceKlass::is_leaf_type() {
   575 bool ciInstanceKlass::is_leaf_type() {
   579   assert(is_loaded(), "must be loaded");
   576   assert(is_loaded(), "must be loaded");
   580   if (is_shared()) {
   577   if (is_shared()) {
   581     return is_final();  // approximately correct
   578     return is_final();  // approximately correct
   582   } else {
   579   } else {
   583     return !has_subklass() && (nof_implementors() == 0);
   580     return !_has_subklass && (nof_implementors() == 0);
   584   }
   581   }
   585 }
   582 }
   586 
   583 
   587 // ------------------------------------------------------------------
   584 // ------------------------------------------------------------------
   588 // ciInstanceKlass::implementor
   585 // ciInstanceKlass::implementor