| Index: runtime/vm/flow_graph_compiler_mips.cc
|
| ===================================================================
|
| --- runtime/vm/flow_graph_compiler_mips.cc (revision 40311)
|
| +++ runtime/vm/flow_graph_compiler_mips.cc (working copy)
|
| @@ -1139,7 +1139,8 @@
|
| RawPcDescriptors::Kind kind,
|
| LocationSummary* locs) {
|
| __ BranchLinkPatchable(label);
|
| - RecordCallInfo(token_pos, kind, Isolate::kNoDeoptId, locs, 0);
|
| + AddCurrentDescriptor(kind, Isolate::kNoDeoptId, token_pos);
|
| + RecordSafepoint(locs);
|
| }
|
|
|
|
|
| @@ -1149,7 +1150,20 @@
|
| RawPcDescriptors::Kind kind,
|
| LocationSummary* locs) {
|
| __ BranchLinkPatchable(label);
|
| - RecordCallInfo(token_pos, kind, deopt_id, locs, locs->input_count());
|
| + AddCurrentDescriptor(kind, deopt_id, 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 = Isolate::ToDeoptAfter(deopt_id);
|
| + if (is_optimizing()) {
|
| + AddDeoptIndexAtCall(deopt_id_after, token_pos);
|
| + } else {
|
| + // Add deoptimization continuation point after the call and before the
|
| + // arguments are removed.
|
| + AddCurrentDescriptor(RawPcDescriptors::kDeopt,
|
| + deopt_id_after,
|
| + token_pos);
|
| + }
|
| }
|
|
|
|
|
| @@ -1159,7 +1173,22 @@
|
| intptr_t argument_count,
|
| LocationSummary* locs) {
|
| __ CallRuntime(entry, argument_count);
|
| - RecordCallInfo(token_pos, RawPcDescriptors::kOther, deopt_id, locs, 0);
|
| + AddCurrentDescriptor(RawPcDescriptors::kOther, deopt_id, token_pos);
|
| + RecordSafepoint(locs);
|
| + if (deopt_id != Isolate::kNoDeoptId) {
|
| + // 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_after, token_pos);
|
| + } else {
|
| + // Add deoptimization continuation point after the call and before the
|
| + // arguments are removed.
|
| + AddCurrentDescriptor(RawPcDescriptors::kDeopt,
|
| + deopt_id_after,
|
| + token_pos);
|
| + }
|
| + }
|
| }
|
|
|
|
|
| @@ -1283,8 +1312,10 @@
|
| __ LoadObject(S4, arguments_descriptor);
|
| __ AddImmediate(T1, Instructions::HeaderSize() - kHeapObjectTag);
|
| __ jalr(T1);
|
| - RecordCallInfo(
|
| - token_pos, RawPcDescriptors::kOther, deopt_id, locs, locs->input_count());
|
| + AddCurrentDescriptor(RawPcDescriptors::kOther,
|
| + Isolate::kNoDeoptId, token_pos);
|
| + RecordSafepoint(locs);
|
| + AddDeoptIndexAtCall(Isolate::ToDeoptAfter(deopt_id), token_pos);
|
| __ Drop(argument_count);
|
| }
|
|
|
|
|