1 /*
2  * Copyright (c) 1999, 2019, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  *
23  */
24 
25 #include "precompiled.hpp"
26 #include "ci/ciCallProfile.hpp"
27 #include "ci/ciExceptionHandler.hpp"
28 #include "ci/ciInstanceKlass.hpp"
29 #include "ci/ciMethod.hpp"
30 #include "ci/ciMethodBlocks.hpp"
31 #include "ci/ciMethodData.hpp"
32 #include "ci/ciStreams.hpp"
33 #include "ci/ciSymbol.hpp"
34 #include "ci/ciReplay.hpp"
35 #include "ci/ciUtilities.inline.hpp"
36 #include "classfile/systemDictionary.hpp"
37 #include "compiler/abstractCompiler.hpp"
38 #include "compiler/methodLiveness.hpp"
39 #include "interpreter/interpreter.hpp"
40 #include "interpreter/linkResolver.hpp"
41 #include "interpreter/oopMapCache.hpp"
42 #include "memory/allocation.inline.hpp"
43 #include "memory/resourceArea.hpp"
44 #include "oops/generateOopMap.hpp"
45 #include "oops/method.inline.hpp"
46 #include "oops/oop.inline.hpp"
47 #include "prims/nativeLookup.hpp"
48 #include "runtime/deoptimization.hpp"
49 #include "runtime/handles.inline.hpp"
50 #include "utilities/bitMap.inline.hpp"
51 #include "utilities/xmlstream.hpp"
52 #ifdef COMPILER2
53 #include "ci/bcEscapeAnalyzer.hpp"
54 #include "ci/ciTypeFlow.hpp"
55 #include "oops/method.hpp"
56 #endif
57 
58 // ciMethod
59 //
60 // This class represents a Method* in the HotSpot virtual
61 // machine.
62 
63 
64 // ------------------------------------------------------------------
65 // ciMethod::ciMethod
66 //
67 // Loaded method.
ciMethod(const methodHandle & h_m,ciInstanceKlass * holder)68 ciMethod::ciMethod(const methodHandle& h_m, ciInstanceKlass* holder) :
69   ciMetadata(h_m()),
70   _holder(holder)
71 {
72   assert(h_m() != NULL, "no null method");
73 
74   if (LogTouchedMethods) {
75     h_m()->log_touched(Thread::current());
76   }
77   // These fields are always filled in in loaded methods.
78   _flags = ciFlags(h_m()->access_flags());
79 
80   // Easy to compute, so fill them in now.
81   _max_stack          = h_m()->max_stack();
82   _max_locals         = h_m()->max_locals();
83   _code_size          = h_m()->code_size();
84   _intrinsic_id       = h_m()->intrinsic_id();
85   _handler_count      = h_m()->exception_table_length();
86   _size_of_parameters = h_m()->size_of_parameters();
87   _uses_monitors      = h_m()->access_flags().has_monitor_bytecodes();
88   _balanced_monitors  = !_uses_monitors || h_m()->access_flags().is_monitor_matching();
89   _is_c1_compilable   = !h_m()->is_not_c1_compilable();
90   _is_c2_compilable   = !h_m()->is_not_c2_compilable();
91   _can_be_parsed      = true;
92   _has_reserved_stack_access = h_m()->has_reserved_stack_access();
93   _is_overpass        = h_m()->is_overpass();
94   // Lazy fields, filled in on demand.  Require allocation.
95   _code               = NULL;
96   _exception_handlers = NULL;
97   _liveness           = NULL;
98   _method_blocks = NULL;
99 #if defined(COMPILER2)
100   _flow               = NULL;
101   _bcea               = NULL;
102 #endif // COMPILER2
103 
104   ciEnv *env = CURRENT_ENV;
105   if (env->jvmti_can_hotswap_or_post_breakpoint()) {
106     // 6328518 check hotswap conditions under the right lock.
107     MutexLocker locker(Compile_lock);
108     if (Dependencies::check_evol_method(h_m()) != NULL) {
109       _is_c1_compilable = false;
110       _is_c2_compilable = false;
111       _can_be_parsed = false;
112     }
113   } else {
114     CHECK_UNHANDLED_OOPS_ONLY(Thread::current()->clear_unhandled_oops());
115   }
116 
117   if (h_m()->method_holder()->is_linked()) {
118     _can_be_statically_bound = h_m()->can_be_statically_bound();
119   } else {
120     // Have to use a conservative value in this case.
121     _can_be_statically_bound = false;
122   }
123 
124   // Adjust the definition of this condition to be more useful:
125   // %%% take these conditions into account in vtable generation
126   if (!_can_be_statically_bound && h_m()->is_private())
127     _can_be_statically_bound = true;
128   if (_can_be_statically_bound && h_m()->is_abstract())
129     _can_be_statically_bound = false;
130 
131   // generating _signature may allow GC and therefore move m.
132   // These fields are always filled in.
133   _name = env->get_symbol(h_m()->name());
134   ciSymbol* sig_symbol = env->get_symbol(h_m()->signature());
135   constantPoolHandle cpool = h_m()->constants();
136   _signature = new (env->arena()) ciSignature(_holder, cpool, sig_symbol);
137   _method_data = NULL;
138   _nmethod_age = h_m()->nmethod_age();
139   // Take a snapshot of these values, so they will be commensurate with the MDO.
140   if (ProfileInterpreter || TieredCompilation) {
141     int invcnt = h_m()->interpreter_invocation_count();
142     // if the value overflowed report it as max int
143     _interpreter_invocation_count = invcnt < 0 ? max_jint : invcnt ;
144     _interpreter_throwout_count   = h_m()->interpreter_throwout_count();
145   } else {
146     _interpreter_invocation_count = 0;
147     _interpreter_throwout_count = 0;
148   }
149   if (_interpreter_invocation_count == 0)
150     _interpreter_invocation_count = 1;
151   _instructions_size = -1;
152 #ifdef ASSERT
153   if (ReplayCompiles) {
154     ciReplay::initialize(this);
155   }
156 #endif
157 }
158 
159 
160 // ------------------------------------------------------------------
161 // ciMethod::ciMethod
162 //
163 // Unloaded method.
ciMethod(ciInstanceKlass * holder,ciSymbol * name,ciSymbol * signature,ciInstanceKlass * accessor)164 ciMethod::ciMethod(ciInstanceKlass* holder,
165                    ciSymbol*        name,
166                    ciSymbol*        signature,
167                    ciInstanceKlass* accessor) :
168   ciMetadata((Metadata*)NULL),
169   _name(                   name),
170   _holder(                 holder),
171   _method_data(            NULL),
172   _method_blocks(          NULL),
173   _intrinsic_id(           vmIntrinsics::_none),
174   _instructions_size(-1),
175   _can_be_statically_bound(false),
176   _liveness(               NULL)
177 #if defined(COMPILER2)
178   ,
179   _flow(                   NULL),
180   _bcea(                   NULL)
181 #endif // COMPILER2
182 {
183   // Usually holder and accessor are the same type but in some cases
184   // the holder has the wrong class loader (e.g. invokedynamic call
185   // sites) so we pass the accessor.
186   _signature = new (CURRENT_ENV->arena()) ciSignature(accessor, constantPoolHandle(), signature);
187 }
188 
189 
190 // ------------------------------------------------------------------
191 // ciMethod::load_code
192 //
193 // Load the bytecodes and exception handler table for this method.
load_code()194 void ciMethod::load_code() {
195   VM_ENTRY_MARK;
196   assert(is_loaded(), "only loaded methods have code");
197 
198   Method* me = get_Method();
199   Arena* arena = CURRENT_THREAD_ENV->arena();
200 
201   // Load the bytecodes.
202   _code = (address)arena->Amalloc(code_size());
203   memcpy(_code, me->code_base(), code_size());
204 
205 #if INCLUDE_JVMTI
206   // Revert any breakpoint bytecodes in ci's copy
207   if (me->number_of_breakpoints() > 0) {
208     BreakpointInfo* bp = me->method_holder()->breakpoints();
209     for (; bp != NULL; bp = bp->next()) {
210       if (bp->match(me)) {
211         code_at_put(bp->bci(), bp->orig_bytecode());
212       }
213     }
214   }
215 #endif
216 
217   // And load the exception table.
218   ExceptionTable exc_table(me);
219 
220   // Allocate one extra spot in our list of exceptions.  This
221   // last entry will be used to represent the possibility that
222   // an exception escapes the method.  See ciExceptionHandlerStream
223   // for details.
224   _exception_handlers =
225     (ciExceptionHandler**)arena->Amalloc(sizeof(ciExceptionHandler*)
226                                          * (_handler_count + 1));
227   if (_handler_count > 0) {
228     for (int i=0; i<_handler_count; i++) {
229       _exception_handlers[i] = new (arena) ciExceptionHandler(
230                                 holder(),
231             /* start    */      exc_table.start_pc(i),
232             /* limit    */      exc_table.end_pc(i),
233             /* goto pc  */      exc_table.handler_pc(i),
234             /* cp index */      exc_table.catch_type_index(i));
235     }
236   }
237 
238   // Put an entry at the end of our list to represent the possibility
239   // of exceptional exit.
240   _exception_handlers[_handler_count] =
241     new (arena) ciExceptionHandler(holder(), 0, code_size(), -1, 0);
242 
243   if (CIPrintMethodCodes) {
244     print_codes();
245   }
246 }
247 
248 
249 // ------------------------------------------------------------------
250 // ciMethod::has_linenumber_table
251 //
252 // length unknown until decompression
has_linenumber_table() const253 bool    ciMethod::has_linenumber_table() const {
254   check_is_loaded();
255   VM_ENTRY_MARK;
256   return get_Method()->has_linenumber_table();
257 }
258 
259 
260 // ------------------------------------------------------------------
261 // ciMethod::compressed_linenumber_table
compressed_linenumber_table() const262 u_char* ciMethod::compressed_linenumber_table() const {
263   check_is_loaded();
264   VM_ENTRY_MARK;
265   return get_Method()->compressed_linenumber_table();
266 }
267 
268 
269 // ------------------------------------------------------------------
270 // ciMethod::line_number_from_bci
line_number_from_bci(int bci) const271 int ciMethod::line_number_from_bci(int bci) const {
272   check_is_loaded();
273   VM_ENTRY_MARK;
274   return get_Method()->line_number_from_bci(bci);
275 }
276 
277 
278 // ------------------------------------------------------------------
279 // ciMethod::vtable_index
280 //
281 // Get the position of this method's entry in the vtable, if any.
vtable_index()282 int ciMethod::vtable_index() {
283   check_is_loaded();
284   assert(holder()->is_linked(), "must be linked");
285   VM_ENTRY_MARK;
286   return get_Method()->vtable_index();
287 }
288 
289 
290 // ------------------------------------------------------------------
291 // ciMethod::native_entry
292 //
293 // Get the address of this method's native code, if any.
native_entry()294 address ciMethod::native_entry() {
295   check_is_loaded();
296   assert(flags().is_native(), "must be native method");
297   VM_ENTRY_MARK;
298   Method* method = get_Method();
299   address entry = method->native_function();
300   assert(entry != NULL, "must be valid entry point");
301   return entry;
302 }
303 
304 
305 // ------------------------------------------------------------------
306 // ciMethod::interpreter_entry
307 //
308 // Get the entry point for running this method in the interpreter.
interpreter_entry()309 address ciMethod::interpreter_entry() {
310   check_is_loaded();
311   VM_ENTRY_MARK;
312   methodHandle mh(THREAD, get_Method());
313   return Interpreter::entry_for_method(mh);
314 }
315 
316 
317 // ------------------------------------------------------------------
318 // ciMethod::uses_balanced_monitors
319 //
320 // Does this method use monitors in a strict stack-disciplined manner?
has_balanced_monitors()321 bool ciMethod::has_balanced_monitors() {
322   check_is_loaded();
323   if (_balanced_monitors) return true;
324 
325   // Analyze the method to see if monitors are used properly.
326   VM_ENTRY_MARK;
327   methodHandle method(THREAD, get_Method());
328   assert(method->has_monitor_bytecodes(), "should have checked this");
329 
330   // Check to see if a previous compilation computed the
331   // monitor-matching analysis.
332   if (method->guaranteed_monitor_matching()) {
333     _balanced_monitors = true;
334     return true;
335   }
336 
337   {
338     EXCEPTION_MARK;
339     ResourceMark rm(THREAD);
340     GeneratePairingInfo gpi(method);
341     gpi.compute_map(CATCH);
342     if (!gpi.monitor_safe()) {
343       return false;
344     }
345     method->set_guaranteed_monitor_matching();
346     _balanced_monitors = true;
347   }
348   return true;
349 }
350 
351 
352 // ------------------------------------------------------------------
353 // ciMethod::get_flow_analysis
get_flow_analysis()354 ciTypeFlow* ciMethod::get_flow_analysis() {
355 #if defined(COMPILER2)
356   if (_flow == NULL) {
357     ciEnv* env = CURRENT_ENV;
358     _flow = new (env->arena()) ciTypeFlow(env, this);
359     _flow->do_flow();
360   }
361   return _flow;
362 #else // COMPILER2
363   ShouldNotReachHere();
364   return NULL;
365 #endif // COMPILER2
366 }
367 
368 
369 // ------------------------------------------------------------------
370 // ciMethod::get_osr_flow_analysis
get_osr_flow_analysis(int osr_bci)371 ciTypeFlow* ciMethod::get_osr_flow_analysis(int osr_bci) {
372 #if defined(COMPILER2)
373   // OSR entry points are always place after a call bytecode of some sort
374   assert(osr_bci >= 0, "must supply valid OSR entry point");
375   ciEnv* env = CURRENT_ENV;
376   ciTypeFlow* flow = new (env->arena()) ciTypeFlow(env, this, osr_bci);
377   flow->do_flow();
378   return flow;
379 #else // COMPILER2
380   ShouldNotReachHere();
381   return NULL;
382 #endif // COMPILER2
383 }
384 
385 // ------------------------------------------------------------------
386 // ciMethod::raw_liveness_at_bci
387 //
388 // Which local variables are live at a specific bci?
raw_liveness_at_bci(int bci)389 MethodLivenessResult ciMethod::raw_liveness_at_bci(int bci) {
390   check_is_loaded();
391   if (_liveness == NULL) {
392     // Create the liveness analyzer.
393     Arena* arena = CURRENT_ENV->arena();
394     _liveness = new (arena) MethodLiveness(arena, this);
395     _liveness->compute_liveness();
396   }
397   return _liveness->get_liveness_at(bci);
398 }
399 
400 // ------------------------------------------------------------------
401 // ciMethod::liveness_at_bci
402 //
403 // Which local variables are live at a specific bci?  When debugging
404 // will return true for all locals in some cases to improve debug
405 // information.
liveness_at_bci(int bci)406 MethodLivenessResult ciMethod::liveness_at_bci(int bci) {
407   if (CURRENT_ENV->should_retain_local_variables() || DeoptimizeALot) {
408     // Keep all locals live for the user's edification and amusement.
409     MethodLivenessResult result(_max_locals);
410     result.set_range(0, _max_locals);
411     result.set_is_valid();
412     return result;
413   }
414   return raw_liveness_at_bci(bci);
415 }
416 
417 // ciMethod::live_local_oops_at_bci
418 //
419 // find all the live oops in the locals array for a particular bci
420 // Compute what the interpreter believes by using the interpreter
421 // oopmap generator. This is used as a double check during osr to
422 // guard against conservative result from MethodLiveness making us
423 // think a dead oop is live.  MethodLiveness is conservative in the
424 // sense that it may consider locals to be live which cannot be live,
425 // like in the case where a local could contain an oop or  a primitive
426 // along different paths.  In that case the local must be dead when
427 // those paths merge. Since the interpreter's viewpoint is used when
428 // gc'ing an interpreter frame we need to use its viewpoint  during
429 // OSR when loading the locals.
430 
live_local_oops_at_bci(int bci)431 ResourceBitMap ciMethod::live_local_oops_at_bci(int bci) {
432   VM_ENTRY_MARK;
433   InterpreterOopMap mask;
434   OopMapCache::compute_one_oop_map(get_Method(), bci, &mask);
435   int mask_size = max_locals();
436   ResourceBitMap result(mask_size);
437   int i;
438   for (i = 0; i < mask_size ; i++ ) {
439     if (mask.is_oop(i)) result.set_bit(i);
440   }
441   return result;
442 }
443 
444 
445 #ifdef COMPILER1
446 // ------------------------------------------------------------------
447 // ciMethod::bci_block_start
448 //
449 // Marks all bcis where a new basic block starts
bci_block_start()450 const BitMap& ciMethod::bci_block_start() {
451   check_is_loaded();
452   if (_liveness == NULL) {
453     // Create the liveness analyzer.
454     Arena* arena = CURRENT_ENV->arena();
455     _liveness = new (arena) MethodLiveness(arena, this);
456     _liveness->compute_liveness();
457   }
458 
459   return _liveness->get_bci_block_start();
460 }
461 #endif // COMPILER1
462 
463 
464 // ------------------------------------------------------------------
465 // ciMethod::check_overflow
466 //
467 // Check whether the profile counter is overflowed and adjust if true.
468 // For invoke* it will turn negative values into max_jint,
469 // and for checkcast/aastore/instanceof turn positive values into min_jint.
check_overflow(int c,Bytecodes::Code code)470 int ciMethod::check_overflow(int c, Bytecodes::Code code) {
471   switch (code) {
472     case Bytecodes::_aastore:    // fall-through
473     case Bytecodes::_checkcast:  // fall-through
474     case Bytecodes::_instanceof: {
475       return (c > 0 ? min_jint : c); // always non-positive
476     }
477     default: {
478       assert(Bytecodes::is_invoke(code), "%s", Bytecodes::name(code));
479       return (c < 0 ? max_jint : c); // always non-negative
480     }
481   }
482 }
483 
484 
485 // ------------------------------------------------------------------
486 // ciMethod::call_profile_at_bci
487 //
488 // Get the ciCallProfile for the invocation of this method.
489 // Also reports receiver types for non-call type checks (if TypeProfileCasts).
call_profile_at_bci(int bci)490 ciCallProfile ciMethod::call_profile_at_bci(int bci) {
491   ResourceMark rm;
492   ciCallProfile result;
493   if (method_data() != NULL && method_data()->is_mature()) {
494     ciProfileData* data = method_data()->bci_to_data(bci);
495     if (data != NULL && data->is_CounterData()) {
496       // Every profiled call site has a counter.
497       int count = check_overflow(data->as_CounterData()->count(), java_code_at_bci(bci));
498 
499       if (!data->is_ReceiverTypeData()) {
500         result._receiver_count[0] = 0;  // that's a definite zero
501       } else { // ReceiverTypeData is a subclass of CounterData
502         ciReceiverTypeData* call = (ciReceiverTypeData*)data->as_ReceiverTypeData();
503         // In addition, virtual call sites have receiver type information
504         int receivers_count_total = 0;
505         int morphism = 0;
506         // Precompute morphism for the possible fixup
507         for (uint i = 0; i < call->row_limit(); i++) {
508           ciKlass* receiver = call->receiver(i);
509           if (receiver == NULL)  continue;
510           morphism++;
511         }
512         int epsilon = 0;
513         if (TieredCompilation) {
514           // For a call, it is assumed that either the type of the receiver(s)
515           // is recorded or an associated counter is incremented, but not both. With
516           // tiered compilation, however, both can happen due to the interpreter and
517           // C1 profiling invocations differently. Address that inconsistency here.
518           if (morphism == 1 && count > 0) {
519             epsilon = count;
520             count = 0;
521           }
522         }
523         for (uint i = 0; i < call->row_limit(); i++) {
524           ciKlass* receiver = call->receiver(i);
525           if (receiver == NULL)  continue;
526           int rcount = saturated_add(call->receiver_count(i), epsilon);
527           if (rcount == 0) rcount = 1; // Should be valid value
528           receivers_count_total = saturated_add(receivers_count_total, rcount);
529           // Add the receiver to result data.
530           result.add_receiver(receiver, rcount);
531           // If we extend profiling to record methods,
532           // we will set result._method also.
533         }
534         // Determine call site's morphism.
535         // The call site count is 0 with known morphism (only 1 or 2 receivers)
536         // or < 0 in the case of a type check failure for checkcast, aastore, instanceof.
537         // The call site count is > 0 in the case of a polymorphic virtual call.
538         if (morphism > 0 && morphism == result._limit) {
539            // The morphism <= MorphismLimit.
540            if ((morphism <  ciCallProfile::MorphismLimit) ||
541                (morphism == ciCallProfile::MorphismLimit && count == 0)) {
542 #ifdef ASSERT
543              if (count > 0) {
544                this->print_short_name(tty);
545                tty->print_cr(" @ bci:%d", bci);
546                this->print_codes();
547                assert(false, "this call site should not be polymorphic");
548              }
549 #endif
550              result._morphism = morphism;
551            }
552         }
553         // Make the count consistent if this is a call profile. If count is
554         // zero or less, presume that this is a typecheck profile and
555         // do nothing.  Otherwise, increase count to be the sum of all
556         // receiver's counts.
557         if (count >= 0) {
558           count = saturated_add(count, receivers_count_total);
559         }
560       }
561       result._count = count;
562     }
563   }
564   return result;
565 }
566 
567 // ------------------------------------------------------------------
568 // Add new receiver and sort data by receiver's profile count.
add_receiver(ciKlass * receiver,int receiver_count)569 void ciCallProfile::add_receiver(ciKlass* receiver, int receiver_count) {
570   // Add new receiver and sort data by receiver's counts when we have space
571   // for it otherwise replace the less called receiver (less called receiver
572   // is placed to the last array element which is not used).
573   // First array's element contains most called receiver.
574   int i = _limit;
575   for (; i > 0 && receiver_count > _receiver_count[i-1]; i--) {
576     _receiver[i] = _receiver[i-1];
577     _receiver_count[i] = _receiver_count[i-1];
578   }
579   _receiver[i] = receiver;
580   _receiver_count[i] = receiver_count;
581   if (_limit < MorphismLimit) _limit++;
582 }
583 
584 
assert_virtual_call_type_ok(int bci)585 void ciMethod::assert_virtual_call_type_ok(int bci) {
586   assert(java_code_at_bci(bci) == Bytecodes::_invokevirtual ||
587          java_code_at_bci(bci) == Bytecodes::_invokeinterface, "unexpected bytecode %s", Bytecodes::name(java_code_at_bci(bci)));
588 }
589 
assert_call_type_ok(int bci)590 void ciMethod::assert_call_type_ok(int bci) {
591   assert(java_code_at_bci(bci) == Bytecodes::_invokestatic ||
592          java_code_at_bci(bci) == Bytecodes::_invokespecial ||
593          java_code_at_bci(bci) == Bytecodes::_invokedynamic, "unexpected bytecode %s", Bytecodes::name(java_code_at_bci(bci)));
594 }
595 
596 /**
597  * Check whether profiling provides a type for the argument i to the
598  * call at bci bci
599  *
600  * @param [in]bci         bci of the call
601  * @param [in]i           argument number
602  * @param [out]type       profiled type of argument, NULL if none
603  * @param [out]ptr_kind   whether always null, never null or maybe null
604  * @return                true if profiling exists
605  *
606  */
argument_profiled_type(int bci,int i,ciKlass * & type,ProfilePtrKind & ptr_kind)607 bool ciMethod::argument_profiled_type(int bci, int i, ciKlass*& type, ProfilePtrKind& ptr_kind) {
608   if (MethodData::profile_parameters() && method_data() != NULL && method_data()->is_mature()) {
609     ciProfileData* data = method_data()->bci_to_data(bci);
610     if (data != NULL) {
611       if (data->is_VirtualCallTypeData()) {
612         assert_virtual_call_type_ok(bci);
613         ciVirtualCallTypeData* call = (ciVirtualCallTypeData*)data->as_VirtualCallTypeData();
614         if (i >= call->number_of_arguments()) {
615           return false;
616         }
617         type = call->valid_argument_type(i);
618         ptr_kind = call->argument_ptr_kind(i);
619         return true;
620       } else if (data->is_CallTypeData()) {
621         assert_call_type_ok(bci);
622         ciCallTypeData* call = (ciCallTypeData*)data->as_CallTypeData();
623         if (i >= call->number_of_arguments()) {
624           return false;
625         }
626         type = call->valid_argument_type(i);
627         ptr_kind = call->argument_ptr_kind(i);
628         return true;
629       }
630     }
631   }
632   return false;
633 }
634 
635 /**
636  * Check whether profiling provides a type for the return value from
637  * the call at bci bci
638  *
639  * @param [in]bci         bci of the call
640  * @param [out]type       profiled type of argument, NULL if none
641  * @param [out]ptr_kind   whether always null, never null or maybe null
642  * @return                true if profiling exists
643  *
644  */
return_profiled_type(int bci,ciKlass * & type,ProfilePtrKind & ptr_kind)645 bool ciMethod::return_profiled_type(int bci, ciKlass*& type, ProfilePtrKind& ptr_kind) {
646   if (MethodData::profile_return() && method_data() != NULL && method_data()->is_mature()) {
647     ciProfileData* data = method_data()->bci_to_data(bci);
648     if (data != NULL) {
649       if (data->is_VirtualCallTypeData()) {
650         assert_virtual_call_type_ok(bci);
651         ciVirtualCallTypeData* call = (ciVirtualCallTypeData*)data->as_VirtualCallTypeData();
652         if (call->has_return()) {
653           type = call->valid_return_type();
654           ptr_kind = call->return_ptr_kind();
655           return true;
656         }
657       } else if (data->is_CallTypeData()) {
658         assert_call_type_ok(bci);
659         ciCallTypeData* call = (ciCallTypeData*)data->as_CallTypeData();
660         if (call->has_return()) {
661           type = call->valid_return_type();
662           ptr_kind = call->return_ptr_kind();
663         }
664         return true;
665       }
666     }
667   }
668   return false;
669 }
670 
671 /**
672  * Check whether profiling provides a type for the parameter i
673  *
674  * @param [in]i           parameter number
675  * @param [out]type       profiled type of parameter, NULL if none
676  * @param [out]ptr_kind   whether always null, never null or maybe null
677  * @return                true if profiling exists
678  *
679  */
parameter_profiled_type(int i,ciKlass * & type,ProfilePtrKind & ptr_kind)680 bool ciMethod::parameter_profiled_type(int i, ciKlass*& type, ProfilePtrKind& ptr_kind) {
681   if (MethodData::profile_parameters() && method_data() != NULL && method_data()->is_mature()) {
682     ciParametersTypeData* parameters = method_data()->parameters_type_data();
683     if (parameters != NULL && i < parameters->number_of_parameters()) {
684       type = parameters->valid_parameter_type(i);
685       ptr_kind = parameters->parameter_ptr_kind(i);
686       return true;
687     }
688   }
689   return false;
690 }
691 
692 
693 // ------------------------------------------------------------------
694 // ciMethod::find_monomorphic_target
695 //
696 // Given a certain calling environment, find the monomorphic target
697 // for the call.  Return NULL if the call is not monomorphic in
698 // its calling environment, or if there are only abstract methods.
699 // The returned method is never abstract.
700 // Note: If caller uses a non-null result, it must inform dependencies
701 // via assert_unique_concrete_method or assert_leaf_type.
find_monomorphic_target(ciInstanceKlass * caller,ciInstanceKlass * callee_holder,ciInstanceKlass * actual_recv,bool check_access)702 ciMethod* ciMethod::find_monomorphic_target(ciInstanceKlass* caller,
703                                             ciInstanceKlass* callee_holder,
704                                             ciInstanceKlass* actual_recv,
705                                             bool check_access) {
706   check_is_loaded();
707 
708   if (actual_recv->is_interface()) {
709     // %%% We cannot trust interface types, yet.  See bug 6312651.
710     return NULL;
711   }
712 
713   ciMethod* root_m = resolve_invoke(caller, actual_recv, check_access);
714   if (root_m == NULL) {
715     // Something went wrong looking up the actual receiver method.
716     return NULL;
717   }
718   assert(!root_m->is_abstract(), "resolve_invoke promise");
719 
720   // Make certain quick checks even if UseCHA is false.
721 
722   // Is it private or final?
723   if (root_m->can_be_statically_bound()) {
724     return root_m;
725   }
726 
727   if (actual_recv->is_leaf_type() && actual_recv == root_m->holder()) {
728     // Easy case.  There is no other place to put a method, so don't bother
729     // to go through the VM_ENTRY_MARK and all the rest.
730     return root_m;
731   }
732 
733   // Array methods (clone, hashCode, etc.) are always statically bound.
734   // If we were to see an array type here, we'd return root_m.
735   // However, this method processes only ciInstanceKlasses.  (See 4962591.)
736   // The inline_native_clone intrinsic narrows Object to T[] properly,
737   // so there is no need to do the same job here.
738 
739   if (!UseCHA)  return NULL;
740 
741   VM_ENTRY_MARK;
742 
743   // Disable CHA for default methods for now
744   if (root_m->is_default_method()) {
745     return NULL;
746   }
747 
748   methodHandle target;
749   {
750     MutexLocker locker(Compile_lock);
751     Klass* context = actual_recv->get_Klass();
752     target = Dependencies::find_unique_concrete_method(context,
753                                                        root_m->get_Method());
754     // %%% Should upgrade this ciMethod API to look for 1 or 2 concrete methods.
755   }
756 
757 #ifndef PRODUCT
758   if (TraceDependencies && target() != NULL && target() != root_m->get_Method()) {
759     tty->print("found a non-root unique target method");
760     tty->print_cr("  context = %s", actual_recv->get_Klass()->external_name());
761     tty->print("  method  = ");
762     target->print_short_name(tty);
763     tty->cr();
764   }
765 #endif //PRODUCT
766 
767   if (target() == NULL) {
768     return NULL;
769   }
770   if (target() == root_m->get_Method()) {
771     return root_m;
772   }
773   if (!root_m->is_public() &&
774       !root_m->is_protected()) {
775     // If we are going to reason about inheritance, it's easiest
776     // if the method in question is public, protected, or private.
777     // If the answer is not root_m, it is conservatively correct
778     // to return NULL, even if the CHA encountered irrelevant
779     // methods in other packages.
780     // %%% TO DO: Work out logic for package-private methods
781     // with the same name but different vtable indexes.
782     return NULL;
783   }
784   assert(!target()->is_abstract(), "not allowed");
785   return CURRENT_THREAD_ENV->get_method(target());
786 }
787 
788 // ------------------------------------------------------------------
789 // ciMethod::can_be_statically_bound
790 //
791 // Tries to determine whether a method can be statically bound in some context.
can_be_statically_bound(ciInstanceKlass * context) const792 bool ciMethod::can_be_statically_bound(ciInstanceKlass* context) const {
793   return (holder() == context) && can_be_statically_bound();
794 }
795 
796 // ------------------------------------------------------------------
797 // ciMethod::resolve_invoke
798 //
799 // Given a known receiver klass, find the target for the call.
800 // Return NULL if the call has no target or the target is abstract.
resolve_invoke(ciKlass * caller,ciKlass * exact_receiver,bool check_access)801 ciMethod* ciMethod::resolve_invoke(ciKlass* caller, ciKlass* exact_receiver, bool check_access) {
802    check_is_loaded();
803    VM_ENTRY_MARK;
804 
805    Klass* caller_klass = caller->get_Klass();
806    Klass* recv         = exact_receiver->get_Klass();
807    Klass* resolved     = holder()->get_Klass();
808    Symbol* h_name      = name()->get_symbol();
809    Symbol* h_signature = signature()->get_symbol();
810 
811    LinkInfo link_info(resolved, h_name, h_signature, caller_klass,
812                       check_access ? LinkInfo::needs_access_check : LinkInfo::skip_access_check);
813    methodHandle m;
814    // Only do exact lookup if receiver klass has been linked.  Otherwise,
815    // the vtable has not been setup, and the LinkResolver will fail.
816    if (recv->is_array_klass()
817         ||
818        (InstanceKlass::cast(recv)->is_linked() && !exact_receiver->is_interface())) {
819      if (holder()->is_interface()) {
820        m = LinkResolver::resolve_interface_call_or_null(recv, link_info);
821      } else {
822        m = LinkResolver::resolve_virtual_call_or_null(recv, link_info);
823      }
824    }
825 
826    if (m.is_null()) {
827      // Return NULL only if there was a problem with lookup (uninitialized class, etc.)
828      return NULL;
829    }
830 
831    ciMethod* result = this;
832    if (m() != get_Method()) {
833      result = CURRENT_THREAD_ENV->get_method(m());
834    }
835 
836    // Don't return abstract methods because they aren't
837    // optimizable or interesting.
838    if (result->is_abstract()) {
839      return NULL;
840    } else {
841      return result;
842    }
843 }
844 
845 // ------------------------------------------------------------------
846 // ciMethod::resolve_vtable_index
847 //
848 // Given a known receiver klass, find the vtable index for the call.
849 // Return Method::invalid_vtable_index if the vtable_index is unknown.
resolve_vtable_index(ciKlass * caller,ciKlass * receiver)850 int ciMethod::resolve_vtable_index(ciKlass* caller, ciKlass* receiver) {
851    check_is_loaded();
852 
853    int vtable_index = Method::invalid_vtable_index;
854    // Only do lookup if receiver klass has been linked.  Otherwise,
855    // the vtable has not been setup, and the LinkResolver will fail.
856    if (!receiver->is_interface()
857        && (!receiver->is_instance_klass() ||
858            receiver->as_instance_klass()->is_linked())) {
859      VM_ENTRY_MARK;
860 
861      Klass* caller_klass = caller->get_Klass();
862      Klass* recv         = receiver->get_Klass();
863      Symbol* h_name = name()->get_symbol();
864      Symbol* h_signature = signature()->get_symbol();
865 
866      LinkInfo link_info(recv, h_name, h_signature, caller_klass);
867      vtable_index = LinkResolver::resolve_virtual_vtable_index(recv, link_info);
868      if (vtable_index == Method::nonvirtual_vtable_index) {
869        // A statically bound method.  Return "no such index".
870        vtable_index = Method::invalid_vtable_index;
871      }
872    }
873 
874    return vtable_index;
875 }
876 
877 // ------------------------------------------------------------------
878 // ciMethod::interpreter_call_site_count
interpreter_call_site_count(int bci)879 int ciMethod::interpreter_call_site_count(int bci) {
880   if (method_data() != NULL) {
881     ResourceMark rm;
882     ciProfileData* data = method_data()->bci_to_data(bci);
883     if (data != NULL && data->is_CounterData()) {
884       return scale_count(data->as_CounterData()->count());
885     }
886   }
887   return -1;  // unknown
888 }
889 
890 // ------------------------------------------------------------------
891 // ciMethod::get_field_at_bci
get_field_at_bci(int bci,bool & will_link)892 ciField* ciMethod::get_field_at_bci(int bci, bool &will_link) {
893   ciBytecodeStream iter(this);
894   iter.reset_to_bci(bci);
895   iter.next();
896   return iter.get_field(will_link);
897 }
898 
899 // ------------------------------------------------------------------
900 // ciMethod::get_method_at_bci
get_method_at_bci(int bci,bool & will_link,ciSignature ** declared_signature)901 ciMethod* ciMethod::get_method_at_bci(int bci, bool &will_link, ciSignature* *declared_signature) {
902   ciBytecodeStream iter(this);
903   iter.reset_to_bci(bci);
904   iter.next();
905   return iter.get_method(will_link, declared_signature);
906 }
907 
908 // ------------------------------------------------------------------
get_declared_method_holder_at_bci(int bci)909 ciKlass* ciMethod::get_declared_method_holder_at_bci(int bci) {
910   ciBytecodeStream iter(this);
911   iter.reset_to_bci(bci);
912   iter.next();
913   return iter.get_declared_method_holder();
914 }
915 
916 // ------------------------------------------------------------------
917 // Adjust a CounterData count to be commensurate with
918 // interpreter_invocation_count.  If the MDO exists for
919 // only 25% of the time the method exists, then the
920 // counts in the MDO should be scaled by 4X, so that
921 // they can be usefully and stably compared against the
922 // invocation counts in methods.
scale_count(int count,float prof_factor)923 int ciMethod::scale_count(int count, float prof_factor) {
924   if (count > 0 && method_data() != NULL) {
925     int counter_life;
926     int method_life = interpreter_invocation_count();
927     if (TieredCompilation) {
928       // In tiered the MDO's life is measured directly, so just use the snapshotted counters
929       counter_life = MAX2(method_data()->invocation_count(), method_data()->backedge_count());
930     } else {
931       int current_mileage = method_data()->current_mileage();
932       int creation_mileage = method_data()->creation_mileage();
933       counter_life = current_mileage - creation_mileage;
934     }
935 
936     // counter_life due to backedge_counter could be > method_life
937     if (counter_life > method_life)
938       counter_life = method_life;
939     if (0 < counter_life && counter_life <= method_life) {
940       count = (int)((double)count * prof_factor * method_life / counter_life + 0.5);
941       count = (count > 0) ? count : 1;
942     }
943   }
944   return count;
945 }
946 
947 
948 // ------------------------------------------------------------------
949 // ciMethod::is_special_get_caller_class_method
950 //
is_ignored_by_security_stack_walk() const951 bool ciMethod::is_ignored_by_security_stack_walk() const {
952   check_is_loaded();
953   VM_ENTRY_MARK;
954   return get_Method()->is_ignored_by_security_stack_walk();
955 }
956 
957 // ------------------------------------------------------------------
958 // ciMethod::needs_clinit_barrier
959 //
needs_clinit_barrier() const960 bool ciMethod::needs_clinit_barrier() const {
961   check_is_loaded();
962   return is_static() && !holder()->is_initialized();
963 }
964 
965 // ------------------------------------------------------------------
966 // invokedynamic support
967 
968 // ------------------------------------------------------------------
969 // ciMethod::is_method_handle_intrinsic
970 //
971 // Return true if the method is an instance of the JVM-generated
972 // signature-polymorphic MethodHandle methods, _invokeBasic, _linkToVirtual, etc.
is_method_handle_intrinsic() const973 bool ciMethod::is_method_handle_intrinsic() const {
974   vmIntrinsics::ID iid = _intrinsic_id;  // do not check if loaded
975   return (MethodHandles::is_signature_polymorphic(iid) &&
976           MethodHandles::is_signature_polymorphic_intrinsic(iid));
977 }
978 
979 // ------------------------------------------------------------------
980 // ciMethod::is_compiled_lambda_form
981 //
982 // Return true if the method is a generated MethodHandle adapter.
983 // These are built by Java code.
is_compiled_lambda_form() const984 bool ciMethod::is_compiled_lambda_form() const {
985   vmIntrinsics::ID iid = _intrinsic_id;  // do not check if loaded
986   return iid == vmIntrinsics::_compiledLambdaForm;
987 }
988 
989 // ------------------------------------------------------------------
990 // ciMethod::is_object_initializer
991 //
is_object_initializer() const992 bool ciMethod::is_object_initializer() const {
993    return name() == ciSymbol::object_initializer_name();
994 }
995 
996 // ------------------------------------------------------------------
997 // ciMethod::has_member_arg
998 //
999 // Return true if the method is a linker intrinsic like _linkToVirtual.
1000 // These are built by the JVM.
has_member_arg() const1001 bool ciMethod::has_member_arg() const {
1002   vmIntrinsics::ID iid = _intrinsic_id;  // do not check if loaded
1003   return (MethodHandles::is_signature_polymorphic(iid) &&
1004           MethodHandles::has_member_arg(iid));
1005 }
1006 
1007 // ------------------------------------------------------------------
1008 // ciMethod::ensure_method_data
1009 //
1010 // Generate new MethodData* objects at compile time.
1011 // Return true if allocation was successful or no MDO is required.
ensure_method_data(const methodHandle & h_m)1012 bool ciMethod::ensure_method_data(const methodHandle& h_m) {
1013   EXCEPTION_CONTEXT;
1014   if (is_native() || is_abstract() || h_m()->is_accessor()) {
1015     return true;
1016   }
1017   if (h_m()->method_data() == NULL) {
1018     Method::build_interpreter_method_data(h_m, THREAD);
1019     if (HAS_PENDING_EXCEPTION) {
1020       CLEAR_PENDING_EXCEPTION;
1021     }
1022   }
1023   if (h_m()->method_data() != NULL) {
1024     _method_data = CURRENT_ENV->get_method_data(h_m()->method_data());
1025     _method_data->load_data();
1026     return true;
1027   } else {
1028     _method_data = CURRENT_ENV->get_empty_methodData();
1029     return false;
1030   }
1031 }
1032 
1033 // public, retroactive version
ensure_method_data()1034 bool ciMethod::ensure_method_data() {
1035   bool result = true;
1036   if (_method_data == NULL || _method_data->is_empty()) {
1037     GUARDED_VM_ENTRY({
1038       result = ensure_method_data(get_Method());
1039     });
1040   }
1041   return result;
1042 }
1043 
1044 
1045 // ------------------------------------------------------------------
1046 // ciMethod::method_data
1047 //
method_data()1048 ciMethodData* ciMethod::method_data() {
1049   if (_method_data != NULL) {
1050     return _method_data;
1051   }
1052   VM_ENTRY_MARK;
1053   ciEnv* env = CURRENT_ENV;
1054   Thread* my_thread = JavaThread::current();
1055   methodHandle h_m(my_thread, get_Method());
1056 
1057   if (h_m()->method_data() != NULL) {
1058     _method_data = CURRENT_ENV->get_method_data(h_m()->method_data());
1059     _method_data->load_data();
1060   } else {
1061     _method_data = CURRENT_ENV->get_empty_methodData();
1062   }
1063   return _method_data;
1064 
1065 }
1066 
1067 // ------------------------------------------------------------------
1068 // ciMethod::method_data_or_null
1069 // Returns a pointer to ciMethodData if MDO exists on the VM side,
1070 // NULL otherwise.
method_data_or_null()1071 ciMethodData* ciMethod::method_data_or_null() {
1072   ciMethodData *md = method_data();
1073   if (md->is_empty()) {
1074     return NULL;
1075   }
1076   return md;
1077 }
1078 
1079 // ------------------------------------------------------------------
1080 // ciMethod::ensure_method_counters
1081 //
ensure_method_counters()1082 MethodCounters* ciMethod::ensure_method_counters() {
1083   check_is_loaded();
1084   VM_ENTRY_MARK;
1085   methodHandle mh(THREAD, get_Method());
1086   MethodCounters* method_counters = mh->get_method_counters(CHECK_NULL);
1087   return method_counters;
1088 }
1089 
1090 // ------------------------------------------------------------------
1091 // ciMethod::has_option
1092 //
has_option(const char * option)1093 bool ciMethod::has_option(const char* option) {
1094   check_is_loaded();
1095   VM_ENTRY_MARK;
1096   methodHandle mh(THREAD, get_Method());
1097   return CompilerOracle::has_option_string(mh, option);
1098 }
1099 
1100 // ------------------------------------------------------------------
1101 // ciMethod::has_option_value
1102 //
has_option_value(const char * option,double & value)1103 bool ciMethod::has_option_value(const char* option, double& value) {
1104   check_is_loaded();
1105   VM_ENTRY_MARK;
1106   methodHandle mh(THREAD, get_Method());
1107   return CompilerOracle::has_option_value(mh, option, value);
1108 }
1109 // ------------------------------------------------------------------
1110 // ciMethod::can_be_compiled
1111 //
1112 // Have previous compilations of this method succeeded?
can_be_compiled()1113 bool ciMethod::can_be_compiled() {
1114   check_is_loaded();
1115   ciEnv* env = CURRENT_ENV;
1116   if (is_c1_compile(env->comp_level())) {
1117     return _is_c1_compilable;
1118   }
1119   return _is_c2_compilable;
1120 }
1121 
1122 // ------------------------------------------------------------------
1123 // ciMethod::set_not_compilable
1124 //
1125 // Tell the VM that this method cannot be compiled at all.
set_not_compilable(const char * reason)1126 void ciMethod::set_not_compilable(const char* reason) {
1127   check_is_loaded();
1128   VM_ENTRY_MARK;
1129   ciEnv* env = CURRENT_ENV;
1130   if (is_c1_compile(env->comp_level())) {
1131     _is_c1_compilable = false;
1132   } else {
1133     _is_c2_compilable = false;
1134   }
1135   get_Method()->set_not_compilable(reason, env->comp_level());
1136 }
1137 
1138 // ------------------------------------------------------------------
1139 // ciMethod::can_be_osr_compiled
1140 //
1141 // Have previous compilations of this method succeeded?
1142 //
1143 // Implementation note: the VM does not currently keep track
1144 // of failed OSR compilations per bci.  The entry_bci parameter
1145 // is currently unused.
can_be_osr_compiled(int entry_bci)1146 bool ciMethod::can_be_osr_compiled(int entry_bci) {
1147   check_is_loaded();
1148   VM_ENTRY_MARK;
1149   ciEnv* env = CURRENT_ENV;
1150   return !get_Method()->is_not_osr_compilable(env->comp_level());
1151 }
1152 
1153 // ------------------------------------------------------------------
1154 // ciMethod::has_compiled_code
has_compiled_code()1155 bool ciMethod::has_compiled_code() {
1156   return instructions_size() > 0;
1157 }
1158 
comp_level()1159 int ciMethod::comp_level() {
1160   check_is_loaded();
1161   VM_ENTRY_MARK;
1162   CompiledMethod* nm = get_Method()->code();
1163   if (nm != NULL) return nm->comp_level();
1164   return 0;
1165 }
1166 
highest_osr_comp_level()1167 int ciMethod::highest_osr_comp_level() {
1168   check_is_loaded();
1169   VM_ENTRY_MARK;
1170   return get_Method()->highest_osr_comp_level();
1171 }
1172 
1173 // ------------------------------------------------------------------
1174 // ciMethod::code_size_for_inlining
1175 //
1176 // Code size for inlining decisions.  This method returns a code
1177 // size of 1 for methods which has the ForceInline annotation.
code_size_for_inlining()1178 int ciMethod::code_size_for_inlining() {
1179   check_is_loaded();
1180   if (get_Method()->force_inline()) {
1181     return 1;
1182   }
1183   return code_size();
1184 }
1185 
1186 // ------------------------------------------------------------------
1187 // ciMethod::instructions_size
1188 //
1189 // This is a rough metric for "fat" methods, compared before inlining
1190 // with InlineSmallCode.  The CodeBlob::code_size accessor includes
1191 // junk like exception handler, stubs, and constant table, which are
1192 // not highly relevant to an inlined method.  So we use the more
1193 // specific accessor nmethod::insts_size.
instructions_size()1194 int ciMethod::instructions_size() {
1195   if (_instructions_size == -1) {
1196     GUARDED_VM_ENTRY(
1197                      CompiledMethod* code = get_Method()->code();
1198                      if (code != NULL && (code->comp_level() == CompLevel_full_optimization)) {
1199                        _instructions_size = code->insts_end() - code->verified_entry_point();
1200                      } else {
1201                        _instructions_size = 0;
1202                      }
1203                      );
1204   }
1205   return _instructions_size;
1206 }
1207 
1208 // ------------------------------------------------------------------
1209 // ciMethod::log_nmethod_identity
log_nmethod_identity(xmlStream * log)1210 void ciMethod::log_nmethod_identity(xmlStream* log) {
1211   GUARDED_VM_ENTRY(
1212     CompiledMethod* code = get_Method()->code();
1213     if (code != NULL) {
1214       code->log_identity(log);
1215     }
1216   )
1217 }
1218 
1219 // ------------------------------------------------------------------
1220 // ciMethod::is_not_reached
is_not_reached(int bci)1221 bool ciMethod::is_not_reached(int bci) {
1222   check_is_loaded();
1223   VM_ENTRY_MARK;
1224   return Interpreter::is_not_reached(
1225                methodHandle(THREAD, get_Method()), bci);
1226 }
1227 
1228 // ------------------------------------------------------------------
1229 // ciMethod::was_never_executed
was_executed_more_than(int times)1230 bool ciMethod::was_executed_more_than(int times) {
1231   VM_ENTRY_MARK;
1232   return get_Method()->was_executed_more_than(times);
1233 }
1234 
1235 // ------------------------------------------------------------------
1236 // ciMethod::has_unloaded_classes_in_signature
has_unloaded_classes_in_signature()1237 bool ciMethod::has_unloaded_classes_in_signature() {
1238   VM_ENTRY_MARK;
1239   {
1240     EXCEPTION_MARK;
1241     methodHandle m(THREAD, get_Method());
1242     bool has_unloaded = Method::has_unloaded_classes_in_signature(m, (JavaThread *)THREAD);
1243     if( HAS_PENDING_EXCEPTION ) {
1244       CLEAR_PENDING_EXCEPTION;
1245       return true;     // Declare that we may have unloaded classes
1246     }
1247     return has_unloaded;
1248   }
1249 }
1250 
1251 // ------------------------------------------------------------------
1252 // ciMethod::is_klass_loaded
is_klass_loaded(int refinfo_index,bool must_be_resolved) const1253 bool ciMethod::is_klass_loaded(int refinfo_index, bool must_be_resolved) const {
1254   VM_ENTRY_MARK;
1255   return get_Method()->is_klass_loaded(refinfo_index, must_be_resolved);
1256 }
1257 
1258 // ------------------------------------------------------------------
1259 // ciMethod::check_call
check_call(int refinfo_index,bool is_static) const1260 bool ciMethod::check_call(int refinfo_index, bool is_static) const {
1261   // This method is used only in C2 from InlineTree::ok_to_inline,
1262   // and is only used under -Xcomp.
1263   // It appears to fail when applied to an invokeinterface call site.
1264   // FIXME: Remove this method and resolve_method_statically; refactor to use the other LinkResolver entry points.
1265   VM_ENTRY_MARK;
1266   {
1267     EXCEPTION_MARK;
1268     HandleMark hm(THREAD);
1269     constantPoolHandle pool (THREAD, get_Method()->constants());
1270     Bytecodes::Code code = (is_static ? Bytecodes::_invokestatic : Bytecodes::_invokevirtual);
1271     methodHandle spec_method = LinkResolver::resolve_method_statically(code, pool, refinfo_index, THREAD);
1272     if (HAS_PENDING_EXCEPTION) {
1273       CLEAR_PENDING_EXCEPTION;
1274       return false;
1275     } else {
1276       return (spec_method->is_static() == is_static);
1277     }
1278   }
1279   return false;
1280 }
1281 
1282 // ------------------------------------------------------------------
1283 // ciMethod::profile_aging
1284 //
1285 // Should the method be compiled with an age counter?
profile_aging() const1286 bool ciMethod::profile_aging() const {
1287   return UseCodeAging && (!MethodCounters::is_nmethod_hot(nmethod_age()) &&
1288                           !MethodCounters::is_nmethod_age_unset(nmethod_age()));
1289 }
1290 // ------------------------------------------------------------------
1291 // ciMethod::print_codes
1292 //
1293 // Print the bytecodes for this method.
print_codes_on(outputStream * st)1294 void ciMethod::print_codes_on(outputStream* st) {
1295   check_is_loaded();
1296   GUARDED_VM_ENTRY(get_Method()->print_codes_on(st);)
1297 }
1298 
1299 
1300 #define FETCH_FLAG_FROM_VM(flag_accessor) { \
1301   check_is_loaded(); \
1302   VM_ENTRY_MARK; \
1303   return get_Method()->flag_accessor(); \
1304 }
1305 
is_empty_method() const1306 bool ciMethod::is_empty_method() const {         FETCH_FLAG_FROM_VM(is_empty_method); }
is_vanilla_constructor() const1307 bool ciMethod::is_vanilla_constructor() const {  FETCH_FLAG_FROM_VM(is_vanilla_constructor); }
has_loops() const1308 bool ciMethod::has_loops      () const {         FETCH_FLAG_FROM_VM(has_loops); }
has_jsrs() const1309 bool ciMethod::has_jsrs       () const {         FETCH_FLAG_FROM_VM(has_jsrs);  }
is_getter() const1310 bool ciMethod::is_getter      () const {         FETCH_FLAG_FROM_VM(is_getter); }
is_setter() const1311 bool ciMethod::is_setter      () const {         FETCH_FLAG_FROM_VM(is_setter); }
is_accessor() const1312 bool ciMethod::is_accessor    () const {         FETCH_FLAG_FROM_VM(is_accessor); }
is_initializer() const1313 bool ciMethod::is_initializer () const {         FETCH_FLAG_FROM_VM(is_initializer); }
1314 
is_boxing_method() const1315 bool ciMethod::is_boxing_method() const {
1316   if (holder()->is_box_klass()) {
1317     switch (intrinsic_id()) {
1318       case vmIntrinsics::_Boolean_valueOf:
1319       case vmIntrinsics::_Byte_valueOf:
1320       case vmIntrinsics::_Character_valueOf:
1321       case vmIntrinsics::_Short_valueOf:
1322       case vmIntrinsics::_Integer_valueOf:
1323       case vmIntrinsics::_Long_valueOf:
1324       case vmIntrinsics::_Float_valueOf:
1325       case vmIntrinsics::_Double_valueOf:
1326         return true;
1327       default:
1328         return false;
1329     }
1330   }
1331   return false;
1332 }
1333 
is_unboxing_method() const1334 bool ciMethod::is_unboxing_method() const {
1335   if (holder()->is_box_klass()) {
1336     switch (intrinsic_id()) {
1337       case vmIntrinsics::_booleanValue:
1338       case vmIntrinsics::_byteValue:
1339       case vmIntrinsics::_charValue:
1340       case vmIntrinsics::_shortValue:
1341       case vmIntrinsics::_intValue:
1342       case vmIntrinsics::_longValue:
1343       case vmIntrinsics::_floatValue:
1344       case vmIntrinsics::_doubleValue:
1345         return true;
1346       default:
1347         return false;
1348     }
1349   }
1350   return false;
1351 }
1352 
get_bcea()1353 BCEscapeAnalyzer  *ciMethod::get_bcea() {
1354 #ifdef COMPILER2
1355   if (_bcea == NULL) {
1356     _bcea = new (CURRENT_ENV->arena()) BCEscapeAnalyzer(this, NULL);
1357   }
1358   return _bcea;
1359 #else // COMPILER2
1360   ShouldNotReachHere();
1361   return NULL;
1362 #endif // COMPILER2
1363 }
1364 
get_method_blocks()1365 ciMethodBlocks  *ciMethod::get_method_blocks() {
1366   Arena *arena = CURRENT_ENV->arena();
1367   if (_method_blocks == NULL) {
1368     _method_blocks = new (arena) ciMethodBlocks(arena, this);
1369   }
1370   return _method_blocks;
1371 }
1372 
1373 #undef FETCH_FLAG_FROM_VM
1374 
dump_name_as_ascii(outputStream * st)1375 void ciMethod::dump_name_as_ascii(outputStream* st) {
1376   Method* method = get_Method();
1377   st->print("%s %s %s",
1378             method->klass_name()->as_quoted_ascii(),
1379             method->name()->as_quoted_ascii(),
1380             method->signature()->as_quoted_ascii());
1381 }
1382 
dump_replay_data(outputStream * st)1383 void ciMethod::dump_replay_data(outputStream* st) {
1384   ResourceMark rm;
1385   Method* method = get_Method();
1386   MethodCounters* mcs = method->method_counters();
1387   st->print("ciMethod ");
1388   dump_name_as_ascii(st);
1389   st->print_cr(" %d %d %d %d %d",
1390                mcs == NULL ? 0 : mcs->invocation_counter()->raw_counter(),
1391                mcs == NULL ? 0 : mcs->backedge_counter()->raw_counter(),
1392                interpreter_invocation_count(),
1393                interpreter_throwout_count(),
1394                _instructions_size);
1395 }
1396 
1397 // ------------------------------------------------------------------
1398 // ciMethod::print_codes
1399 //
1400 // Print a range of the bytecodes for this method.
print_codes_on(int from,int to,outputStream * st)1401 void ciMethod::print_codes_on(int from, int to, outputStream* st) {
1402   check_is_loaded();
1403   GUARDED_VM_ENTRY(get_Method()->print_codes_on(from, to, st);)
1404 }
1405 
1406 // ------------------------------------------------------------------
1407 // ciMethod::print_name
1408 //
1409 // Print the name of this method, including signature and some flags.
print_name(outputStream * st)1410 void ciMethod::print_name(outputStream* st) {
1411   check_is_loaded();
1412   GUARDED_VM_ENTRY(get_Method()->print_name(st);)
1413 }
1414 
1415 // ------------------------------------------------------------------
1416 // ciMethod::print_short_name
1417 //
1418 // Print the name of this method, without signature.
print_short_name(outputStream * st)1419 void ciMethod::print_short_name(outputStream* st) {
1420   if (is_loaded()) {
1421     GUARDED_VM_ENTRY(get_Method()->print_short_name(st););
1422   } else {
1423     // Fall back if method is not loaded.
1424     holder()->print_name_on(st);
1425     st->print("::");
1426     name()->print_symbol_on(st);
1427     if (WizardMode)
1428       signature()->as_symbol()->print_symbol_on(st);
1429   }
1430 }
1431 
1432 // ------------------------------------------------------------------
1433 // ciMethod::print_impl
1434 //
1435 // Implementation of the print method.
print_impl(outputStream * st)1436 void ciMethod::print_impl(outputStream* st) {
1437   ciMetadata::print_impl(st);
1438   st->print(" name=");
1439   name()->print_symbol_on(st);
1440   st->print(" holder=");
1441   holder()->print_name_on(st);
1442   st->print(" signature=");
1443   signature()->as_symbol()->print_symbol_on(st);
1444   if (is_loaded()) {
1445     st->print(" loaded=true");
1446     st->print(" arg_size=%d", arg_size());
1447     st->print(" flags=");
1448     flags().print_member_flags(st);
1449   } else {
1450     st->print(" loaded=false");
1451   }
1452 }
1453 
1454 // ------------------------------------------------------------------
1455 
erase_to_word_type(BasicType bt)1456 static BasicType erase_to_word_type(BasicType bt) {
1457   if (is_subword_type(bt)) return T_INT;
1458   if (bt == T_ARRAY)       return T_OBJECT;
1459   return bt;
1460 }
1461 
basic_types_match(ciType * t1,ciType * t2)1462 static bool basic_types_match(ciType* t1, ciType* t2) {
1463   if (t1 == t2)  return true;
1464   return erase_to_word_type(t1->basic_type()) == erase_to_word_type(t2->basic_type());
1465 }
1466 
is_consistent_info(ciMethod * declared_method,ciMethod * resolved_method)1467 bool ciMethod::is_consistent_info(ciMethod* declared_method, ciMethod* resolved_method) {
1468   bool invoke_through_mh_intrinsic = declared_method->is_method_handle_intrinsic() &&
1469                                   !resolved_method->is_method_handle_intrinsic();
1470 
1471   if (!invoke_through_mh_intrinsic) {
1472     // Method name & descriptor should stay the same.
1473     // Signatures may reference unloaded types and thus they may be not strictly equal.
1474     ciSymbol* declared_signature = declared_method->signature()->as_symbol();
1475     ciSymbol* resolved_signature = resolved_method->signature()->as_symbol();
1476 
1477     return (declared_method->name()->equals(resolved_method->name())) &&
1478            (declared_signature->equals(resolved_signature));
1479   }
1480 
1481   ciMethod* linker = declared_method;
1482   ciMethod* target = resolved_method;
1483   // Linkers have appendix argument which is not passed to callee.
1484   int has_appendix = MethodHandles::has_member_arg(linker->intrinsic_id()) ? 1 : 0;
1485   if (linker->arg_size() != (target->arg_size() + has_appendix)) {
1486     return false; // argument slot count mismatch
1487   }
1488 
1489   ciSignature* linker_sig = linker->signature();
1490   ciSignature* target_sig = target->signature();
1491 
1492   if (linker_sig->count() + (linker->is_static() ? 0 : 1) !=
1493       target_sig->count() + (target->is_static() ? 0 : 1) + has_appendix) {
1494     return false; // argument count mismatch
1495   }
1496 
1497   int sbase = 0, rbase = 0;
1498   switch (linker->intrinsic_id()) {
1499     case vmIntrinsics::_linkToVirtual:
1500     case vmIntrinsics::_linkToInterface:
1501     case vmIntrinsics::_linkToSpecial: {
1502       if (target->is_static()) {
1503         return false;
1504       }
1505       if (linker_sig->type_at(0)->is_primitive_type()) {
1506         return false;  // receiver should be an oop
1507       }
1508       sbase = 1; // skip receiver
1509       break;
1510     }
1511     case vmIntrinsics::_linkToStatic: {
1512       if (!target->is_static()) {
1513         return false;
1514       }
1515       break;
1516     }
1517     case vmIntrinsics::_invokeBasic: {
1518       if (target->is_static()) {
1519         if (target_sig->type_at(0)->is_primitive_type()) {
1520           return false; // receiver should be an oop
1521         }
1522         rbase = 1; // skip receiver
1523       }
1524       break;
1525     }
1526     default:
1527       break;
1528   }
1529   assert(target_sig->count() - rbase == linker_sig->count() - sbase - has_appendix, "argument count mismatch");
1530   int arg_count = target_sig->count() - rbase;
1531   for (int i = 0; i < arg_count; i++) {
1532     if (!basic_types_match(linker_sig->type_at(sbase + i), target_sig->type_at(rbase + i))) {
1533       return false;
1534     }
1535   }
1536   // Only check the return type if the symbolic info has non-void return type.
1537   // I.e. the return value of the resolved method can be dropped.
1538   if (!linker->return_type()->is_void() &&
1539       !basic_types_match(linker->return_type(), target->return_type())) {
1540     return false;
1541   }
1542   return true; // no mismatch found
1543 }
1544 
1545 // ------------------------------------------------------------------
1546