Index: runtime/vm/flow_graph_compiler_x64.cc |
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc |
index aeebe90a2b3d19e749488271838ba065b46ec3a7..30787628fc46ef21b83479fbd06169f6a8cac577 100644 |
--- a/runtime/vm/flow_graph_compiler_x64.cc |
+++ b/runtime/vm/flow_graph_compiler_x64.cc |
@@ -724,28 +724,6 @@ void FlowGraphCompiler::GenerateAssertAssignable(intptr_t token_pos, |
} |
-void FlowGraphCompiler::EmitInstructionPrologue(Instruction* instr) { |
- if (!is_optimizing()) { |
- if (FLAG_enable_type_checks && instr->IsAssertAssignable()) { |
- AssertAssignableInstr* assert = instr->AsAssertAssignable(); |
- AddCurrentDescriptor(PcDescriptors::kDeopt, |
- assert->deopt_id(), |
- assert->token_pos()); |
- } else if (instr->IsGuardField() || |
- instr->CanBecomeDeoptimizationTarget()) { |
- AddCurrentDescriptor(PcDescriptors::kDeopt, |
- instr->deopt_id(), |
- Scanner::kDummyTokenIndex); |
- } |
- AllocateRegistersLocally(instr); |
- } else if (instr->MayThrow() && |
- (CurrentTryIndex() != CatchClauseNode::kInvalidTryIndex)) { |
- // Optimized try-block: Sync locals to fixed stack locations. |
- EmitTrySync(instr, CurrentTryIndex()); |
- } |
-} |
- |
- |
void FlowGraphCompiler::EmitTrySyncMove(intptr_t dest_offset, |
Location loc, |
bool* push_emitted) { |
@@ -1358,6 +1336,21 @@ void FlowGraphCompiler::EmitUnoptimizedStaticCall( |
} |
+void FlowGraphCompiler::EmitEdgeCounter() { |
+ // We do not check for overflow when incrementing the edge counter. The |
+ // function should normally be optimized long before the counter can |
+ // overflow; and though we do not reset the counters when we optimize or |
+ // deoptimize, there is a bound on the number of |
+ // optimization/deoptimization cycles we will attempt. |
+ const Array& counter = Array::ZoneHandle(Array::New(1, Heap::kOld)); |
+ counter.SetAt(0, Smi::Handle(Smi::New(0))); |
+ __ Comment("Edge counter"); |
+ __ LoadObject(RAX, counter, PP); |
+ __ AddImmediate(FieldAddress(RAX, Array::element_offset(0)), |
+ Immediate(Smi::RawValue(1)), PP); |
+} |
+ |
+ |
void FlowGraphCompiler::EmitOptimizedInstanceCall( |
ExternalLabel* target_label, |
const ICData& ic_data, |