Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 <set> | 5 #include <set> |
| 6 | 6 |
| 7 #include "vm/kernel_to_il.h" | 7 #include "vm/kernel_to_il.h" |
| 8 | 8 |
| 9 #include "vm/compiler.h" | 9 #include "vm/compiler.h" |
| 10 #include "vm/intermediate_language.h" | 10 #include "vm/intermediate_language.h" |
| (...skipping 776 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 787 ASSERT(type_arguments_field_offset != dart::Class::kNoTypeArguments); | 787 ASSERT(type_arguments_field_offset != dart::Class::kNoTypeArguments); |
| 788 | 788 |
| 789 instructions += LoadLocal(scopes_->this_variable); | 789 instructions += LoadLocal(scopes_->this_variable); |
| 790 instructions += LoadField(type_arguments_field_offset); | 790 instructions += LoadField(type_arguments_field_offset); |
| 791 } else { | 791 } else { |
| 792 instructions += NullConstant(); | 792 instructions += NullConstant(); |
| 793 } | 793 } |
| 794 return instructions; | 794 return instructions; |
| 795 } | 795 } |
| 796 | 796 |
| 797 // KERNEL_GENERIC_METHODS_UNDONE(sjindel): This seems to work for static | |
|
jensj
2017/08/11 06:24:55
todo?
sjindel
2017/08/14 11:05:49
Done.
| |
| 798 // top-level functions, but probably needs to be revisited when generic methods | |
| 799 // are fully supported in kernel. | |
| 797 Fragment FlowGraphBuilder::LoadFunctionTypeArguments() { | 800 Fragment FlowGraphBuilder::LoadFunctionTypeArguments() { |
| 798 UNIMPLEMENTED(); // TODO(regis) | 801 Fragment instructions; |
| 799 return Fragment(NULL); | 802 ASSERT(parsed_function_->function_type_arguments() != NULL); |
| 803 instructions += LoadLocal(parsed_function_->function_type_arguments()); | |
| 804 return instructions; | |
| 800 } | 805 } |
| 801 | 806 |
| 802 Fragment FlowGraphBuilder::InstantiateType(const AbstractType& type) { | 807 Fragment FlowGraphBuilder::InstantiateType(const AbstractType& type) { |
| 803 Value* function_type_args = Pop(); | 808 Value* function_type_args = Pop(); |
| 804 Value* instantiator_type_args = Pop(); | 809 Value* instantiator_type_args = Pop(); |
| 805 InstantiateTypeInstr* instr = new (Z) InstantiateTypeInstr( | 810 InstantiateTypeInstr* instr = new (Z) InstantiateTypeInstr( |
| 806 TokenPosition::kNoSource, type, instantiator_type_args, | 811 TokenPosition::kNoSource, type, instantiator_type_args, |
| 807 function_type_args, GetNextDeoptId()); | 812 function_type_args, GetNextDeoptId()); |
| 808 Push(instr); | 813 Push(instr); |
| 809 return Fragment(instr); | 814 return Fragment(instr); |
| (...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1279 (function.name() == Symbols::ListFactory().raw())) { | 1284 (function.name() == Symbols::ListFactory().raw())) { |
| 1280 ASSERT(argument_count == 1 || argument_count == 2); | 1285 ASSERT(argument_count == 1 || argument_count == 2); |
| 1281 return (argument_count == 1) ? kGrowableObjectArrayCid : kArrayCid; | 1286 return (argument_count == 1) ? kGrowableObjectArrayCid : kArrayCid; |
| 1282 } | 1287 } |
| 1283 return FactoryRecognizer::ResultCid(function); | 1288 return FactoryRecognizer::ResultCid(function); |
| 1284 } | 1289 } |
| 1285 | 1290 |
| 1286 Fragment FlowGraphBuilder::StaticCall(TokenPosition position, | 1291 Fragment FlowGraphBuilder::StaticCall(TokenPosition position, |
| 1287 const Function& target, | 1292 const Function& target, |
| 1288 intptr_t argument_count, | 1293 intptr_t argument_count, |
| 1289 const Array& argument_names) { | 1294 const Array& argument_names, |
| 1295 intptr_t type_args_count) { | |
| 1290 ArgumentArray arguments = GetArguments(argument_count); | 1296 ArgumentArray arguments = GetArguments(argument_count); |
| 1291 const intptr_t kTypeArgsLen = 0; // Generic static calls not yet supported. | |
| 1292 StaticCallInstr* call = | 1297 StaticCallInstr* call = |
| 1293 new (Z) StaticCallInstr(position, target, kTypeArgsLen, argument_names, | 1298 new (Z) StaticCallInstr(position, target, type_args_count, argument_names, |
| 1294 arguments, ic_data_array_, GetNextDeoptId()); | 1299 arguments, ic_data_array_, GetNextDeoptId()); |
| 1295 const intptr_t list_cid = | 1300 const intptr_t list_cid = |
| 1296 GetResultCidOfListFactory(Z, target, argument_count); | 1301 GetResultCidOfListFactory(Z, target, argument_count); |
| 1297 if (list_cid != kDynamicCid) { | 1302 if (list_cid != kDynamicCid) { |
| 1298 call->set_result_cid(list_cid); | 1303 call->set_result_cid(list_cid); |
| 1299 call->set_is_known_list_constructor(true); | 1304 call->set_is_known_list_constructor(true); |
| 1300 } else if (target.recognized_kind() != MethodRecognizer::kUnknown) { | 1305 } else if (target.recognized_kind() != MethodRecognizer::kUnknown) { |
| 1301 call->set_result_cid(MethodRecognizer::ResultCid(target)); | 1306 call->set_result_cid(MethodRecognizer::ResultCid(target)); |
| 1302 } | 1307 } |
| 1303 Push(call); | 1308 Push(call); |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1564 Value* value = stack_; | 1569 Value* value = stack_; |
| 1565 stack_ = value->next_use(); | 1570 stack_ = value->next_use(); |
| 1566 if (stack_ != NULL) stack_->set_previous_use(NULL); | 1571 if (stack_ != NULL) stack_->set_previous_use(NULL); |
| 1567 | 1572 |
| 1568 value->set_next_use(NULL); | 1573 value->set_next_use(NULL); |
| 1569 value->set_previous_use(NULL); | 1574 value->set_previous_use(NULL); |
| 1570 value->definition()->ClearSSATempIndex(); | 1575 value->definition()->ClearSSATempIndex(); |
| 1571 return value; | 1576 return value; |
| 1572 } | 1577 } |
| 1573 | 1578 |
| 1579 intptr_t FlowGraphBuilder::StackDepth() { | |
|
jensj
2017/08/11 06:24:55
I don't think this method is actually used.
sjindel
2017/08/11 09:21:06
It's not -- I found it useful for debugging, so I
jensj
2017/08/14 06:47:13
While that's fine for developing, I don't think we
sjindel
2017/08/14 11:05:50
Done.
| |
| 1580 intptr_t depth = 0; | |
| 1581 for (Value* value = stack_; value; value = value->next_use()) { | |
| 1582 ++depth; | |
| 1583 } | |
| 1584 return depth; | |
| 1585 } | |
| 1586 | |
| 1574 Fragment FlowGraphBuilder::Drop() { | 1587 Fragment FlowGraphBuilder::Drop() { |
| 1575 ASSERT(stack_ != NULL); | 1588 ASSERT(stack_ != NULL); |
| 1576 Fragment instructions; | 1589 Fragment instructions; |
| 1577 Definition* definition = stack_->definition(); | 1590 Definition* definition = stack_->definition(); |
| 1578 // The SSA renaming implementation doesn't like [LoadLocal]s without a | 1591 // The SSA renaming implementation doesn't like [LoadLocal]s without a |
| 1579 // tempindex. | 1592 // tempindex. |
| 1580 if (definition->HasSSATemp() || definition->IsLoadLocal()) { | 1593 if (definition->HasSSATemp() || definition->IsLoadLocal()) { |
| 1581 instructions <<= new (Z) DropTempsInstr(1, NULL); | 1594 instructions <<= new (Z) DropTempsInstr(1, NULL); |
| 1582 } else { | 1595 } else { |
| 1583 definition->ClearTempIndex(); | 1596 definition->ClearTempIndex(); |
| (...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2374 StreamingFlowGraphBuilder streaming_flow_graph_builder( | 2387 StreamingFlowGraphBuilder streaming_flow_graph_builder( |
| 2375 &helper, zone_, script.kernel_data(), script.kernel_data_size()); | 2388 &helper, zone_, script.kernel_data(), script.kernel_data_size()); |
| 2376 return streaming_flow_graph_builder.GetLineStartsFor( | 2389 return streaming_flow_graph_builder.GetLineStartsFor( |
| 2377 script.kernel_script_index()); | 2390 script.kernel_script_index()); |
| 2378 } | 2391 } |
| 2379 | 2392 |
| 2380 } // namespace kernel | 2393 } // namespace kernel |
| 2381 } // namespace dart | 2394 } // namespace dart |
| 2382 | 2395 |
| 2383 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 2396 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| OLD | NEW |