< prev index next >

src/hotspot/share/ci/ciMethod.cpp

Print this page

        

@@ -87,10 +87,11 @@
   _balanced_monitors  = !_uses_monitors || h_m()->access_flags().is_monitor_matching();
   _is_c1_compilable   = !h_m()->is_not_c1_compilable();
   _is_c2_compilable   = !h_m()->is_not_c2_compilable();
   _can_be_parsed      = true;
   _has_reserved_stack_access = h_m()->has_reserved_stack_access();
+  _is_overpass        = h_m()->is_overpass();
   // Lazy fields, filled in on demand.  Require allocation.
   _code               = NULL;
   _exception_handlers = NULL;
   _liveness           = NULL;
   _method_blocks = NULL;

@@ -716,11 +717,11 @@
   if (!UseCHA)  return NULL;
 
   VM_ENTRY_MARK;
 
   // Disable CHA for default methods for now
-  if (root_m->get_Method()->is_default_method()) {
+  if (root_m->is_default_method()) {
     return NULL;
   }
 
   methodHandle target;
   {

@@ -756,10 +757,11 @@
     // methods in other packages.
     // %%% TO DO: Work out logic for package-private methods
     // with the same name but different vtable indexes.
     return NULL;
   }
+  assert(!target()->is_abstract(), "not allowed");
   return CURRENT_THREAD_ENV->get_method(target());
 }
 
 // ------------------------------------------------------------------
 // ciMethod::resolve_invoke

@@ -872,10 +874,18 @@
   iter.next();
   return iter.get_method(will_link, declared_signature);
 }
 
 // ------------------------------------------------------------------
+ciKlass* ciMethod::get_declared_method_holder_at_bci(int bci) {
+  ciBytecodeStream iter(this);
+  iter.reset_to_bci(bci);
+  iter.next();
+  return iter.get_declared_method_holder();
+}
+
+// ------------------------------------------------------------------
 // Adjust a CounterData count to be commensurate with
 // interpreter_invocation_count.  If the MDO exists for
 // only 25% of the time the method exists, then the
 // counts in the MDO should be scaled by 4X, so that
 // they can be usefully and stably compared against the
< prev index next >