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

Side by Side Diff: runtime/vm/flow_graph_compiler_arm.cc

Issue 12457034: Ensure that all goto instructions have deoptimization target. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Delete UNREACHABLE Created 7 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/flow_graph_compiler.cc ('k') | runtime/vm/flow_graph_compiler_ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM. 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM.
6 #if defined(TARGET_ARCH_ARM) 6 #if defined(TARGET_ARCH_ARM)
7 7
8 #include "vm/flow_graph_compiler.h" 8 #include "vm/flow_graph_compiler.h"
9 9
10 #include "lib/error.h" 10 #include "lib/error.h"
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 __ Bind(&is_assignable); 335 __ Bind(&is_assignable);
336 // Restore instantiator and its type arguments. 336 // Restore instantiator and its type arguments.
337 __ PopList((1 << R1) | (1 << R2)); 337 __ PopList((1 << R1) | (1 << R2));
338 } 338 }
339 339
340 340
341 void FlowGraphCompiler::EmitInstructionPrologue(Instruction* instr) { 341 void FlowGraphCompiler::EmitInstructionPrologue(Instruction* instr) {
342 if (!is_optimizing()) { 342 if (!is_optimizing()) {
343 if (FLAG_enable_type_checks && instr->IsAssertAssignable()) { 343 if (FLAG_enable_type_checks && instr->IsAssertAssignable()) {
344 AssertAssignableInstr* assert = instr->AsAssertAssignable(); 344 AssertAssignableInstr* assert = instr->AsAssertAssignable();
345 AddCurrentDescriptor(PcDescriptors::kDeoptBefore, 345 AddCurrentDescriptor(PcDescriptors::kDeopt,
346 assert->deopt_id(), 346 assert->deopt_id(),
347 assert->token_pos()); 347 assert->token_pos());
348 } else if (instr->IsGuardField()) {
349 GuardFieldInstr* guard = instr->AsGuardField();
350 AddCurrentDescriptor(PcDescriptors::kDeopt,
351 guard->deopt_id(),
352 Scanner::kDummyTokenIndex);
353 } else if (instr->CanBeDeoptimizationTarget()) {
354 AddCurrentDescriptor(PcDescriptors::kDeopt,
355 instr->deopt_id(),
356 Scanner::kDummyTokenIndex);
348 } 357 }
349 AllocateRegistersLocally(instr); 358 AllocateRegistersLocally(instr);
350 } 359 }
351 } 360 }
352 361
353 362
354 void FlowGraphCompiler::EmitInstructionEpilogue(Instruction* instr) { 363 void FlowGraphCompiler::EmitInstructionEpilogue(Instruction* instr) {
355 if (is_optimizing()) return; 364 if (is_optimizing()) return;
356 Definition* defn = instr->AsDefinition(); 365 Definition* defn = instr->AsDefinition();
357 if ((defn != NULL) && defn->is_used()) { 366 if ((defn != NULL) && defn->is_used()) {
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 void FlowGraphCompiler::GenerateDartCall(intptr_t deopt_id, 820 void FlowGraphCompiler::GenerateDartCall(intptr_t deopt_id,
812 intptr_t token_pos, 821 intptr_t token_pos,
813 const ExternalLabel* label, 822 const ExternalLabel* label,
814 PcDescriptors::Kind kind, 823 PcDescriptors::Kind kind,
815 LocationSummary* locs) { 824 LocationSummary* locs) {
816 __ BranchLinkPatchable(label); 825 __ BranchLinkPatchable(label);
817 AddCurrentDescriptor(kind, deopt_id, token_pos); 826 AddCurrentDescriptor(kind, deopt_id, token_pos);
818 RecordSafepoint(locs); 827 RecordSafepoint(locs);
819 // Marks either the continuation point in unoptimized code or the 828 // Marks either the continuation point in unoptimized code or the
820 // deoptimization point in optimized code, after call. 829 // deoptimization point in optimized code, after call.
830 const intptr_t deopt_id_after = Isolate::ToDeoptAfter(deopt_id);
821 if (is_optimizing()) { 831 if (is_optimizing()) {
822 AddDeoptIndexAtCall(deopt_id, token_pos); 832 AddDeoptIndexAtCall(deopt_id_after, token_pos);
823 } else { 833 } else {
824 // Add deoptimization continuation point after the call and before the 834 // Add deoptimization continuation point after the call and before the
825 // arguments are removed. 835 // arguments are removed.
826 AddCurrentDescriptor(PcDescriptors::kDeoptAfter, 836 AddCurrentDescriptor(PcDescriptors::kDeopt, deopt_id_after, token_pos);
827 deopt_id,
828 token_pos);
829 } 837 }
830 } 838 }
831 839
832 840
833 void FlowGraphCompiler::GenerateCallRuntime(intptr_t token_pos, 841 void FlowGraphCompiler::GenerateCallRuntime(intptr_t token_pos,
834 intptr_t deopt_id, 842 intptr_t deopt_id,
835 const RuntimeEntry& entry, 843 const RuntimeEntry& entry,
836 LocationSummary* locs) { 844 LocationSummary* locs) {
837 __ Unimplemented("call runtime"); 845 __ Unimplemented("call runtime");
838 } 846 }
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
1052 1060
1053 1061
1054 void ParallelMoveResolver::Exchange(const Address& mem1, const Address& mem2) { 1062 void ParallelMoveResolver::Exchange(const Address& mem1, const Address& mem2) {
1055 UNIMPLEMENTED(); 1063 UNIMPLEMENTED();
1056 } 1064 }
1057 1065
1058 1066
1059 } // namespace dart 1067 } // namespace dart
1060 1068
1061 #endif // defined TARGET_ARCH_ARM 1069 #endif // defined TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « runtime/vm/flow_graph_compiler.cc ('k') | runtime/vm/flow_graph_compiler_ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698