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

Unified Diff: runtime/vm/code_generator.cc

Issue 2743903002: Revert "Do not rely on code patching on DBC for lazy deoptimization." (Closed)
Patch Set: Created 3 years, 9 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 | runtime/vm/code_patcher.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/code_generator.cc
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 17b094b2c867b2eead4bde9cb2f6ecb56c429876..1d73b6b92011594142bb95f3c69e3973ea702025 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -1935,6 +1935,30 @@ void DeoptimizeAt(const Code& optimized_code, StackFrame* frame) {
function.SwitchToUnoptimizedCode();
}
+#if defined(TARGET_ARCH_DBC)
+ const Instructions& instrs =
+ Instructions::Handle(zone, optimized_code.instructions());
+ {
+ WritableInstructionsScope writable(instrs.PayloadStart(), instrs.Size());
+ CodePatcher::InsertDeoptimizationCallAt(frame->pc());
+ if (FLAG_trace_patching) {
+ const String& name = String::Handle(function.name());
+ OS::PrintErr("InsertDeoptimizationCallAt: 0x%" Px " for %s\n",
+ frame->pc(), name.ToCString());
+ }
+ const ExceptionHandlers& handlers =
+ ExceptionHandlers::Handle(zone, optimized_code.exception_handlers());
+ ExceptionHandlerInfo info;
+ for (intptr_t i = 0; i < handlers.num_entries(); ++i) {
+ handlers.GetHandlerInfo(i, &info);
+ const uword patch_pc = instrs.PayloadStart() + info.handler_pc_offset;
+ CodePatcher::InsertDeoptimizationCallAt(patch_pc);
+ if (FLAG_trace_patching) {
+ OS::PrintErr(" at handler 0x%" Px "\n", patch_pc);
+ }
+ }
+ }
+#else // !DBC
if (frame->IsMarkedForLazyDeopt()) {
// Deopt already scheduled.
if (FLAG_trace_deoptimization) {
@@ -1958,6 +1982,7 @@ void DeoptimizeAt(const Code& optimized_code, StackFrame* frame) {
frame->fp(), deopt_pc);
}
}
+#endif // !DBC
// Mark code as dead (do not GC its embedded objects).
optimized_code.set_is_alive(false);
@@ -2055,6 +2080,7 @@ DEFINE_LEAF_RUNTIME_ENTRY(intptr_t,
is_lazy_deopt ? "lazy-deopt" : "");
}
+#if !defined(TARGET_ARCH_DBC)
if (is_lazy_deopt) {
uword deopt_pc = isolate->FindPendingDeopt(caller_frame->fp());
if (FLAG_trace_deoptimization) {
@@ -2065,7 +2091,6 @@ DEFINE_LEAF_RUNTIME_ENTRY(intptr_t,
// N.B.: Update frame before updating pending deopt table. The profiler
// may attempt a stack walk in between.
caller_frame->set_pc(deopt_pc);
- ASSERT(!caller_frame->IsMarkedForLazyDeopt());
ASSERT(caller_frame->pc() == deopt_pc);
ASSERT(optimized_code.ContainsInstructionAt(caller_frame->pc()));
isolate->ClearPendingDeoptsAtOrBelow(caller_frame->fp());
@@ -2075,6 +2100,7 @@ DEFINE_LEAF_RUNTIME_ENTRY(intptr_t,
caller_frame->pc());
}
}
+#endif // !DBC
// Copy the saved registers from the stack.
fpu_register_t* fpu_registers;
« no previous file with comments | « no previous file | runtime/vm/code_patcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698