Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(99)

Unified Diff: runtime/vm/flow_graph_compiler_dbc.cc

Issue 2900963008: Reapply "Shuffle around deopt id allocation... (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/flow_graph_compiler_dbc.cc
diff --git a/runtime/vm/flow_graph_compiler_dbc.cc b/runtime/vm/flow_graph_compiler_dbc.cc
index 47cfb97c4d0c605ba11660405c98e1837f27ef24..d623467fd736361aada26262962b93a5cc157a52 100644
--- a/runtime/vm/flow_graph_compiler_dbc.cc
+++ b/runtime/vm/flow_graph_compiler_dbc.cc
@@ -184,22 +184,28 @@ void FlowGraphCompiler::RecordAfterCallHelper(TokenPosition token_pos,
RecordSafepoint(locs);
// Marks either the continuation point in unoptimized code or the
// deoptimization point in optimized code, after call.
- const intptr_t deopt_id_after = Thread::ToDeoptAfter(deopt_id);
if (is_optimizing()) {
// Return/ReturnTOS instruction drops incoming arguments so
// we have to drop outgoing arguments from the innermost environment.
// On all other architectures caller drops outgoing arguments itself
// hence the difference.
pending_deoptimization_env_->DropArguments(argument_count);
- CompilerDeoptInfo* info = AddDeoptIndexAtCall(deopt_id_after);
- if (result == kHasResult) {
- info->mark_lazy_deopt_with_result();
+ intptr_t deopt_id_after;
Vyacheslav Egorov (Google) 2017/05/24 19:14:05 This is a bit suspicious. What kind of instruction
rmacnak 2017/05/24 19:17:31 A CreateArrayInstr. The other architectures are fa
Vyacheslav Egorov (Google) 2017/05/24 19:25:17 I think it is possible to cause lazy deoptimizatio
Vyacheslav Egorov (Google) 2017/05/24 19:50:32 Actually these days a simplest repro like this wou
+ if (deopt_id == Thread::kNoDeoptId) {
+ deopt_id_after = deopt_id;
+ } else {
+ deopt_id_after = Thread::ToDeoptAfter(deopt_id);
+ CompilerDeoptInfo* info = AddDeoptIndexAtCall(deopt_id_after);
+ if (result == kHasResult) {
+ info->mark_lazy_deopt_with_result();
+ }
}
// This descriptor is needed for exception handling in optimized code.
AddCurrentDescriptor(RawPcDescriptors::kOther, deopt_id_after, token_pos);
} else {
// Add deoptimization continuation point after the call and before the
// arguments are removed.
+ const intptr_t deopt_id_after = Thread::ToDeoptAfter(deopt_id);
AddCurrentDescriptor(RawPcDescriptors::kDeopt, deopt_id_after, token_pos);
}
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698