OLD | NEW |
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/cpu.h" | 9 #include "vm/cpu.h" |
10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
(...skipping 1181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1192 ASSERT(array_cid != kIllegalCid); | 1192 ASSERT(array_cid != kIllegalCid); |
1193 | 1193 |
1194 Definition* array = receiver; | 1194 Definition* array = receiver; |
1195 Definition* index = call->ArgumentAt(1); | 1195 Definition* index = call->ArgumentAt(1); |
1196 Definition* stored_value = call->ArgumentAt(2); | 1196 Definition* stored_value = call->ArgumentAt(2); |
1197 | 1197 |
1198 *entry = new(Z) TargetEntryInstr(flow_graph()->allocate_block_id(), | 1198 *entry = new(Z) TargetEntryInstr(flow_graph()->allocate_block_id(), |
1199 call->GetBlock()->try_index()); | 1199 call->GetBlock()->try_index()); |
1200 (*entry)->InheritDeoptTarget(I, call); | 1200 (*entry)->InheritDeoptTarget(I, call); |
1201 Instruction* cursor = *entry; | 1201 Instruction* cursor = *entry; |
1202 if (FLAG_enable_type_checks) { | 1202 if (I->TypeChecksEnabled()) { |
1203 // Only type check for the value. A type check for the index is not | 1203 // Only type check for the value. A type check for the index is not |
1204 // needed here because we insert a deoptimizing smi-check for the case | 1204 // needed here because we insert a deoptimizing smi-check for the case |
1205 // the index is not a smi. | 1205 // the index is not a smi. |
1206 const AbstractType& value_type = | 1206 const AbstractType& value_type = |
1207 AbstractType::ZoneHandle(Z, target.ParameterTypeAt(2)); | 1207 AbstractType::ZoneHandle(Z, target.ParameterTypeAt(2)); |
1208 Definition* instantiator = NULL; | 1208 Definition* instantiator = NULL; |
1209 Definition* type_args = NULL; | 1209 Definition* type_args = NULL; |
1210 switch (array_cid) { | 1210 switch (array_cid) { |
1211 case kArrayCid: | 1211 case kArrayCid: |
1212 case kGrowableObjectArrayCid: { | 1212 case kGrowableObjectArrayCid: { |
(...skipping 3278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4491 if (!instr->can_pack_into_smi()) | 4491 if (!instr->can_pack_into_smi()) |
4492 instr->set_representation(kUnboxedMint); | 4492 instr->set_representation(kUnboxedMint); |
4493 #endif | 4493 #endif |
4494 } | 4494 } |
4495 | 4495 |
4496 | 4496 |
4497 bool FlowGraphOptimizer::TryInlineInstanceSetter(InstanceCallInstr* instr, | 4497 bool FlowGraphOptimizer::TryInlineInstanceSetter(InstanceCallInstr* instr, |
4498 const ICData& unary_ic_data) { | 4498 const ICData& unary_ic_data) { |
4499 ASSERT((unary_ic_data.NumberOfChecks() > 0) && | 4499 ASSERT((unary_ic_data.NumberOfChecks() > 0) && |
4500 (unary_ic_data.NumArgsTested() == 1)); | 4500 (unary_ic_data.NumArgsTested() == 1)); |
4501 if (FLAG_enable_type_checks) { | 4501 if (I->TypeChecksEnabled()) { |
4502 // Checked mode setters are inlined like normal methods by conventional | 4502 // Checked mode setters are inlined like normal methods by conventional |
4503 // inlining. | 4503 // inlining. |
4504 return false; | 4504 return false; |
4505 } | 4505 } |
4506 | 4506 |
4507 ASSERT(instr->HasICData()); | 4507 ASSERT(instr->HasICData()); |
4508 if (unary_ic_data.NumberOfChecks() == 0) { | 4508 if (unary_ic_data.NumberOfChecks() == 0) { |
4509 // No type feedback collected. | 4509 // No type feedback collected. |
4510 return false; | 4510 return false; |
4511 } | 4511 } |
(...skipping 4096 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8608 | 8608 |
8609 // Insert materializations at environment uses. | 8609 // Insert materializations at environment uses. |
8610 for (intptr_t i = 0; i < exits_collector_.exits().length(); i++) { | 8610 for (intptr_t i = 0; i < exits_collector_.exits().length(); i++) { |
8611 CreateMaterializationAt( | 8611 CreateMaterializationAt( |
8612 exits_collector_.exits()[i], alloc, *slots); | 8612 exits_collector_.exits()[i], alloc, *slots); |
8613 } | 8613 } |
8614 } | 8614 } |
8615 | 8615 |
8616 | 8616 |
8617 } // namespace dart | 8617 } // namespace dart |
OLD | NEW |