comparison src/share/vm/opto/bytecodeInfo.cpp @ 1137:97125851f396

6829187: compiler optimizations required for JSR 292 Summary: C2 implementation for invokedynamic support. Reviewed-by: kvn, never
author twisti
date Tue, 05 Jan 2010 13:05:58 +0100
parents 15bbd3f505c0
children dd57230ba8fe
comparison
equal deleted inserted replaced
1136:4b84186a8248 1137:97125851f396
320 if( !UseInterpreter || CompileTheWorld /* running Xcomp or CTW */ ) { 320 if( !UseInterpreter || CompileTheWorld /* running Xcomp or CTW */ ) {
321 // Checks that constant pool's call site has been visited 321 // Checks that constant pool's call site has been visited
322 // stricter than callee_holder->is_initialized() 322 // stricter than callee_holder->is_initialized()
323 ciBytecodeStream iter(caller_method); 323 ciBytecodeStream iter(caller_method);
324 iter.force_bci(caller_bci); 324 iter.force_bci(caller_bci);
325 int index = iter.get_index_int();
326 if( !caller_method->is_klass_loaded(index, true) ) {
327 return false;
328 }
329 // Try to do constant pool resolution if running Xcomp
330 Bytecodes::Code call_bc = iter.cur_bc(); 325 Bytecodes::Code call_bc = iter.cur_bc();
331 if( !caller_method->check_call(index, call_bc == Bytecodes::_invokestatic) ) { 326 // An invokedynamic instruction does not have a klass.
332 return false; 327 if (call_bc != Bytecodes::_invokedynamic) {
328 int index = iter.get_index_int();
329 if (!caller_method->is_klass_loaded(index, true)) {
330 return false;
331 }
332 // Try to do constant pool resolution if running Xcomp
333 if( !caller_method->check_call(index, call_bc == Bytecodes::_invokestatic) ) {
334 return false;
335 }
333 } 336 }
334 } 337 }
335 // We will attempt to see if a class/field/etc got properly loaded. If it 338 // We will attempt to see if a class/field/etc got properly loaded. If it
336 // did not, it may attempt to throw an exception during our probing. Catch 339 // did not, it may attempt to throw an exception during our probing. Catch
337 // and ignore such exceptions and do not attempt to compile the method. 340 // and ignore such exceptions and do not attempt to compile the method.