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

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

Issue 2896903002: Shuffle around deopt id allocation to give the flow graph builder a chance to record other data as … (Closed)
Patch Set: format Created 3 years, 7 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 | « no previous file | runtime/vm/branch_optimizer.cc » ('j') | runtime/vm/branch_optimizer.cc » ('J')
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/aot_optimizer.h" 5 #include "vm/aot_optimizer.h"
6 6
7 #include "vm/bit_vector.h" 7 #include "vm/bit_vector.h"
8 #include "vm/branch_optimizer.h" 8 #include "vm/branch_optimizer.h"
9 #include "vm/cha.h" 9 #include "vm/cha.h"
10 #include "vm/compiler.h" 10 #include "vm/compiler.h"
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 708
709 cid = kSmiCid; 709 cid = kSmiCid;
710 } else { 710 } else {
711 // Shortcut for equality with null. 711 // Shortcut for equality with null.
712 // TODO(vegorov): this optimization is not speculative and should 712 // TODO(vegorov): this optimization is not speculative and should
713 // be hoisted out of this function. 713 // be hoisted out of this function.
714 ConstantInstr* right_const = right->AsConstant(); 714 ConstantInstr* right_const = right->AsConstant();
715 ConstantInstr* left_const = left->AsConstant(); 715 ConstantInstr* left_const = left->AsConstant();
716 if ((right_const != NULL && right_const->value().IsNull()) || 716 if ((right_const != NULL && right_const->value().IsNull()) ||
717 (left_const != NULL && left_const->value().IsNull())) { 717 (left_const != NULL && left_const->value().IsNull())) {
718 StrictCompareInstr* comp = new (Z) 718 StrictCompareInstr* comp = new (Z) StrictCompareInstr(
719 StrictCompareInstr(call->token_pos(), Token::kEQ_STRICT, 719 call->token_pos(), Token::kEQ_STRICT, new (Z) Value(left),
720 new (Z) Value(left), new (Z) Value(right), 720 new (Z) Value(right), false, // No number check.
Vyacheslav Egorov (Google) 2017/05/23 12:00:00 better maybe write this comment /* number_check =
721 false); // No number check. 721 Thread::Current()->GetNextDeoptId());
Vyacheslav Egorov (Google) 2017/05/23 12:00:00 I think this can be kNoDeoptId We should probably
722 ReplaceCall(call, comp); 722 ReplaceCall(call, comp);
723 return true; 723 return true;
724 } 724 }
725 return false; 725 return false;
726 } 726 }
727 } 727 }
728 ASSERT(cid != kIllegalCid); 728 ASSERT(cid != kIllegalCid);
729 EqualityCompareInstr* comp = new (Z) 729 EqualityCompareInstr* comp = new (Z)
730 EqualityCompareInstr(call->token_pos(), op_kind, new (Z) Value(left), 730 EqualityCompareInstr(call->token_pos(), op_kind, new (Z) Value(left),
731 new (Z) Value(right), cid, call->deopt_id()); 731 new (Z) Value(right), cid, call->deopt_id());
(...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after
1442 type = AbstractType::Cast(call->ArgumentAt(3)->AsConstant()->value()).raw(); 1442 type = AbstractType::Cast(call->ArgumentAt(3)->AsConstant()->value()).raw();
1443 } 1443 }
1444 1444
1445 if (TypeCheckAsClassEquality(type)) { 1445 if (TypeCheckAsClassEquality(type)) {
1446 LoadClassIdInstr* left_cid = new (Z) LoadClassIdInstr(new (Z) Value(left)); 1446 LoadClassIdInstr* left_cid = new (Z) LoadClassIdInstr(new (Z) Value(left));
1447 InsertBefore(call, left_cid, NULL, FlowGraph::kValue); 1447 InsertBefore(call, left_cid, NULL, FlowGraph::kValue);
1448 const intptr_t type_cid = Class::Handle(Z, type.type_class()).id(); 1448 const intptr_t type_cid = Class::Handle(Z, type.type_class()).id();
1449 ConstantInstr* cid = 1449 ConstantInstr* cid =
1450 flow_graph()->GetConstant(Smi::Handle(Z, Smi::New(type_cid))); 1450 flow_graph()->GetConstant(Smi::Handle(Z, Smi::New(type_cid)));
1451 1451
1452 StrictCompareInstr* check_cid = 1452 StrictCompareInstr* check_cid = new (Z) StrictCompareInstr(
1453 new (Z) StrictCompareInstr(call->token_pos(), Token::kEQ_STRICT, 1453 call->token_pos(), Token::kEQ_STRICT, new (Z) Value(left_cid),
1454 new (Z) Value(left_cid), new (Z) Value(cid), 1454 new (Z) Value(cid), false, // No number check.
1455 false); // No number check. 1455 Thread::Current()->GetNextDeoptId());
Vyacheslav Egorov (Google) 2017/05/23 12:00:00 Ditto.
1456 ReplaceCall(call, check_cid); 1456 ReplaceCall(call, check_cid);
1457 return; 1457 return;
1458 } 1458 }
1459 1459
1460 if (precompiler_ != NULL) { 1460 if (precompiler_ != NULL) {
1461 TypeRangeCache* cache = precompiler_->type_range_cache(); 1461 TypeRangeCache* cache = precompiler_->type_range_cache();
1462 intptr_t lower_limit, upper_limit; 1462 intptr_t lower_limit, upper_limit;
1463 if (cache != NULL && 1463 if (cache != NULL &&
1464 cache->InstanceOfHasClassRange(type, &lower_limit, &upper_limit)) { 1464 cache->InstanceOfHasClassRange(type, &lower_limit, &upper_limit)) {
1465 // left.instanceof(type) => 1465 // left.instanceof(type) =>
(...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after
2222 FlowGraph::kEffect); 2222 FlowGraph::kEffect);
2223 current_iterator()->RemoveCurrentFromGraph(); 2223 current_iterator()->RemoveCurrentFromGraph();
2224 } 2224 }
2225 } 2225 }
2226 } 2226 }
2227 } 2227 }
2228 2228
2229 #endif // DART_PRECOMPILER 2229 #endif // DART_PRECOMPILER
2230 2230
2231 } // namespace dart 2231 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/branch_optimizer.cc » ('j') | runtime/vm/branch_optimizer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698