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

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

Issue 1714743002: VM: Separate precompilation-specific code, make flags const. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: fix build after merge Created 4 years, 9 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
« no previous file with comments | « runtime/vm/precompiler.h ('k') | runtime/vm/redundancy_elimination.cc » ('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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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/precompiler.h" 5 #include "vm/precompiler.h"
6 6
7 #include "vm/aot_optimizer.h"
7 #include "vm/assembler.h" 8 #include "vm/assembler.h"
8 #include "vm/ast_printer.h" 9 #include "vm/ast_printer.h"
9 #include "vm/branch_optimizer.h" 10 #include "vm/branch_optimizer.h"
10 #include "vm/cha.h" 11 #include "vm/cha.h"
11 #include "vm/code_generator.h" 12 #include "vm/code_generator.h"
12 #include "vm/code_patcher.h" 13 #include "vm/code_patcher.h"
13 #include "vm/compiler.h" 14 #include "vm/compiler.h"
14 #include "vm/constant_propagator.h" 15 #include "vm/constant_propagator.h"
15 #include "vm/dart_entry.h" 16 #include "vm/dart_entry.h"
16 #include "vm/disassembler.h" 17 #include "vm/disassembler.h"
17 #include "vm/exceptions.h" 18 #include "vm/exceptions.h"
18 #include "vm/flags.h" 19 #include "vm/flags.h"
19 #include "vm/flow_graph.h" 20 #include "vm/flow_graph.h"
20 #include "vm/flow_graph_allocator.h" 21 #include "vm/flow_graph_allocator.h"
21 #include "vm/flow_graph_builder.h" 22 #include "vm/flow_graph_builder.h"
22 #include "vm/flow_graph_compiler.h" 23 #include "vm/flow_graph_compiler.h"
23 #include "vm/flow_graph_inliner.h" 24 #include "vm/flow_graph_inliner.h"
24 #include "vm/flow_graph_optimizer.h"
25 #include "vm/flow_graph_range_analysis.h" 25 #include "vm/flow_graph_range_analysis.h"
26 #include "vm/flow_graph_type_propagator.h" 26 #include "vm/flow_graph_type_propagator.h"
27 #include "vm/hash_table.h" 27 #include "vm/hash_table.h"
28 #include "vm/il_printer.h" 28 #include "vm/il_printer.h"
29 #include "vm/isolate.h" 29 #include "vm/isolate.h"
30 #include "vm/log.h" 30 #include "vm/log.h"
31 #include "vm/longjump.h" 31 #include "vm/longjump.h"
32 #include "vm/object.h" 32 #include "vm/object.h"
33 #include "vm/object_store.h" 33 #include "vm/object_store.h"
34 #include "vm/os.h" 34 #include "vm/os.h"
(...skipping 985 matching lines...) Expand 10 before | Expand all | Expand 10 after
1020 return String::Cast(obj).Hash(); 1020 return String::Cast(obj).Hash();
1021 } 1021 }
1022 static RawObject* NewKey(const String& str) { 1022 static RawObject* NewKey(const String& str) {
1023 return str.raw(); 1023 return str.raw();
1024 } 1024 }
1025 }; 1025 };
1026 1026
1027 typedef UnorderedHashMap<NameFunctionsTraits> Table; 1027 typedef UnorderedHashMap<NameFunctionsTraits> Table;
1028 1028
1029 1029
1030 class FunctionsTraits {
1031 public:
1032 static bool IsMatch(const Object& a, const Object& b) {
1033 Zone* zone = Thread::Current()->zone();
1034 String& a_s = String::Handle(zone);
1035 String& b_s = String::Handle(zone);
1036 a_s = a.IsFunction() ? Function::Cast(a).name() : String::Cast(a).raw();
1037 b_s = b.IsFunction() ? Function::Cast(b).name() : String::Cast(b).raw();
1038 ASSERT(a_s.IsSymbol() && b_s.IsSymbol());
1039 return a_s.raw() == b_s.raw();
1040 }
1041 static uword Hash(const Object& obj) {
1042 if (obj.IsFunction()) {
1043 return String::Handle(Function::Cast(obj).name()).Hash();
1044 } else {
1045 ASSERT(String::Cast(obj).IsSymbol());
1046 return String::Cast(obj).Hash();
1047 }
1048 }
1049 static RawObject* NewKey(const Function& function) {
1050 return function.raw();
1051 }
1052 };
1053
1054 typedef UnorderedHashSet<FunctionsTraits> UniqueFunctionsSet;
1055
1056
1057 static void AddNameToFunctionsTable(Zone* zone, 1030 static void AddNameToFunctionsTable(Zone* zone,
1058 Table* table, 1031 Table* table,
1059 const String& fname, 1032 const String& fname,
1060 const Function& function) { 1033 const Function& function) {
1061 Array& farray = Array::Handle(zone); 1034 Array& farray = Array::Handle(zone);
1062 farray ^= table->InsertNewOrGetValue(fname, Array::empty_array()); 1035 farray ^= table->InsertNewOrGetValue(fname, Array::empty_array());
1063 farray = Array::Grow(farray, farray.Length() + 1); 1036 farray = Array::Grow(farray, farray.Length() + 1);
1064 farray.SetAt(farray.Length() - 1, function); 1037 farray.SetAt(farray.Length() - 1, function);
1065 table->UpdateValue(fname, farray); 1038 table->UpdateValue(fname, farray);
1066 } 1039 }
(...skipping 940 matching lines...) Expand 10 before | Expand all | Expand 10 after
2007 #ifndef PRODUCT 1980 #ifndef PRODUCT
2008 TimelineDurationScope tds(thread(), 1981 TimelineDurationScope tds(thread(),
2009 compiler_timeline, 1982 compiler_timeline,
2010 "OptimizationPasses"); 1983 "OptimizationPasses");
2011 #endif // !PRODUCT 1984 #endif // !PRODUCT
2012 inline_id_to_function.Add(&function); 1985 inline_id_to_function.Add(&function);
2013 // Top scope function has no caller (-1). 1986 // Top scope function has no caller (-1).
2014 caller_inline_id.Add(-1); 1987 caller_inline_id.Add(-1);
2015 CSTAT_TIMER_SCOPE(thread(), graphoptimizer_timer); 1988 CSTAT_TIMER_SCOPE(thread(), graphoptimizer_timer);
2016 1989
2017 FlowGraphOptimizer optimizer(flow_graph, 1990 AotOptimizer optimizer(flow_graph,
2018 use_speculative_inlining, 1991 use_speculative_inlining,
2019 &inlining_black_list); 1992 &inlining_black_list);
2020 optimizer.PopulateWithICData(); 1993 optimizer.PopulateWithICData();
2021 1994
2022 optimizer.ApplyClassIds(); 1995 optimizer.ApplyClassIds();
2023 DEBUG_ASSERT(flow_graph->VerifyUseLists()); 1996 DEBUG_ASSERT(flow_graph->VerifyUseLists());
2024 1997
2025 FlowGraphTypePropagator::Propagate(flow_graph); 1998 FlowGraphTypePropagator::Propagate(flow_graph);
2026 DEBUG_ASSERT(flow_graph->VerifyUseLists()); 1999 DEBUG_ASSERT(flow_graph->VerifyUseLists());
2027 2000
2028 optimizer.ApplyICData(); 2001 optimizer.ApplyICData();
2029 DEBUG_ASSERT(flow_graph->VerifyUseLists()); 2002 DEBUG_ASSERT(flow_graph->VerifyUseLists());
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after
2529 CompilationPipeline::New(thread->zone(), function); 2502 CompilationPipeline::New(thread->zone(), function);
2530 2503
2531 ASSERT(FLAG_precompilation); 2504 ASSERT(FLAG_precompilation);
2532 const bool optimized = function.IsOptimizable(); // False for natives. 2505 const bool optimized = function.IsOptimizable(); // False for natives.
2533 return PrecompileFunctionHelper(pipeline, function, optimized); 2506 return PrecompileFunctionHelper(pipeline, function, optimized);
2534 } 2507 }
2535 2508
2536 #endif // DART_PRECOMPILER 2509 #endif // DART_PRECOMPILER
2537 2510
2538 } // namespace dart 2511 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/precompiler.h ('k') | runtime/vm/redundancy_elimination.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698