src/share/vm/opto/bytecodeInfo.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot-comp Cdiff src/share/vm/opto/bytecodeInfo.cpp
src/share/vm/opto/bytecodeInfo.cpp
Print this page
rev 5403 : 8012941: JSR 292: too deep inlining might crash compiler because of stack overflow
Reviewed-by: ?
*** 448,462 ****
//------------------------------pass_initial_checks----------------------------
bool pass_initial_checks(ciMethod* caller_method, int caller_bci, ciMethod* callee_method) {
ciInstanceKlass *callee_holder = callee_method ? callee_method->holder() : NULL;
// Check if a callee_method was suggested
! if( callee_method == NULL ) return false;
// Check if klass of callee_method is loaded
! if( !callee_holder->is_loaded() ) return false;
! if( !callee_holder->is_initialized() ) return false;
! if( !UseInterpreter || CompileTheWorld /* running Xcomp or CTW */ ) {
// Checks that constant pool's call site has been visited
// stricter than callee_holder->is_initialized()
ciBytecodeStream iter(caller_method);
iter.force_bci(caller_bci);
Bytecodes::Code call_bc = iter.cur_bc();
--- 448,462 ----
//------------------------------pass_initial_checks----------------------------
bool pass_initial_checks(ciMethod* caller_method, int caller_bci, ciMethod* callee_method) {
ciInstanceKlass *callee_holder = callee_method ? callee_method->holder() : NULL;
// Check if a callee_method was suggested
! if (callee_method == NULL) return false;
// Check if klass of callee_method is loaded
! if (!callee_holder->is_loaded()) return false;
! if (!callee_holder->is_initialized()) return false;
! if (!UseInterpreter || CompileTheWorld /* running Xcomp or CTW */) {
// Checks that constant pool's call site has been visited
// stricter than callee_holder->is_initialized()
ciBytecodeStream iter(caller_method);
iter.force_bci(caller_bci);
Bytecodes::Code call_bc = iter.cur_bc();
*** 465,483 ****
int index = iter.get_index_u2_cpcache();
if (!caller_method->is_klass_loaded(index, true)) {
return false;
}
// Try to do constant pool resolution if running Xcomp
! if( !caller_method->check_call(index, call_bc == Bytecodes::_invokestatic) ) {
return false;
}
}
}
// We will attempt to see if a class/field/etc got properly loaded. If it
// did not, it may attempt to throw an exception during our probing. Catch
// and ignore such exceptions and do not attempt to compile the method.
! if( callee_method->should_exclude() ) return false;
return true;
}
//------------------------------check_can_parse--------------------------------
--- 465,484 ----
int index = iter.get_index_u2_cpcache();
if (!caller_method->is_klass_loaded(index, true)) {
return false;
}
// Try to do constant pool resolution if running Xcomp
! if (!caller_method->check_call(index, call_bc == Bytecodes::_invokestatic)) {
return false;
}
}
}
// We will attempt to see if a class/field/etc got properly loaded. If it
// did not, it may attempt to throw an exception during our probing. Catch
// and ignore such exceptions and do not attempt to compile the method.
! if (callee_method->should_exclude() &&
! !callee_method->should_inline()) return false;
return true;
}
//------------------------------check_can_parse--------------------------------
src/share/vm/opto/bytecodeInfo.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File