< prev index next >

src/hotspot/share/runtime/deoptimization.cpp

Print this page




 662     // notions of expression stack and locals
 663     vframeArray* cur_array = thread->vframe_array_last();
 664     RegisterMap rm(thread, false);
 665     rm.set_include_argument_oops(false);
 666     bool is_top_frame = true;
 667     int callee_size_of_parameters = 0;
 668     int callee_max_locals = 0;
 669     for (int i = 0; i < cur_array->frames(); i++) {
 670       vframeArrayElement* el = cur_array->element(i);
 671       frame* iframe = el->iframe();
 672       guarantee(iframe->is_interpreted_frame(), "Wrong frame type");
 673 
 674       // Get the oop map for this bci
 675       InterpreterOopMap mask;
 676       int cur_invoke_parameter_size = 0;
 677       bool try_next_mask = false;
 678       int next_mask_expression_stack_size = -1;
 679       int top_frame_expression_stack_adjustment = 0;
 680       methodHandle mh(thread, iframe->interpreter_frame_method());
 681       OopMapCache::compute_one_oop_map(mh, iframe->interpreter_frame_bci(), &mask);
 682       BytecodeStream str(mh);
 683       str.set_start(iframe->interpreter_frame_bci());
 684       int max_bci = mh->code_size();
 685       // Get to the next bytecode if possible
 686       assert(str.bci() < max_bci, "bci in interpreter frame out of bounds");
 687       // Check to see if we can grab the number of outgoing arguments
 688       // at an uncommon trap for an invoke (where the compiler
 689       // generates debug info before the invoke has executed)
 690       Bytecodes::Code cur_code = str.next();
 691       if (Bytecodes::is_invoke(cur_code)) {
 692         Bytecode_invoke invoke(mh, iframe->interpreter_frame_bci());
 693         cur_invoke_parameter_size = invoke.size_of_parameters();
 694         if (i != 0 && !invoke.is_invokedynamic() && MethodHandles::has_member_arg(invoke.klass(), invoke.name())) {
 695           callee_size_of_parameters++;
 696         }
 697       }
 698       if (str.bci() < max_bci) {
 699         Bytecodes::Code next_code = str.next();
 700         if (next_code >= 0) {
 701           // The interpreter oop map generator reports results before
 702           // the current bytecode has executed except in the case of
 703           // calls. It seems to be hard to tell whether the compiler




 662     // notions of expression stack and locals
 663     vframeArray* cur_array = thread->vframe_array_last();
 664     RegisterMap rm(thread, false);
 665     rm.set_include_argument_oops(false);
 666     bool is_top_frame = true;
 667     int callee_size_of_parameters = 0;
 668     int callee_max_locals = 0;
 669     for (int i = 0; i < cur_array->frames(); i++) {
 670       vframeArrayElement* el = cur_array->element(i);
 671       frame* iframe = el->iframe();
 672       guarantee(iframe->is_interpreted_frame(), "Wrong frame type");
 673 
 674       // Get the oop map for this bci
 675       InterpreterOopMap mask;
 676       int cur_invoke_parameter_size = 0;
 677       bool try_next_mask = false;
 678       int next_mask_expression_stack_size = -1;
 679       int top_frame_expression_stack_adjustment = 0;
 680       methodHandle mh(thread, iframe->interpreter_frame_method());
 681       OopMapCache::compute_one_oop_map(mh, iframe->interpreter_frame_bci(), &mask);
 682       BytecodeStream str(mh, iframe->interpreter_frame_bci());

 683       int max_bci = mh->code_size();
 684       // Get to the next bytecode if possible
 685       assert(str.bci() < max_bci, "bci in interpreter frame out of bounds");
 686       // Check to see if we can grab the number of outgoing arguments
 687       // at an uncommon trap for an invoke (where the compiler
 688       // generates debug info before the invoke has executed)
 689       Bytecodes::Code cur_code = str.next();
 690       if (Bytecodes::is_invoke(cur_code)) {
 691         Bytecode_invoke invoke(mh, iframe->interpreter_frame_bci());
 692         cur_invoke_parameter_size = invoke.size_of_parameters();
 693         if (i != 0 && !invoke.is_invokedynamic() && MethodHandles::has_member_arg(invoke.klass(), invoke.name())) {
 694           callee_size_of_parameters++;
 695         }
 696       }
 697       if (str.bci() < max_bci) {
 698         Bytecodes::Code next_code = str.next();
 699         if (next_code >= 0) {
 700           // The interpreter oop map generator reports results before
 701           // the current bytecode has executed except in the case of
 702           // calls. It seems to be hard to tell whether the compiler


< prev index next >