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

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

Issue 1128803002: Lazily generate local var descriptors. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/debugger.cc ('k') | runtime/vm/object.h » ('j') | no next file with comments »
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/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/bit_vector.h" 9 #include "vm/bit_vector.h"
10 #include "vm/cha.h" 10 #include "vm/cha.h"
(...skipping 13 matching lines...) Expand all
24 #include "vm/stack_frame.h" 24 #include "vm/stack_frame.h"
25 #include "vm/stub_code.h" 25 #include "vm/stub_code.h"
26 #include "vm/symbols.h" 26 #include "vm/symbols.h"
27 27
28 namespace dart { 28 namespace dart {
29 29
30 DEFINE_FLAG(bool, always_megamorphic_calls, false, 30 DEFINE_FLAG(bool, always_megamorphic_calls, false,
31 "Instance call always as megamorphic."); 31 "Instance call always as megamorphic.");
32 DEFINE_FLAG(bool, trace_inlining_intervals, false, 32 DEFINE_FLAG(bool, trace_inlining_intervals, false,
33 "Inlining interval diagnostics"); 33 "Inlining interval diagnostics");
34 DEFINE_FLAG(bool, eager_info_computation, false,
35 "TRANSITIONAL: Eagerly compute local var descriptors.");
34 DEFINE_FLAG(bool, enable_simd_inline, true, 36 DEFINE_FLAG(bool, enable_simd_inline, true,
35 "Enable inlining of SIMD related method calls."); 37 "Enable inlining of SIMD related method calls.");
36 DEFINE_FLAG(int, min_optimization_counter_threshold, 5000, 38 DEFINE_FLAG(int, min_optimization_counter_threshold, 5000,
37 "The minimum invocation count for a function."); 39 "The minimum invocation count for a function.");
38 DEFINE_FLAG(int, optimization_counter_scale, 2000, 40 DEFINE_FLAG(int, optimization_counter_scale, 2000,
39 "The scale of invocation count, by size of the function."); 41 "The scale of invocation count, by size of the function.");
40 DEFINE_FLAG(bool, source_lines, false, "Emit source line as assembly comment."); 42 DEFINE_FLAG(bool, source_lines, false, "Emit source line as assembly comment.");
41 DEFINE_FLAG(bool, use_megamorphic_stub, true, "Out of line megamorphic lookup"); 43 DEFINE_FLAG(bool, use_megamorphic_stub, true, "Out of line megamorphic lookup");
42 44
43 DECLARE_FLAG(bool, code_comments); 45 DECLARE_FLAG(bool, code_comments);
(...skipping 875 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 921
920 void FlowGraphCompiler::FinalizeVarDescriptors(const Code& code) { 922 void FlowGraphCompiler::FinalizeVarDescriptors(const Code& code) {
921 if (code.is_optimized()) { 923 if (code.is_optimized()) {
922 // Optimized code does not need variable descriptors. They are 924 // Optimized code does not need variable descriptors. They are
923 // only stored in the unoptimized version. 925 // only stored in the unoptimized version.
924 code.set_var_descriptors(Object::empty_var_descriptors()); 926 code.set_var_descriptors(Object::empty_var_descriptors());
925 return; 927 return;
926 } 928 }
927 LocalVarDescriptors& var_descs = LocalVarDescriptors::Handle(); 929 LocalVarDescriptors& var_descs = LocalVarDescriptors::Handle();
928 if (parsed_function().node_sequence() == NULL) { 930 if (parsed_function().node_sequence() == NULL) {
931 // TODO(srdjan): Implement lazy local var descriptors if Irregexp functions.
929 ASSERT(flow_graph().IsIrregexpFunction()); 932 ASSERT(flow_graph().IsIrregexpFunction());
930 var_descs = LocalVarDescriptors::New(1); 933 var_descs = LocalVarDescriptors::New(1);
931 RawLocalVarDescriptors::VarInfo info; 934 RawLocalVarDescriptors::VarInfo info;
932 info.set_kind(RawLocalVarDescriptors::kSavedCurrentContext); 935 info.set_kind(RawLocalVarDescriptors::kSavedCurrentContext);
933 info.scope_id = 0; 936 info.scope_id = 0;
934 info.begin_pos = 0; 937 info.begin_pos = 0;
935 info.end_pos = 0; 938 info.end_pos = 0;
936 info.set_index(parsed_function().current_context_var()->index()); 939 info.set_index(parsed_function().current_context_var()->index());
937 var_descs.SetVar(0, Symbols::CurrentContextVar(), &info); 940 var_descs.SetVar(0, Symbols::CurrentContextVar(), &info);
938 } else { 941 } else {
939 var_descs = 942 if (FLAG_eager_info_computation) {
940 parsed_function_.node_sequence()->scope()->GetVarDescriptors( 943 var_descs =
941 parsed_function_.function()); 944 parsed_function_.node_sequence()->scope()->GetVarDescriptors(
945 parsed_function_.function());
946 }
942 } 947 }
943 code.set_var_descriptors(var_descs); 948 code.set_var_descriptors(var_descs);
944 } 949 }
945 950
946 951
947 void FlowGraphCompiler::FinalizeStaticCallTargetsTable(const Code& code) { 952 void FlowGraphCompiler::FinalizeStaticCallTargetsTable(const Code& code) {
948 ASSERT(code.static_calls_target_table() == Array::null()); 953 ASSERT(code.static_calls_target_table() == Array::null());
949 code.set_static_calls_target_table( 954 code.set_static_calls_target_table(
950 Array::Handle(Array::MakeArray(static_calls_target_table_))); 955 Array::Handle(Array::MakeArray(static_calls_target_table_)));
951 } 956 }
(...skipping 769 matching lines...) Expand 10 before | Expand all | Expand 10 after
1721 1726
1722 1727
1723 void FlowGraphCompiler::FrameStateClear() { 1728 void FlowGraphCompiler::FrameStateClear() {
1724 ASSERT(!is_optimizing()); 1729 ASSERT(!is_optimizing());
1725 frame_state_.TruncateTo(0); 1730 frame_state_.TruncateTo(0);
1726 } 1731 }
1727 #endif 1732 #endif
1728 1733
1729 1734
1730 } // namespace dart 1735 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/debugger.cc ('k') | runtime/vm/object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698