mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 03:24:38 +02:00
6833129: specjvm98 fails with NullPointerException in the compiler with -XX:DeoptimizeALot
Developed a reexecute logic for the interpreter to reexecute the bytecode when deopt happens Reviewed-by: kvn, never, jrose, twisti
This commit is contained in:
parent
f2ea22a547
commit
ae00753bf7
29 changed files with 465 additions and 241 deletions
|
@ -239,15 +239,20 @@ class IRScopeDebugInfo: public CompilationResourceObj {
|
|||
GrowableArray<MonitorValue*>* monitors() { return _monitors; }
|
||||
IRScopeDebugInfo* caller() { return _caller; }
|
||||
|
||||
void record_debug_info(DebugInformationRecorder* recorder, int pc_offset) {
|
||||
//Whether we should reexecute this bytecode for deopt
|
||||
bool should_reexecute();
|
||||
|
||||
void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool topmost) {
|
||||
if (caller() != NULL) {
|
||||
// Order is significant: Must record caller first.
|
||||
caller()->record_debug_info(recorder, pc_offset);
|
||||
caller()->record_debug_info(recorder, pc_offset, false/*topmost*/);
|
||||
}
|
||||
DebugToken* locvals = recorder->create_scope_values(locals());
|
||||
DebugToken* expvals = recorder->create_scope_values(expressions());
|
||||
DebugToken* monvals = recorder->create_monitor_values(monitors());
|
||||
recorder->describe_scope(pc_offset, scope()->method(), bci(), locvals, expvals, monvals);
|
||||
// reexecute allowed only for the topmost frame
|
||||
bool reexecute = topmost ? should_reexecute() : false;
|
||||
recorder->describe_scope(pc_offset, scope()->method(), bci(), reexecute, locvals, expvals, monvals);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue