src/share/vm/opto/graphKit.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/opto

src/share/vm/opto/graphKit.cpp

Print this page
rev 6132 : 8032410: compiler/uncommontrap/TestStackBangRbp.java times out on Solaris-Sparc V9
Summary: make compiled code bang the stack by the worst case size of the interpreter frame at deoptimization points.
Reviewed-by:


1032       bool ignored_will_link;
1033       ciField* field = method()->get_field_at_bci(bci(), ignored_will_link);
1034       int      size  = field->type()->size();
1035       bool is_get = (depth >= 0), is_static = (depth & 1);
1036       inputs = (is_static ? 0 : 1);
1037       if (is_get) {
1038         depth = size - inputs;
1039       } else {
1040         inputs += size;        // putxxx pops the value from the stack
1041         depth = - inputs;
1042       }
1043     }
1044     break;
1045 
1046   case Bytecodes::_invokevirtual:
1047   case Bytecodes::_invokespecial:
1048   case Bytecodes::_invokestatic:
1049   case Bytecodes::_invokedynamic:
1050   case Bytecodes::_invokeinterface:
1051     {
1052       bool ignored_will_link;
1053       ciSignature* declared_signature = NULL;
1054       ciMethod* ignored_callee = method()->get_method_at_bci(bci(), ignored_will_link, &declared_signature);
1055       assert(declared_signature != NULL, "cannot be null");
1056       inputs   = declared_signature->arg_size_for_bc(code);
1057       int size = declared_signature->return_type()->size();
1058       depth = size - inputs;
1059     }
1060     break;
1061 
1062   case Bytecodes::_multianewarray:
1063     {
1064       ciBytecodeStream iter(method());
1065       iter.reset_to_bci(bci());
1066       iter.next();
1067       inputs = iter.get_dimensions();
1068       assert(rsize == 1, "");
1069       depth = rsize - inputs;
1070     }
1071     break;
1072 
1073   case Bytecodes::_ireturn:
1074   case Bytecodes::_lreturn:
1075   case Bytecodes::_freturn:
1076   case Bytecodes::_dreturn:
1077   case Bytecodes::_areturn:
1078     assert(rsize = -depth, "");




1032       bool ignored_will_link;
1033       ciField* field = method()->get_field_at_bci(bci(), ignored_will_link);
1034       int      size  = field->type()->size();
1035       bool is_get = (depth >= 0), is_static = (depth & 1);
1036       inputs = (is_static ? 0 : 1);
1037       if (is_get) {
1038         depth = size - inputs;
1039       } else {
1040         inputs += size;        // putxxx pops the value from the stack
1041         depth = - inputs;
1042       }
1043     }
1044     break;
1045 
1046   case Bytecodes::_invokevirtual:
1047   case Bytecodes::_invokespecial:
1048   case Bytecodes::_invokestatic:
1049   case Bytecodes::_invokedynamic:
1050   case Bytecodes::_invokeinterface:
1051     {
1052       int size = method()->get_stack_effect_at_invoke(bci(), code, inputs);
1053       depth = size;





1054     }
1055     break;
1056 
1057   case Bytecodes::_multianewarray:
1058     {
1059       ciBytecodeStream iter(method());
1060       iter.reset_to_bci(bci());
1061       iter.next();
1062       inputs = iter.get_dimensions();
1063       assert(rsize == 1, "");
1064       depth = rsize - inputs;
1065     }
1066     break;
1067 
1068   case Bytecodes::_ireturn:
1069   case Bytecodes::_lreturn:
1070   case Bytecodes::_freturn:
1071   case Bytecodes::_dreturn:
1072   case Bytecodes::_areturn:
1073     assert(rsize = -depth, "");


src/share/vm/opto/graphKit.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File