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

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

Issue 1162033005: Fix http://dartbug.com/23578: (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Update to ToT. Created 5 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
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/flow_graph_optimizer.h" 5 #include "vm/flow_graph_optimizer.h"
6 6
7 #include "vm/bit_vector.h" 7 #include "vm/bit_vector.h"
8 #include "vm/cha.h" 8 #include "vm/cha.h"
9 #include "vm/compiler.h" 9 #include "vm/compiler.h"
10 #include "vm/cpu.h" 10 #include "vm/cpu.h"
(...skipping 1213 matching lines...) Expand 10 before | Expand all | Expand 10 after
1224 ASSERT(array_cid != kIllegalCid); 1224 ASSERT(array_cid != kIllegalCid);
1225 1225
1226 Definition* array = receiver; 1226 Definition* array = receiver;
1227 Definition* index = call->ArgumentAt(1); 1227 Definition* index = call->ArgumentAt(1);
1228 Definition* stored_value = call->ArgumentAt(2); 1228 Definition* stored_value = call->ArgumentAt(2);
1229 1229
1230 *entry = new(Z) TargetEntryInstr(flow_graph()->allocate_block_id(), 1230 *entry = new(Z) TargetEntryInstr(flow_graph()->allocate_block_id(),
1231 call->GetBlock()->try_index()); 1231 call->GetBlock()->try_index());
1232 (*entry)->InheritDeoptTarget(Z, call); 1232 (*entry)->InheritDeoptTarget(Z, call);
1233 Instruction* cursor = *entry; 1233 Instruction* cursor = *entry;
1234 if (I->TypeChecksEnabled()) { 1234 if (I->flags().type_checks()) {
1235 // Only type check for the value. A type check for the index is not 1235 // Only type check for the value. A type check for the index is not
1236 // needed here because we insert a deoptimizing smi-check for the case 1236 // needed here because we insert a deoptimizing smi-check for the case
1237 // the index is not a smi. 1237 // the index is not a smi.
1238 const AbstractType& value_type = 1238 const AbstractType& value_type =
1239 AbstractType::ZoneHandle(Z, target.ParameterTypeAt(2)); 1239 AbstractType::ZoneHandle(Z, target.ParameterTypeAt(2));
1240 Definition* instantiator = NULL; 1240 Definition* instantiator = NULL;
1241 Definition* type_args = NULL; 1241 Definition* type_args = NULL;
1242 switch (array_cid) { 1242 switch (array_cid) {
1243 case kArrayCid: 1243 case kArrayCid:
1244 case kGrowableObjectArrayCid: { 1244 case kGrowableObjectArrayCid: {
(...skipping 3318 matching lines...) Expand 10 before | Expand all | Expand 10 after
4563 if (!instr->can_pack_into_smi()) 4563 if (!instr->can_pack_into_smi())
4564 instr->set_representation(kUnboxedMint); 4564 instr->set_representation(kUnboxedMint);
4565 #endif 4565 #endif
4566 } 4566 }
4567 4567
4568 4568
4569 bool FlowGraphOptimizer::TryInlineInstanceSetter(InstanceCallInstr* instr, 4569 bool FlowGraphOptimizer::TryInlineInstanceSetter(InstanceCallInstr* instr,
4570 const ICData& unary_ic_data) { 4570 const ICData& unary_ic_data) {
4571 ASSERT((unary_ic_data.NumberOfChecks() > 0) && 4571 ASSERT((unary_ic_data.NumberOfChecks() > 0) &&
4572 (unary_ic_data.NumArgsTested() == 1)); 4572 (unary_ic_data.NumArgsTested() == 1));
4573 if (I->TypeChecksEnabled()) { 4573 if (I->flags().type_checks()) {
4574 // Checked mode setters are inlined like normal methods by conventional 4574 // Checked mode setters are inlined like normal methods by conventional
4575 // inlining. 4575 // inlining.
4576 return false; 4576 return false;
4577 } 4577 }
4578 4578
4579 ASSERT(instr->HasICData()); 4579 ASSERT(instr->HasICData());
4580 if (unary_ic_data.NumberOfChecks() == 0) { 4580 if (unary_ic_data.NumberOfChecks() == 0) {
4581 // No type feedback collected. 4581 // No type feedback collected.
4582 return false; 4582 return false;
4583 } 4583 }
(...skipping 4083 matching lines...) Expand 10 before | Expand all | Expand 10 after
8667 8667
8668 // Insert materializations at environment uses. 8668 // Insert materializations at environment uses.
8669 for (intptr_t i = 0; i < exits_collector_.exits().length(); i++) { 8669 for (intptr_t i = 0; i < exits_collector_.exits().length(); i++) {
8670 CreateMaterializationAt( 8670 CreateMaterializationAt(
8671 exits_collector_.exits()[i], alloc, *slots); 8671 exits_collector_.exits()[i], alloc, *slots);
8672 } 8672 }
8673 } 8673 }
8674 8674
8675 8675
8676 } // namespace dart 8676 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698