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/globals.h" // Needed here to get TARGET_ARCH_XXX. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_XXX. |
6 | 6 |
7 #include "vm/flow_graph_compiler.h" | 7 #include "vm/flow_graph_compiler.h" |
8 | 8 |
9 #include "vm/cha.h" | 9 #include "vm/cha.h" |
10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 float32x4_class_(Class::ZoneHandle( | 96 float32x4_class_(Class::ZoneHandle( |
97 isolate_->object_store()->float32x4_class())), | 97 isolate_->object_store()->float32x4_class())), |
98 float64x2_class_(Class::ZoneHandle( | 98 float64x2_class_(Class::ZoneHandle( |
99 isolate_->object_store()->float64x2_class())), | 99 isolate_->object_store()->float64x2_class())), |
100 int32x4_class_(Class::ZoneHandle( | 100 int32x4_class_(Class::ZoneHandle( |
101 isolate_->object_store()->int32x4_class())), | 101 isolate_->object_store()->int32x4_class())), |
102 list_class_(Class::ZoneHandle( | 102 list_class_(Class::ZoneHandle( |
103 Library::Handle(Library::CoreLibrary()). | 103 Library::Handle(Library::CoreLibrary()). |
104 LookupClass(Symbols::List()))), | 104 LookupClass(Symbols::List()))), |
105 parallel_move_resolver_(this), | 105 parallel_move_resolver_(this), |
106 pending_deoptimization_env_(NULL) { | 106 pending_deoptimization_env_(NULL), |
| 107 entry_patch_pc_offset_(Code::kInvalidPc), |
| 108 patch_code_pc_offset_(Code::kInvalidPc), |
| 109 lazy_deopt_pc_offset_(Code::kInvalidPc) { |
107 ASSERT(assembler != NULL); | 110 ASSERT(assembler != NULL); |
108 ASSERT(!list_class_.IsNull()); | 111 ASSERT(!list_class_.IsNull()); |
109 } | 112 } |
110 | 113 |
111 | 114 |
112 void FlowGraphCompiler::InitCompiler() { | 115 void FlowGraphCompiler::InitCompiler() { |
113 pc_descriptors_list_ = new DescriptorList(64); | 116 pc_descriptors_list_ = new DescriptorList(64); |
114 exception_handlers_list_ = new ExceptionHandlerList(); | 117 exception_handlers_list_ = new ExceptionHandlerList(); |
115 block_info_.Clear(); | 118 block_info_.Clear(); |
116 // Conservative detection of leaf routines used to remove the stack check | 119 // Conservative detection of leaf routines used to remove the stack check |
(...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
693 code.set_exception_handlers(handlers); | 696 code.set_exception_handlers(handlers); |
694 } | 697 } |
695 | 698 |
696 | 699 |
697 void FlowGraphCompiler::FinalizePcDescriptors(const Code& code) { | 700 void FlowGraphCompiler::FinalizePcDescriptors(const Code& code) { |
698 ASSERT(pc_descriptors_list_ != NULL); | 701 ASSERT(pc_descriptors_list_ != NULL); |
699 const PcDescriptors& descriptors = PcDescriptors::Handle( | 702 const PcDescriptors& descriptors = PcDescriptors::Handle( |
700 pc_descriptors_list_->FinalizePcDescriptors(code.EntryPoint())); | 703 pc_descriptors_list_->FinalizePcDescriptors(code.EntryPoint())); |
701 if (!is_optimizing_) descriptors.Verify(parsed_function_.function()); | 704 if (!is_optimizing_) descriptors.Verify(parsed_function_.function()); |
702 code.set_pc_descriptors(descriptors); | 705 code.set_pc_descriptors(descriptors); |
| 706 code.set_entry_patch_pc_offset(entry_patch_pc_offset_); |
| 707 code.set_patch_code_pc_offset(patch_code_pc_offset_); |
| 708 code.set_lazy_deopt_pc_offset(lazy_deopt_pc_offset_); |
703 } | 709 } |
704 | 710 |
705 | 711 |
706 void FlowGraphCompiler::FinalizeDeoptInfo(const Code& code) { | 712 void FlowGraphCompiler::FinalizeDeoptInfo(const Code& code) { |
707 // For functions with optional arguments, all incoming arguments are copied | 713 // For functions with optional arguments, all incoming arguments are copied |
708 // to spill slots. The deoptimization environment does not track them. | 714 // to spill slots. The deoptimization environment does not track them. |
709 const Function& function = parsed_function().function(); | 715 const Function& function = parsed_function().function(); |
710 const intptr_t incoming_arg_count = | 716 const intptr_t incoming_arg_count = |
711 function.HasOptionalParameters() ? 0 : function.num_fixed_parameters(); | 717 function.HasOptionalParameters() ? 0 : function.num_fixed_parameters(); |
712 DeoptInfoBuilder builder(isolate(), incoming_arg_count); | 718 DeoptInfoBuilder builder(isolate(), incoming_arg_count); |
(...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1297 | 1303 |
1298 for (int i = 0; i < len; i++) { | 1304 for (int i = 0; i < len; i++) { |
1299 sorted->Add(CidTarget(ic_data.GetReceiverClassIdAt(i), | 1305 sorted->Add(CidTarget(ic_data.GetReceiverClassIdAt(i), |
1300 &Function::ZoneHandle(ic_data.GetTargetAt(i)), | 1306 &Function::ZoneHandle(ic_data.GetTargetAt(i)), |
1301 ic_data.GetCountAt(i))); | 1307 ic_data.GetCountAt(i))); |
1302 } | 1308 } |
1303 sorted->Sort(HighestCountFirst); | 1309 sorted->Sort(HighestCountFirst); |
1304 } | 1310 } |
1305 | 1311 |
1306 } // namespace dart | 1312 } // namespace dart |
OLD | NEW |