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

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

Issue 2903993002: Remember deopt-id -> context-level mappings in var descriptors. (Closed)
Patch Set: update descriptor tests Created 3 years, 6 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
« no previous file with comments | « runtime/vm/intermediate_language_arm64.cc ('k') | runtime/vm/intermediate_language_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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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_DBC. 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_DBC.
6 #if defined(TARGET_ARCH_DBC) 6 #if defined(TARGET_ARCH_DBC)
7 7
8 #include "vm/intermediate_language.h" 8 #include "vm/intermediate_language.h"
9 9
10 #include "vm/cpu.h" 10 #include "vm/cpu.h"
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 const Bytecode::Opcode eq_op = 511 const Bytecode::Opcode eq_op =
512 needs_number_check() ? Bytecode::kIfEqStrictNum : Bytecode::kIfEqStrict; 512 needs_number_check() ? Bytecode::kIfEqStrictNum : Bytecode::kIfEqStrict;
513 const Bytecode::Opcode ne_op = 513 const Bytecode::Opcode ne_op =
514 needs_number_check() ? Bytecode::kIfNeStrictNum : Bytecode::kIfNeStrict; 514 needs_number_check() ? Bytecode::kIfNeStrictNum : Bytecode::kIfNeStrict;
515 __ Emit(Bytecode::Encode((comparison == Token::kEQ_STRICT) ? eq_op : ne_op, 515 __ Emit(Bytecode::Encode((comparison == Token::kEQ_STRICT) ? eq_op : ne_op,
516 locs()->in(0).reg(), locs()->in(1).reg())); 516 locs()->in(0).reg(), locs()->in(1).reg()));
517 } 517 }
518 518
519 if (needs_number_check() && token_pos().IsReal()) { 519 if (needs_number_check() && token_pos().IsReal()) {
520 compiler->RecordSafepoint(locs()); 520 compiler->RecordSafepoint(locs());
521 compiler->AddCurrentDescriptor(RawPcDescriptors::kRuntimeCall, 521 compiler->AddCurrentDescriptor(RawPcDescriptors::kRuntimeCall, deopt_id_,
522 Thread::kNoDeoptId, token_pos()); 522 token_pos());
523 } 523 }
524 524
525 return condition; 525 return condition;
526 } 526 }
527 527
528 528
529 void StrictCompareInstr::EmitBranchCode(FlowGraphCompiler* compiler, 529 void StrictCompareInstr::EmitBranchCode(FlowGraphCompiler* compiler,
530 BranchInstr* branch) { 530 BranchInstr* branch) {
531 ASSERT((kind() == Token::kEQ_STRICT) || (kind() == Token::kNE_STRICT)); 531 ASSERT((kind() == Token::kEQ_STRICT) || (kind() == Token::kNE_STRICT));
532 532
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
916 const intptr_t kArgumentCount = 1; 916 const intptr_t kArgumentCount = 1;
917 const Array& arguments_descriptor = Array::Handle(ArgumentsDescriptor::New( 917 const Array& arguments_descriptor = Array::Handle(ArgumentsDescriptor::New(
918 kTypeArgsLen, kArgumentCount, Object::null_array())); 918 kTypeArgsLen, kArgumentCount, Object::null_array()));
919 __ PushConstant(CallFunction()); 919 __ PushConstant(CallFunction());
920 const intptr_t argdesc_kidx = __ AddConstant(arguments_descriptor); 920 const intptr_t argdesc_kidx = __ AddConstant(arguments_descriptor);
921 __ StaticCall(kArgumentCount, argdesc_kidx); 921 __ StaticCall(kArgumentCount, argdesc_kidx);
922 // Note: can't use RecordAfterCall here because 922 // Note: can't use RecordAfterCall here because
923 // StringInterpolateInstr::ArgumentCount() is 0. However 923 // StringInterpolateInstr::ArgumentCount() is 0. However
924 // internally it does a call with 1 argument which needs to 924 // internally it does a call with 1 argument which needs to
925 // be reflected in the lazy deoptimization environment. 925 // be reflected in the lazy deoptimization environment.
926 compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, deopt_id(),
927 token_pos());
926 compiler->RecordAfterCallHelper(token_pos(), deopt_id(), kArgumentCount, 928 compiler->RecordAfterCallHelper(token_pos(), deopt_id(), kArgumentCount,
927 FlowGraphCompiler::kHasResult, locs()); 929 FlowGraphCompiler::kHasResult, locs());
928 if (compiler->is_optimizing()) { 930 if (compiler->is_optimizing()) {
929 __ PopLocal(locs()->out(0).reg()); 931 __ PopLocal(locs()->out(0).reg());
930 } 932 }
931 } 933 }
932 934
933 935
934 EMIT_NATIVE_CODE(NativeCall, 936 EMIT_NATIVE_CODE(NativeCall,
935 0, 937 0,
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
1283 compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, deopt_id(), 1285 compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, deopt_id(),
1284 token_pos()); 1286 token_pos());
1285 if (compiler->is_optimizing()) { 1287 if (compiler->is_optimizing()) {
1286 __ PopLocal(locs()->out(0).reg()); 1288 __ PopLocal(locs()->out(0).reg());
1287 } 1289 }
1288 } 1290 }
1289 1291
1290 1292
1291 void DebugStepCheckInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 1293 void DebugStepCheckInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
1292 __ DebugStep(); 1294 __ DebugStep();
1293 compiler->AddCurrentDescriptor(stub_kind_, Thread::kNoDeoptId, token_pos()); 1295 compiler->AddCurrentDescriptor(stub_kind_, deopt_id_, token_pos());
1294 } 1296 }
1295 1297
1296 1298
1297 void GraphEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 1299 void GraphEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
1298 if (!compiler->CanFallThroughTo(normal_entry())) { 1300 if (!compiler->CanFallThroughTo(normal_entry())) {
1299 __ Jump(compiler->GetJumpLabel(normal_entry())); 1301 __ Jump(compiler->GetJumpLabel(normal_entry()));
1300 } 1302 }
1301 } 1303 }
1302 1304
1303 1305
(...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after
2076 } 2078 }
2077 __ IfULe(length, index); 2079 __ IfULe(length, index);
2078 compiler->EmitDeopt(deopt_id(), ICData::kDeoptCheckArrayBound, 2080 compiler->EmitDeopt(deopt_id(), ICData::kDeoptCheckArrayBound,
2079 (generalized_ ? ICData::kGeneralized : 0) | 2081 (generalized_ ? ICData::kGeneralized : 0) |
2080 (licm_hoisted_ ? ICData::kHoisted : 0)); 2082 (licm_hoisted_ ? ICData::kHoisted : 0));
2081 } 2083 }
2082 2084
2083 } // namespace dart 2085 } // namespace dart
2084 2086
2085 #endif // defined TARGET_ARCH_DBC 2087 #endif // defined TARGET_ARCH_DBC
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language_arm64.cc ('k') | runtime/vm/intermediate_language_ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698