Index: runtime/vm/flow_graph_compiler_arm.cc |
diff --git a/runtime/vm/flow_graph_compiler_arm.cc b/runtime/vm/flow_graph_compiler_arm.cc |
index ecbb5484112d2f3331daf995c15c7a677c60da75..5b0371a6407f16673c308cc7be101c54e5bfcaf3 100644 |
--- a/runtime/vm/flow_graph_compiler_arm.cc |
+++ b/runtime/vm/flow_graph_compiler_arm.cc |
@@ -342,9 +342,18 @@ void FlowGraphCompiler::EmitInstructionPrologue(Instruction* instr) { |
if (!is_optimizing()) { |
if (FLAG_enable_type_checks && instr->IsAssertAssignable()) { |
AssertAssignableInstr* assert = instr->AsAssertAssignable(); |
- AddCurrentDescriptor(PcDescriptors::kDeoptBefore, |
+ AddCurrentDescriptor(PcDescriptors::kDeopt, |
assert->deopt_id(), |
assert->token_pos()); |
+ } else if (instr->IsGuardField()) { |
+ GuardFieldInstr* guard = instr->AsGuardField(); |
+ AddCurrentDescriptor(PcDescriptors::kDeopt, |
+ guard->deopt_id(), |
+ Scanner::kDummyTokenIndex); |
+ } else if (instr->CanBeDeoptimizationTarget()) { |
+ AddCurrentDescriptor(PcDescriptors::kDeopt, |
+ instr->deopt_id(), |
+ Scanner::kDummyTokenIndex); |
} |
AllocateRegistersLocally(instr); |
} |
@@ -818,14 +827,13 @@ void FlowGraphCompiler::GenerateDartCall(intptr_t deopt_id, |
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 = Isolate::ToDeoptAfter(deopt_id); |
if (is_optimizing()) { |
- AddDeoptIndexAtCall(deopt_id, token_pos); |
+ AddDeoptIndexAtCall(deopt_id_after, token_pos); |
} else { |
// Add deoptimization continuation point after the call and before the |
// arguments are removed. |
- AddCurrentDescriptor(PcDescriptors::kDeoptAfter, |
- deopt_id, |
- token_pos); |
+ AddCurrentDescriptor(PcDescriptors::kDeopt, deopt_id_after, token_pos); |
} |
} |