1 /*
   2  * Copyright 1999-2009 Sun Microsystems, Inc.  All Rights Reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  20  * CA 95054 USA or visit www.sun.com if you need additional information or
  21  * have any questions.
  22  *
  23  */
  24 
  25 #include "incls/_precompiled.incl"
  26 #include "incls/_ciMethod.cpp.incl"
  27 
  28 // ciMethod
  29 //
  30 // This class represents a methodOop in the HotSpot virtual
  31 // machine.
  32 
  33 
  34 // ------------------------------------------------------------------
  35 // ciMethod::ciMethod
  36 //
  37 // Loaded method.
  38 ciMethod::ciMethod(methodHandle h_m) : ciObject(h_m) {
  39   assert(h_m() != NULL, "no null method");
  40 
  41   // These fields are always filled in in loaded methods.
  42   _flags = ciFlags(h_m()->access_flags());
  43 
  44   // Easy to compute, so fill them in now.
  45   _max_stack          = h_m()->max_stack();
  46   _max_locals         = h_m()->max_locals();
  47   _code_size          = h_m()->code_size();
  48   _intrinsic_id       = h_m()->intrinsic_id();
  49   _handler_count      = h_m()->exception_table()->length() / 4;
  50   _uses_monitors      = h_m()->access_flags().has_monitor_bytecodes();
  51   _balanced_monitors  = !_uses_monitors || h_m()->access_flags().is_monitor_matching();
  52   _is_compilable      = !h_m()->is_not_compilable();
  53   // Lazy fields, filled in on demand.  Require allocation.
  54   _code               = NULL;
  55   _exception_handlers = NULL;
  56   _liveness           = NULL;
  57   _bcea = NULL;
  58   _method_blocks = NULL;
  59 #ifdef COMPILER2
  60   _flow               = NULL;
  61 #endif // COMPILER2
  62 
  63   ciEnv *env = CURRENT_ENV;
  64   if (env->jvmti_can_hotswap_or_post_breakpoint() && _is_compilable) {
  65     // 6328518 check hotswap conditions under the right lock.
  66     MutexLocker locker(Compile_lock);
  67     if (Dependencies::check_evol_method(h_m()) != NULL) {
  68       _is_compilable = false;
  69     }
  70   } else {
  71     CHECK_UNHANDLED_OOPS_ONLY(Thread::current()->clear_unhandled_oops());
  72   }
  73 
  74   if (instanceKlass::cast(h_m()->method_holder())->is_linked()) {
  75     _can_be_statically_bound = h_m()->can_be_statically_bound();
  76   } else {
  77     // Have to use a conservative value in this case.
  78     _can_be_statically_bound = false;
  79   }
  80 
  81   // Adjust the definition of this condition to be more useful:
  82   // %%% take these conditions into account in vtable generation
  83   if (!_can_be_statically_bound && h_m()->is_private())
  84     _can_be_statically_bound = true;
  85   if (_can_be_statically_bound && h_m()->is_abstract())
  86     _can_be_statically_bound = false;
  87 
  88   // generating _signature may allow GC and therefore move m.
  89   // These fields are always filled in.
  90   _name = env->get_object(h_m()->name())->as_symbol();
  91   _holder = env->get_object(h_m()->method_holder())->as_instance_klass();
  92   ciSymbol* sig_symbol = env->get_object(h_m()->signature())->as_symbol();
  93   _signature = new (env->arena()) ciSignature(_holder, sig_symbol);
  94   _method_data = NULL;
  95   // Take a snapshot of these values, so they will be commensurate with the MDO.
  96   if (ProfileInterpreter) {
  97     int invcnt = h_m()->interpreter_invocation_count();
  98     // if the value overflowed report it as max int
  99     _interpreter_invocation_count = invcnt < 0 ? max_jint : invcnt ;
 100     _interpreter_throwout_count   = h_m()->interpreter_throwout_count();
 101   } else {
 102     _interpreter_invocation_count = 0;
 103     _interpreter_throwout_count = 0;
 104   }
 105   if (_interpreter_invocation_count == 0)
 106     _interpreter_invocation_count = 1;
 107 }
 108 
 109 
 110 // ------------------------------------------------------------------
 111 // ciMethod::ciMethod
 112 //
 113 // Unloaded method.
 114 ciMethod::ciMethod(ciInstanceKlass* holder,
 115                    ciSymbol* name,
 116                    ciSymbol* signature) : ciObject(ciMethodKlass::make()) {
 117   // These fields are always filled in.
 118   _name = name;
 119   _holder = holder;
 120   _signature = new (CURRENT_ENV->arena()) ciSignature(_holder, signature);
 121   _intrinsic_id = vmIntrinsics::_none;
 122   _liveness = NULL;
 123   _can_be_statically_bound = false;
 124   _bcea = NULL;
 125   _method_blocks = NULL;
 126   _method_data = NULL;
 127 #ifdef COMPILER2
 128   _flow = NULL;
 129 #endif // COMPILER2
 130 }
 131 
 132 
 133 // ------------------------------------------------------------------
 134 // ciMethod::load_code
 135 //
 136 // Load the bytecodes and exception handler table for this method.
 137 void ciMethod::load_code() {
 138   VM_ENTRY_MARK;
 139   assert(is_loaded(), "only loaded methods have code");
 140 
 141   methodOop me = get_methodOop();
 142   Arena* arena = CURRENT_THREAD_ENV->arena();
 143 
 144   // Load the bytecodes.
 145   _code = (address)arena->Amalloc(code_size());
 146   memcpy(_code, me->code_base(), code_size());
 147 
 148   // Revert any breakpoint bytecodes in ci's copy
 149   if (me->number_of_breakpoints() > 0) {
 150     BreakpointInfo* bp = instanceKlass::cast(me->method_holder())->breakpoints();
 151     for (; bp != NULL; bp = bp->next()) {
 152       if (bp->match(me)) {
 153         code_at_put(bp->bci(), bp->orig_bytecode());
 154       }
 155     }
 156   }
 157 
 158   // And load the exception table.
 159   typeArrayOop exc_table = me->exception_table();
 160 
 161   // Allocate one extra spot in our list of exceptions.  This
 162   // last entry will be used to represent the possibility that
 163   // an exception escapes the method.  See ciExceptionHandlerStream
 164   // for details.
 165   _exception_handlers =
 166     (ciExceptionHandler**)arena->Amalloc(sizeof(ciExceptionHandler*)
 167                                          * (_handler_count + 1));
 168   if (_handler_count > 0) {
 169     for (int i=0; i<_handler_count; i++) {
 170       int base = i*4;
 171       _exception_handlers[i] = new (arena) ciExceptionHandler(
 172                                 holder(),
 173             /* start    */      exc_table->int_at(base),
 174             /* limit    */      exc_table->int_at(base+1),
 175             /* goto pc  */      exc_table->int_at(base+2),
 176             /* cp index */      exc_table->int_at(base+3));
 177     }
 178   }
 179 
 180   // Put an entry at the end of our list to represent the possibility
 181   // of exceptional exit.
 182   _exception_handlers[_handler_count] =
 183     new (arena) ciExceptionHandler(holder(), 0, code_size(), -1, 0);
 184 
 185   if (CIPrintMethodCodes) {
 186     print_codes();
 187   }
 188 }
 189 
 190 
 191 // ------------------------------------------------------------------
 192 // ciMethod::has_linenumber_table
 193 //
 194 // length unknown until decompression
 195 bool    ciMethod::has_linenumber_table() const {
 196   check_is_loaded();
 197   VM_ENTRY_MARK;
 198   return get_methodOop()->has_linenumber_table();
 199 }
 200 
 201 
 202 // ------------------------------------------------------------------
 203 // ciMethod::compressed_linenumber_table
 204 u_char* ciMethod::compressed_linenumber_table() const {
 205   check_is_loaded();
 206   VM_ENTRY_MARK;
 207   return get_methodOop()->compressed_linenumber_table();
 208 }
 209 
 210 
 211 // ------------------------------------------------------------------
 212 // ciMethod::line_number_from_bci
 213 int ciMethod::line_number_from_bci(int bci) const {
 214   check_is_loaded();
 215   VM_ENTRY_MARK;
 216   return get_methodOop()->line_number_from_bci(bci);
 217 }
 218 
 219 
 220 // ------------------------------------------------------------------
 221 // ciMethod::vtable_index
 222 //
 223 // Get the position of this method's entry in the vtable, if any.
 224 int ciMethod::vtable_index() {
 225   check_is_loaded();
 226   assert(holder()->is_linked(), "must be linked");
 227   VM_ENTRY_MARK;
 228   return get_methodOop()->vtable_index();
 229 }
 230 
 231 
 232 // ------------------------------------------------------------------
 233 // ciMethod::native_entry
 234 //
 235 // Get the address of this method's native code, if any.
 236 address ciMethod::native_entry() {
 237   check_is_loaded();
 238   assert(flags().is_native(), "must be native method");
 239   VM_ENTRY_MARK;
 240   methodOop method = get_methodOop();
 241   address entry = method->native_function();
 242   assert(entry != NULL, "must be valid entry point");
 243   return entry;
 244 }
 245 
 246 
 247 // ------------------------------------------------------------------
 248 // ciMethod::interpreter_entry
 249 //
 250 // Get the entry point for running this method in the interpreter.
 251 address ciMethod::interpreter_entry() {
 252   check_is_loaded();
 253   VM_ENTRY_MARK;
 254   methodHandle mh(THREAD, get_methodOop());
 255   return Interpreter::entry_for_method(mh);
 256 }
 257 
 258 
 259 // ------------------------------------------------------------------
 260 // ciMethod::uses_balanced_monitors
 261 //
 262 // Does this method use monitors in a strict stack-disciplined manner?
 263 bool ciMethod::has_balanced_monitors() {
 264   check_is_loaded();
 265   if (_balanced_monitors) return true;
 266 
 267   // Analyze the method to see if monitors are used properly.
 268   VM_ENTRY_MARK;
 269   methodHandle method(THREAD, get_methodOop());
 270   assert(method->has_monitor_bytecodes(), "should have checked this");
 271 
 272   // Check to see if a previous compilation computed the
 273   // monitor-matching analysis.
 274   if (method->guaranteed_monitor_matching()) {
 275     _balanced_monitors = true;
 276     return true;
 277   }
 278 
 279   {
 280     EXCEPTION_MARK;
 281     ResourceMark rm(THREAD);
 282     GeneratePairingInfo gpi(method);
 283     gpi.compute_map(CATCH);
 284     if (!gpi.monitor_safe()) {
 285       return false;
 286     }
 287     method->set_guaranteed_monitor_matching();
 288     _balanced_monitors = true;
 289   }
 290   return true;
 291 }
 292 
 293 
 294 // ------------------------------------------------------------------
 295 // ciMethod::get_flow_analysis
 296 ciTypeFlow* ciMethod::get_flow_analysis() {
 297 #ifdef COMPILER2
 298   if (_flow == NULL) {
 299     ciEnv* env = CURRENT_ENV;
 300     _flow = new (env->arena()) ciTypeFlow(env, this);
 301     _flow->do_flow();
 302   }
 303   return _flow;
 304 #else // COMPILER2
 305   ShouldNotReachHere();
 306   return NULL;
 307 #endif // COMPILER2
 308 }
 309 
 310 
 311 // ------------------------------------------------------------------
 312 // ciMethod::get_osr_flow_analysis
 313 ciTypeFlow* ciMethod::get_osr_flow_analysis(int osr_bci) {
 314 #ifdef COMPILER2
 315   // OSR entry points are always place after a call bytecode of some sort
 316   assert(osr_bci >= 0, "must supply valid OSR entry point");
 317   ciEnv* env = CURRENT_ENV;
 318   ciTypeFlow* flow = new (env->arena()) ciTypeFlow(env, this, osr_bci);
 319   flow->do_flow();
 320   return flow;
 321 #else // COMPILER2
 322   ShouldNotReachHere();
 323   return NULL;
 324 #endif // COMPILER2
 325 }
 326 
 327 // ------------------------------------------------------------------
 328 // ciMethod::liveness_at_bci
 329 //
 330 // Which local variables are live at a specific bci?
 331 MethodLivenessResult ciMethod::liveness_at_bci(int bci, bool raw) {
 332   check_is_loaded();
 333   if (_liveness == NULL) {
 334     // Create the liveness analyzer.
 335     Arena* arena = CURRENT_ENV->arena();
 336     _liveness = new (arena) MethodLiveness(arena, this);
 337     _liveness->compute_liveness();
 338   }
 339   MethodLivenessResult result = _liveness->get_liveness_at(bci);
 340   if (!raw &&
 341       (CURRENT_ENV->jvmti_can_access_local_variables() || DeoptimizeALot || CompileTheWorld)) {
 342     // Keep all locals live for the user's edification and amusement.
 343     result.at_put_range(0, result.size(), true);
 344   }
 345   return result;
 346 }
 347 
 348 // ciMethod::live_local_oops_at_bci
 349 //
 350 // find all the live oops in the locals array for a particular bci
 351 // Compute what the interpreter believes by using the interpreter
 352 // oopmap generator. This is used as a double check during osr to
 353 // guard against conservative result from MethodLiveness making us
 354 // think a dead oop is live.  MethodLiveness is conservative in the
 355 // sense that it may consider locals to be live which cannot be live,
 356 // like in the case where a local could contain an oop or  a primitive
 357 // along different paths.  In that case the local must be dead when
 358 // those paths merge. Since the interpreter's viewpoint is used when
 359 // gc'ing an interpreter frame we need to use its viewpoint  during
 360 // OSR when loading the locals.
 361 
 362 BitMap ciMethod::live_local_oops_at_bci(int bci) {
 363   VM_ENTRY_MARK;
 364   InterpreterOopMap mask;
 365   OopMapCache::compute_one_oop_map(get_methodOop(), bci, &mask);
 366   int mask_size = max_locals();
 367   BitMap result(mask_size);
 368   result.clear();
 369   int i;
 370   for (i = 0; i < mask_size ; i++ ) {
 371     if (mask.is_oop(i)) result.set_bit(i);
 372   }
 373   return result;
 374 }
 375 
 376 
 377 #ifdef COMPILER1
 378 // ------------------------------------------------------------------
 379 // ciMethod::bci_block_start
 380 //
 381 // Marks all bcis where a new basic block starts
 382 const BitMap ciMethod::bci_block_start() {
 383   check_is_loaded();
 384   if (_liveness == NULL) {
 385     // Create the liveness analyzer.
 386     Arena* arena = CURRENT_ENV->arena();
 387     _liveness = new (arena) MethodLiveness(arena, this);
 388     _liveness->compute_liveness();
 389   }
 390 
 391   return _liveness->get_bci_block_start();
 392 }
 393 #endif // COMPILER1
 394 
 395 
 396 // ------------------------------------------------------------------
 397 // ciMethod::call_profile_at_bci
 398 //
 399 // Get the ciCallProfile for the invocation of this method.
 400 // Also reports receiver types for non-call type checks (if TypeProfileCasts).
 401 ciCallProfile ciMethod::call_profile_at_bci(int bci) {
 402   ResourceMark rm;
 403   ciCallProfile result;
 404   if (method_data() != NULL && method_data()->is_mature()) {
 405     ciProfileData* data = method_data()->bci_to_data(bci);
 406     if (data != NULL && data->is_CounterData()) {
 407       // Every profiled call site has a counter.
 408       int count = data->as_CounterData()->count();
 409 
 410       if (!data->is_ReceiverTypeData()) {
 411         result._receiver_count[0] = 0;  // that's a definite zero
 412       } else { // ReceiverTypeData is a subclass of CounterData
 413         ciReceiverTypeData* call = (ciReceiverTypeData*)data->as_ReceiverTypeData();
 414         // In addition, virtual call sites have receiver type information
 415         int receivers_count_total = 0;
 416         int morphism = 0;
 417         for (uint i = 0; i < call->row_limit(); i++) {
 418           ciKlass* receiver = call->receiver(i);
 419           if (receiver == NULL)  continue;
 420           morphism += 1;
 421           int rcount = call->receiver_count(i);
 422           if (rcount == 0) rcount = 1; // Should be valid value
 423           receivers_count_total += rcount;
 424           // Add the receiver to result data.
 425           result.add_receiver(receiver, rcount);
 426           // If we extend profiling to record methods,
 427           // we will set result._method also.
 428         }
 429         // Determine call site's morphism.
 430         // The call site count could be == (receivers_count_total + 1)
 431         // not only in the case of a polymorphic call but also in the case
 432         // when a method data snapshot is taken after the site count was updated
 433         // but before receivers counters were updated.
 434         if (morphism == result._limit) {
 435            // There were no array klasses and morphism <= MorphismLimit.
 436            if (morphism <  ciCallProfile::MorphismLimit ||
 437                morphism == ciCallProfile::MorphismLimit &&
 438                (receivers_count_total+1) >= count) {
 439              result._morphism = morphism;
 440            }
 441         }
 442         // Make the count consistent if this is a call profile. If count is
 443         // zero or less, presume that this is a typecheck profile and
 444         // do nothing.  Otherwise, increase count to be the sum of all
 445         // receiver's counts.
 446         if (count > 0) {
 447           if (count < receivers_count_total) {
 448             count = receivers_count_total;
 449           }
 450         }
 451       }
 452       result._count = count;
 453     }
 454   }
 455   return result;
 456 }
 457 
 458 // ------------------------------------------------------------------
 459 // Add new receiver and sort data by receiver's profile count.
 460 void ciCallProfile::add_receiver(ciKlass* receiver, int receiver_count) {
 461   // Add new receiver and sort data by receiver's counts when we have space
 462   // for it otherwise replace the less called receiver (less called receiver
 463   // is placed to the last array element which is not used).
 464   // First array's element contains most called receiver.
 465   int i = _limit;
 466   for (; i > 0 && receiver_count > _receiver_count[i-1]; i--) {
 467     _receiver[i] = _receiver[i-1];
 468     _receiver_count[i] = _receiver_count[i-1];
 469   }
 470   _receiver[i] = receiver;
 471   _receiver_count[i] = receiver_count;
 472   if (_limit < MorphismLimit) _limit++;
 473 }
 474 
 475 // ------------------------------------------------------------------
 476 // ciMethod::find_monomorphic_target
 477 //
 478 // Given a certain calling environment, find the monomorphic target
 479 // for the call.  Return NULL if the call is not monomorphic in
 480 // its calling environment, or if there are only abstract methods.
 481 // The returned method is never abstract.
 482 // Note: If caller uses a non-null result, it must inform dependencies
 483 // via assert_unique_concrete_method or assert_leaf_type.
 484 ciMethod* ciMethod::find_monomorphic_target(ciInstanceKlass* caller,
 485                                             ciInstanceKlass* callee_holder,
 486                                             ciInstanceKlass* actual_recv) {
 487   check_is_loaded();
 488 
 489   if (actual_recv->is_interface()) {
 490     // %%% We cannot trust interface types, yet.  See bug 6312651.
 491     return NULL;
 492   }
 493 
 494   ciMethod* root_m = resolve_invoke(caller, actual_recv);
 495   if (root_m == NULL) {
 496     // Something went wrong looking up the actual receiver method.
 497     return NULL;
 498   }
 499   assert(!root_m->is_abstract(), "resolve_invoke promise");
 500 
 501   // Make certain quick checks even if UseCHA is false.
 502 
 503   // Is it private or final?
 504   if (root_m->can_be_statically_bound()) {
 505     return root_m;
 506   }
 507 
 508   if (actual_recv->is_leaf_type() && actual_recv == root_m->holder()) {
 509     // Easy case.  There is no other place to put a method, so don't bother
 510     // to go through the VM_ENTRY_MARK and all the rest.
 511     return root_m;
 512   }
 513 
 514   // Array methods (clone, hashCode, etc.) are always statically bound.
 515   // If we were to see an array type here, we'd return root_m.
 516   // However, this method processes only ciInstanceKlasses.  (See 4962591.)
 517   // The inline_native_clone intrinsic narrows Object to T[] properly,
 518   // so there is no need to do the same job here.
 519 
 520   if (!UseCHA)  return NULL;
 521 
 522   VM_ENTRY_MARK;
 523 
 524   methodHandle target;
 525   {
 526     MutexLocker locker(Compile_lock);
 527     klassOop context = actual_recv->get_klassOop();
 528     target = Dependencies::find_unique_concrete_method(context,
 529                                                        root_m->get_methodOop());
 530     // %%% Should upgrade this ciMethod API to look for 1 or 2 concrete methods.
 531   }
 532 
 533 #ifndef PRODUCT
 534   if (TraceDependencies && target() != NULL && target() != root_m->get_methodOop()) {
 535     tty->print("found a non-root unique target method");
 536     tty->print_cr("  context = %s", instanceKlass::cast(actual_recv->get_klassOop())->external_name());
 537     tty->print("  method  = ");
 538     target->print_short_name(tty);
 539     tty->cr();
 540   }
 541 #endif //PRODUCT
 542 
 543   if (target() == NULL) {
 544     return NULL;
 545   }
 546   if (target() == root_m->get_methodOop()) {
 547     return root_m;
 548   }
 549   if (!root_m->is_public() &&
 550       !root_m->is_protected()) {
 551     // If we are going to reason about inheritance, it's easiest
 552     // if the method in question is public, protected, or private.
 553     // If the answer is not root_m, it is conservatively correct
 554     // to return NULL, even if the CHA encountered irrelevant
 555     // methods in other packages.
 556     // %%% TO DO: Work out logic for package-private methods
 557     // with the same name but different vtable indexes.
 558     return NULL;
 559   }
 560   return CURRENT_THREAD_ENV->get_object(target())->as_method();
 561 }
 562 
 563 // ------------------------------------------------------------------
 564 // ciMethod::resolve_invoke
 565 //
 566 // Given a known receiver klass, find the target for the call.
 567 // Return NULL if the call has no target or the target is abstract.
 568 ciMethod* ciMethod::resolve_invoke(ciKlass* caller, ciKlass* exact_receiver) {
 569    check_is_loaded();
 570    VM_ENTRY_MARK;
 571 
 572    KlassHandle caller_klass (THREAD, caller->get_klassOop());
 573    KlassHandle h_recv       (THREAD, exact_receiver->get_klassOop());
 574    KlassHandle h_resolved   (THREAD, holder()->get_klassOop());
 575    symbolHandle h_name      (THREAD, name()->get_symbolOop());
 576    symbolHandle h_signature (THREAD, signature()->get_symbolOop());
 577 
 578    methodHandle m;
 579    // Only do exact lookup if receiver klass has been linked.  Otherwise,
 580    // the vtable has not been setup, and the LinkResolver will fail.
 581    if (h_recv->oop_is_javaArray()
 582         ||
 583        instanceKlass::cast(h_recv())->is_linked() && !exact_receiver->is_interface()) {
 584      if (holder()->is_interface()) {
 585        m = LinkResolver::resolve_interface_call_or_null(h_recv, h_resolved, h_name, h_signature, caller_klass);
 586      } else {
 587        m = LinkResolver::resolve_virtual_call_or_null(h_recv, h_resolved, h_name, h_signature, caller_klass);
 588      }
 589    }
 590 
 591    if (m.is_null()) {
 592      // Return NULL only if there was a problem with lookup (uninitialized class, etc.)
 593      return NULL;
 594    }
 595 
 596    ciMethod* result = this;
 597    if (m() != get_methodOop()) {
 598      result = CURRENT_THREAD_ENV->get_object(m())->as_method();
 599    }
 600 
 601    // Don't return abstract methods because they aren't
 602    // optimizable or interesting.
 603    if (result->is_abstract()) {
 604      return NULL;
 605    } else {
 606      return result;
 607    }
 608 }
 609 
 610 // ------------------------------------------------------------------
 611 // ciMethod::resolve_vtable_index
 612 //
 613 // Given a known receiver klass, find the vtable index for the call.
 614 // Return methodOopDesc::invalid_vtable_index if the vtable_index is unknown.
 615 int ciMethod::resolve_vtable_index(ciKlass* caller, ciKlass* receiver) {
 616    check_is_loaded();
 617 
 618    int vtable_index = methodOopDesc::invalid_vtable_index;
 619    // Only do lookup if receiver klass has been linked.  Otherwise,
 620    // the vtable has not been setup, and the LinkResolver will fail.
 621    if (!receiver->is_interface()
 622        && (!receiver->is_instance_klass() ||
 623            receiver->as_instance_klass()->is_linked())) {
 624      VM_ENTRY_MARK;
 625 
 626      KlassHandle caller_klass (THREAD, caller->get_klassOop());
 627      KlassHandle h_recv       (THREAD, receiver->get_klassOop());
 628      symbolHandle h_name      (THREAD, name()->get_symbolOop());
 629      symbolHandle h_signature (THREAD, signature()->get_symbolOop());
 630 
 631      vtable_index = LinkResolver::resolve_virtual_vtable_index(h_recv, h_recv, h_name, h_signature, caller_klass);
 632      if (vtable_index == methodOopDesc::nonvirtual_vtable_index) {
 633        // A statically bound method.  Return "no such index".
 634        vtable_index = methodOopDesc::invalid_vtable_index;
 635      }
 636    }
 637 
 638    return vtable_index;
 639 }
 640 
 641 // ------------------------------------------------------------------
 642 // ciMethod::interpreter_call_site_count
 643 int ciMethod::interpreter_call_site_count(int bci) {
 644   if (method_data() != NULL) {
 645     ResourceMark rm;
 646     ciProfileData* data = method_data()->bci_to_data(bci);
 647     if (data != NULL && data->is_CounterData()) {
 648       return scale_count(data->as_CounterData()->count());
 649     }
 650   }
 651   return -1;  // unknown
 652 }
 653 
 654 // ------------------------------------------------------------------
 655 // Adjust a CounterData count to be commensurate with
 656 // interpreter_invocation_count.  If the MDO exists for
 657 // only 25% of the time the method exists, then the
 658 // counts in the MDO should be scaled by 4X, so that
 659 // they can be usefully and stably compared against the
 660 // invocation counts in methods.
 661 int ciMethod::scale_count(int count, float prof_factor) {
 662   if (count > 0 && method_data() != NULL) {
 663     int current_mileage = method_data()->current_mileage();
 664     int creation_mileage = method_data()->creation_mileage();
 665     int counter_life = current_mileage - creation_mileage;
 666     int method_life = interpreter_invocation_count();
 667     // counter_life due to backedge_counter could be > method_life
 668     if (counter_life > method_life)
 669       counter_life = method_life;
 670     if (0 < counter_life && counter_life <= method_life) {
 671       count = (int)((double)count * prof_factor * method_life / counter_life + 0.5);
 672       count = (count > 0) ? count : 1;
 673     }
 674   }
 675   return count;
 676 }
 677 
 678 // ------------------------------------------------------------------
 679 // invokedynamic support
 680 //
 681 bool ciMethod::is_method_handle_invoke() {
 682   check_is_loaded();
 683   bool flag = ((flags().as_int() & JVM_MH_INVOKE_BITS) == JVM_MH_INVOKE_BITS);
 684 #ifdef ASSERT
 685   {
 686     VM_ENTRY_MARK;
 687     bool flag2 = get_methodOop()->is_method_handle_invoke();
 688     assert(flag == flag2, "consistent");
 689   }
 690 #endif //ASSERT
 691   return flag;
 692 }
 693 
 694 ciInstance* ciMethod::method_handle_type() {
 695   check_is_loaded();
 696   VM_ENTRY_MARK;
 697   oop mtype = get_methodOop()->method_handle_type();
 698   return CURRENT_THREAD_ENV->get_object(mtype)->as_instance();
 699 }
 700 
 701 
 702 // ------------------------------------------------------------------
 703 // ciMethod::build_method_data
 704 //
 705 // Generate new methodDataOop objects at compile time.
 706 void ciMethod::build_method_data(methodHandle h_m) {
 707   EXCEPTION_CONTEXT;
 708   if (is_native() || is_abstract() || h_m()->is_accessor()) return;
 709   if (h_m()->method_data() == NULL) {
 710     methodOopDesc::build_interpreter_method_data(h_m, THREAD);
 711     if (HAS_PENDING_EXCEPTION) {
 712       CLEAR_PENDING_EXCEPTION;
 713     }
 714   }
 715   if (h_m()->method_data() != NULL) {
 716     _method_data = CURRENT_ENV->get_object(h_m()->method_data())->as_method_data();
 717     _method_data->load_data();
 718   } else {
 719     _method_data = CURRENT_ENV->get_empty_methodData();
 720   }
 721 }
 722 
 723 // public, retroactive version
 724 void ciMethod::build_method_data() {
 725   if (_method_data == NULL || _method_data->is_empty()) {
 726     GUARDED_VM_ENTRY({
 727       build_method_data(get_methodOop());
 728     });
 729   }
 730 }
 731 
 732 
 733 // ------------------------------------------------------------------
 734 // ciMethod::method_data
 735 //
 736 ciMethodData* ciMethod::method_data() {
 737   if (_method_data != NULL) {
 738     return _method_data;
 739   }
 740   VM_ENTRY_MARK;
 741   ciEnv* env = CURRENT_ENV;
 742   Thread* my_thread = JavaThread::current();
 743   methodHandle h_m(my_thread, get_methodOop());
 744 
 745   if (Tier1UpdateMethodData && is_tier1_compile(env->comp_level())) {
 746     build_method_data(h_m);
 747   }
 748 
 749   if (h_m()->method_data() != NULL) {
 750     _method_data = CURRENT_ENV->get_object(h_m()->method_data())->as_method_data();
 751     _method_data->load_data();
 752   } else {
 753     _method_data = CURRENT_ENV->get_empty_methodData();
 754   }
 755   return _method_data;
 756 
 757 }
 758 
 759 
 760 // ------------------------------------------------------------------
 761 // ciMethod::will_link
 762 //
 763 // Will this method link in a specific calling context?
 764 bool ciMethod::will_link(ciKlass* accessing_klass,
 765                          ciKlass* declared_method_holder,
 766                          Bytecodes::Code bc) {
 767   if (!is_loaded()) {
 768     // Method lookup failed.
 769     return false;
 770   }
 771 
 772   // The link checks have been front-loaded into the get_method
 773   // call.  This method (ciMethod::will_link()) will be removed
 774   // in the future.
 775 
 776   return true;
 777 }
 778 
 779 // ------------------------------------------------------------------
 780 // ciMethod::should_exclude
 781 //
 782 // Should this method be excluded from compilation?
 783 bool ciMethod::should_exclude() {
 784   check_is_loaded();
 785   VM_ENTRY_MARK;
 786   methodHandle mh(THREAD, get_methodOop());
 787   bool ignore;
 788   return CompilerOracle::should_exclude(mh, ignore);
 789 }
 790 
 791 // ------------------------------------------------------------------
 792 // ciMethod::should_inline
 793 //
 794 // Should this method be inlined during compilation?
 795 bool ciMethod::should_inline() {
 796   check_is_loaded();
 797   VM_ENTRY_MARK;
 798   methodHandle mh(THREAD, get_methodOop());
 799   return CompilerOracle::should_inline(mh);
 800 }
 801 
 802 // ------------------------------------------------------------------
 803 // ciMethod::should_not_inline
 804 //
 805 // Should this method be disallowed from inlining during compilation?
 806 bool ciMethod::should_not_inline() {
 807   check_is_loaded();
 808   VM_ENTRY_MARK;
 809   methodHandle mh(THREAD, get_methodOop());
 810   return CompilerOracle::should_not_inline(mh);
 811 }
 812 
 813 // ------------------------------------------------------------------
 814 // ciMethod::should_print_assembly
 815 //
 816 // Should the compiler print the generated code for this method?
 817 bool ciMethod::should_print_assembly() {
 818   check_is_loaded();
 819   VM_ENTRY_MARK;
 820   methodHandle mh(THREAD, get_methodOop());
 821   return CompilerOracle::should_print(mh);
 822 }
 823 
 824 // ------------------------------------------------------------------
 825 // ciMethod::break_at_execute
 826 //
 827 // Should the compiler insert a breakpoint into the generated code
 828 // method?
 829 bool ciMethod::break_at_execute() {
 830   check_is_loaded();
 831   VM_ENTRY_MARK;
 832   methodHandle mh(THREAD, get_methodOop());
 833   return CompilerOracle::should_break_at(mh);
 834 }
 835 
 836 // ------------------------------------------------------------------
 837 // ciMethod::has_option
 838 //
 839 bool ciMethod::has_option(const char* option) {
 840   check_is_loaded();
 841   VM_ENTRY_MARK;
 842   methodHandle mh(THREAD, get_methodOop());
 843   return CompilerOracle::has_option_string(mh, option);
 844 }
 845 
 846 // ------------------------------------------------------------------
 847 // ciMethod::can_be_compiled
 848 //
 849 // Have previous compilations of this method succeeded?
 850 bool ciMethod::can_be_compiled() {
 851   check_is_loaded();
 852   return _is_compilable;
 853 }
 854 
 855 // ------------------------------------------------------------------
 856 // ciMethod::set_not_compilable
 857 //
 858 // Tell the VM that this method cannot be compiled at all.
 859 void ciMethod::set_not_compilable() {
 860   check_is_loaded();
 861   VM_ENTRY_MARK;
 862   _is_compilable = false;
 863   get_methodOop()->set_not_compilable();
 864 }
 865 
 866 // ------------------------------------------------------------------
 867 // ciMethod::can_be_osr_compiled
 868 //
 869 // Have previous compilations of this method succeeded?
 870 //
 871 // Implementation note: the VM does not currently keep track
 872 // of failed OSR compilations per bci.  The entry_bci parameter
 873 // is currently unused.
 874 bool ciMethod::can_be_osr_compiled(int entry_bci) {
 875   check_is_loaded();
 876   VM_ENTRY_MARK;
 877   return !get_methodOop()->access_flags().is_not_osr_compilable();
 878 }
 879 
 880 // ------------------------------------------------------------------
 881 // ciMethod::has_compiled_code
 882 bool ciMethod::has_compiled_code() {
 883   VM_ENTRY_MARK;
 884   return get_methodOop()->code() != NULL;
 885 }
 886 
 887 // ------------------------------------------------------------------
 888 // ciMethod::instructions_size
 889 // This is a rough metric for "fat" methods, compared
 890 // before inlining with InlineSmallCode.
 891 // The CodeBlob::instructions_size accessor includes
 892 // junk like exception handler, stubs, and constant table,
 893 // which are not highly relevant to an inlined method.
 894 // So we use the more specific accessor nmethod::code_size.
 895 int ciMethod::instructions_size() {
 896   GUARDED_VM_ENTRY(
 897     nmethod* code = get_methodOop()->code();
 898     // if there's no compiled code or the code was produced by the
 899     // tier1 profiler return 0 for the code size.  This should
 900     // probably be based on the compilation level of the nmethod but
 901     // that currently isn't properly recorded.
 902     if (code == NULL ||
 903         (TieredCompilation && code->compiler() != NULL && code->compiler()->is_c1())) {
 904       return 0;
 905     }
 906     return code->code_end() - code->verified_entry_point();
 907   )
 908 }
 909 
 910 // ------------------------------------------------------------------
 911 // ciMethod::log_nmethod_identity
 912 void ciMethod::log_nmethod_identity(xmlStream* log) {
 913   GUARDED_VM_ENTRY(
 914     nmethod* code = get_methodOop()->code();
 915     if (code != NULL) {
 916       code->log_identity(log);
 917     }
 918   )
 919 }
 920 
 921 // ------------------------------------------------------------------
 922 // ciMethod::is_not_reached
 923 bool ciMethod::is_not_reached(int bci) {
 924   check_is_loaded();
 925   VM_ENTRY_MARK;
 926   return Interpreter::is_not_reached(
 927                methodHandle(THREAD, get_methodOop()), bci);
 928 }
 929 
 930 // ------------------------------------------------------------------
 931 // ciMethod::was_never_executed
 932 bool ciMethod::was_executed_more_than(int times) {
 933   VM_ENTRY_MARK;
 934   return get_methodOop()->was_executed_more_than(times);
 935 }
 936 
 937 // ------------------------------------------------------------------
 938 // ciMethod::has_unloaded_classes_in_signature
 939 bool ciMethod::has_unloaded_classes_in_signature() {
 940   VM_ENTRY_MARK;
 941   {
 942     EXCEPTION_MARK;
 943     methodHandle m(THREAD, get_methodOop());
 944     bool has_unloaded = methodOopDesc::has_unloaded_classes_in_signature(m, (JavaThread *)THREAD);
 945     if( HAS_PENDING_EXCEPTION ) {
 946       CLEAR_PENDING_EXCEPTION;
 947       return true;     // Declare that we may have unloaded classes
 948     }
 949     return has_unloaded;
 950   }
 951 }
 952 
 953 // ------------------------------------------------------------------
 954 // ciMethod::is_klass_loaded
 955 bool ciMethod::is_klass_loaded(int refinfo_index, bool must_be_resolved) const {
 956   VM_ENTRY_MARK;
 957   return get_methodOop()->is_klass_loaded(refinfo_index, must_be_resolved);
 958 }
 959 
 960 // ------------------------------------------------------------------
 961 // ciMethod::check_call
 962 bool ciMethod::check_call(int refinfo_index, bool is_static) const {
 963   VM_ENTRY_MARK;
 964   {
 965     EXCEPTION_MARK;
 966     HandleMark hm(THREAD);
 967     constantPoolHandle pool (THREAD, get_methodOop()->constants());
 968     methodHandle spec_method;
 969     KlassHandle  spec_klass;
 970     LinkResolver::resolve_method(spec_method, spec_klass, pool, refinfo_index, THREAD);
 971     if (HAS_PENDING_EXCEPTION) {
 972       CLEAR_PENDING_EXCEPTION;
 973       return false;
 974     } else {
 975       return (spec_method->is_static() == is_static);
 976     }
 977   }
 978   return false;
 979 }
 980 
 981 // ------------------------------------------------------------------
 982 // ciMethod::print_codes
 983 //
 984 // Print the bytecodes for this method.
 985 void ciMethod::print_codes_on(outputStream* st) {
 986   check_is_loaded();
 987   GUARDED_VM_ENTRY(get_methodOop()->print_codes_on(st);)
 988 }
 989 
 990 
 991 #define FETCH_FLAG_FROM_VM(flag_accessor) { \
 992   check_is_loaded(); \
 993   VM_ENTRY_MARK; \
 994   return get_methodOop()->flag_accessor(); \
 995 }
 996 
 997 bool ciMethod::is_empty_method() const {         FETCH_FLAG_FROM_VM(is_empty_method); }
 998 bool ciMethod::is_vanilla_constructor() const {  FETCH_FLAG_FROM_VM(is_vanilla_constructor); }
 999 bool ciMethod::has_loops      () const {         FETCH_FLAG_FROM_VM(has_loops); }
1000 bool ciMethod::has_jsrs       () const {         FETCH_FLAG_FROM_VM(has_jsrs);  }
1001 bool ciMethod::is_accessor    () const {         FETCH_FLAG_FROM_VM(is_accessor); }
1002 bool ciMethod::is_initializer () const {         FETCH_FLAG_FROM_VM(is_initializer); }
1003 
1004 BCEscapeAnalyzer  *ciMethod::get_bcea() {
1005   if (_bcea == NULL) {
1006     _bcea = new (CURRENT_ENV->arena()) BCEscapeAnalyzer(this, NULL);
1007   }
1008   return _bcea;
1009 }
1010 
1011 ciMethodBlocks  *ciMethod::get_method_blocks() {
1012   Arena *arena = CURRENT_ENV->arena();
1013   if (_method_blocks == NULL) {
1014     _method_blocks = new (arena) ciMethodBlocks(arena, this);
1015   }
1016   return _method_blocks;
1017 }
1018 
1019 #undef FETCH_FLAG_FROM_VM
1020 
1021 
1022 // ------------------------------------------------------------------
1023 // ciMethod::print_codes
1024 //
1025 // Print a range of the bytecodes for this method.
1026 void ciMethod::print_codes_on(int from, int to, outputStream* st) {
1027   check_is_loaded();
1028   GUARDED_VM_ENTRY(get_methodOop()->print_codes_on(from, to, st);)
1029 }
1030 
1031 // ------------------------------------------------------------------
1032 // ciMethod::print_name
1033 //
1034 // Print the name of this method, including signature and some flags.
1035 void ciMethod::print_name(outputStream* st) {
1036   check_is_loaded();
1037   GUARDED_VM_ENTRY(get_methodOop()->print_name(st);)
1038 }
1039 
1040 // ------------------------------------------------------------------
1041 // ciMethod::print_short_name
1042 //
1043 // Print the name of this method, without signature.
1044 void ciMethod::print_short_name(outputStream* st) {
1045   check_is_loaded();
1046   GUARDED_VM_ENTRY(get_methodOop()->print_short_name(st);)
1047 }
1048 
1049 // ------------------------------------------------------------------
1050 // ciMethod::print_impl
1051 //
1052 // Implementation of the print method.
1053 void ciMethod::print_impl(outputStream* st) {
1054   ciObject::print_impl(st);
1055   st->print(" name=");
1056   name()->print_symbol_on(st);
1057   st->print(" holder=");
1058   holder()->print_name_on(st);
1059   st->print(" signature=");
1060   signature()->as_symbol()->print_symbol_on(st);
1061   if (is_loaded()) {
1062     st->print(" loaded=true flags=");
1063     flags().print_member_flags(st);
1064   } else {
1065     st->print(" loaded=false");
1066   }
1067 }