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

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

Issue 2900963008: Reapply "Shuffle around deopt id allocation... (Closed)
Patch Set: . 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/flow_graph_inliner.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 692 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 // Shortcut for equality with null. 703 // Shortcut for equality with null.
704 // TODO(vegorov): this optimization is not speculative and should 704 // TODO(vegorov): this optimization is not speculative and should
705 // be hoisted out of this function. 705 // be hoisted out of this function.
706 ConstantInstr* right_const = right->AsConstant(); 706 ConstantInstr* right_const = right->AsConstant();
707 ConstantInstr* left_const = left->AsConstant(); 707 ConstantInstr* left_const = left->AsConstant();
708 if ((right_const != NULL && right_const->value().IsNull()) || 708 if ((right_const != NULL && right_const->value().IsNull()) ||
709 (left_const != NULL && left_const->value().IsNull())) { 709 (left_const != NULL && left_const->value().IsNull())) {
710 StrictCompareInstr* comp = new (Z) 710 StrictCompareInstr* comp = new (Z)
711 StrictCompareInstr(call->token_pos(), Token::kEQ_STRICT, 711 StrictCompareInstr(call->token_pos(), Token::kEQ_STRICT,
712 new (Z) Value(left), new (Z) Value(right), 712 new (Z) Value(left), new (Z) Value(right),
713 false); // No number check. 713 /* number_check = */ false, Thread::kNoDeoptId);
714 ReplaceCall(call, comp); 714 ReplaceCall(call, comp);
715 return true; 715 return true;
716 } 716 }
717 return false; 717 return false;
718 } 718 }
719 } 719 }
720 ASSERT(cid != kIllegalCid); 720 ASSERT(cid != kIllegalCid);
721 EqualityCompareInstr* comp = new (Z) 721 EqualityCompareInstr* comp = new (Z)
722 EqualityCompareInstr(call->token_pos(), op_kind, new (Z) Value(left), 722 EqualityCompareInstr(call->token_pos(), op_kind, new (Z) Value(left),
723 new (Z) Value(right), cid, call->deopt_id()); 723 new (Z) Value(right), cid, call->deopt_id());
(...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after
1434 type = AbstractType::Cast(call->ArgumentAt(3)->AsConstant()->value()).raw(); 1434 type = AbstractType::Cast(call->ArgumentAt(3)->AsConstant()->value()).raw();
1435 } 1435 }
1436 1436
1437 if (TypeCheckAsClassEquality(type)) { 1437 if (TypeCheckAsClassEquality(type)) {
1438 LoadClassIdInstr* left_cid = new (Z) LoadClassIdInstr(new (Z) Value(left)); 1438 LoadClassIdInstr* left_cid = new (Z) LoadClassIdInstr(new (Z) Value(left));
1439 InsertBefore(call, left_cid, NULL, FlowGraph::kValue); 1439 InsertBefore(call, left_cid, NULL, FlowGraph::kValue);
1440 const intptr_t type_cid = Class::Handle(Z, type.type_class()).id(); 1440 const intptr_t type_cid = Class::Handle(Z, type.type_class()).id();
1441 ConstantInstr* cid = 1441 ConstantInstr* cid =
1442 flow_graph()->GetConstant(Smi::Handle(Z, Smi::New(type_cid))); 1442 flow_graph()->GetConstant(Smi::Handle(Z, Smi::New(type_cid)));
1443 1443
1444 StrictCompareInstr* check_cid = 1444 StrictCompareInstr* check_cid = new (Z) StrictCompareInstr(
1445 new (Z) StrictCompareInstr(call->token_pos(), Token::kEQ_STRICT, 1445 call->token_pos(), Token::kEQ_STRICT, new (Z) Value(left_cid),
1446 new (Z) Value(left_cid), new (Z) Value(cid), 1446 new (Z) Value(cid), /* number_check = */ false, Thread::kNoDeoptId);
1447 false); // No number check.
1448 ReplaceCall(call, check_cid); 1447 ReplaceCall(call, check_cid);
1449 return; 1448 return;
1450 } 1449 }
1451 1450
1452 if (precompiler_ != NULL) { 1451 if (precompiler_ != NULL) {
1453 TypeRangeCache* cache = precompiler_->type_range_cache(); 1452 TypeRangeCache* cache = precompiler_->type_range_cache();
1454 intptr_t lower_limit, upper_limit; 1453 intptr_t lower_limit, upper_limit;
1455 if (cache != NULL && 1454 if (cache != NULL &&
1456 cache->InstanceOfHasClassRange(type, &lower_limit, &upper_limit)) { 1455 cache->InstanceOfHasClassRange(type, &lower_limit, &upper_limit)) {
1457 // left.instanceof(type) => 1456 // left.instanceof(type) =>
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
2198 FlowGraph::kEffect); 2197 FlowGraph::kEffect);
2199 current_iterator()->RemoveCurrentFromGraph(); 2198 current_iterator()->RemoveCurrentFromGraph();
2200 } 2199 }
2201 } 2200 }
2202 } 2201 }
2203 } 2202 }
2204 2203
2205 #endif // DART_PRECOMPILER 2204 #endif // DART_PRECOMPILER
2206 2205
2207 } // namespace dart 2206 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/branch_optimizer.cc » ('j') | runtime/vm/flow_graph_inliner.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698