comparison src/share/vm/ci/bcEscapeAnalyzer.cpp @ 3280:548597e74aa4

7030715: JSR 292 JRuby test/test_super_call_site_caching.rb asserts with +DoEscapeAnalysis Reviewed-by: twisti
author never
date Mon, 25 Apr 2011 16:25:58 -0700
parents a7367756024b
children cc81b9c09bbb
comparison
equal deleted inserted replaced
3279:08ccee2c4dbf 3280:548597e74aa4
230 target->can_be_statically_bound() && code == Bytecodes::_invokevirtual) { 230 target->can_be_statically_bound() && code == Bytecodes::_invokevirtual) {
231 code = Bytecodes::_invokespecial; 231 code = Bytecodes::_invokespecial;
232 } 232 }
233 233
234 // compute size of arguments 234 // compute size of arguments
235 int arg_size = target->arg_size(); 235 int arg_size = target->invoke_arg_size(code);
236 if (code == Bytecodes::_invokedynamic) {
237 assert(!target->is_static(), "receiver explicit in method");
238 arg_size--; // implicit, not really on stack
239 }
240 if (!target->is_loaded() && code == Bytecodes::_invokestatic) {
241 arg_size--;
242 }
243 int arg_base = MAX2(state._stack_height - arg_size, 0); 236 int arg_base = MAX2(state._stack_height - arg_size, 0);
244 237
245 // direct recursive calls are skipped if they can be bound statically without introducing 238 // direct recursive calls are skipped if they can be bound statically without introducing
246 // dependencies and if parameters are passed at the same position as in the current method 239 // dependencies and if parameters are passed at the same position as in the current method
247 // other calls are skipped if there are no unescaped arguments passed to them 240 // other calls are skipped if there are no unescaped arguments passed to them