OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/compiler.h" | 5 #include "src/compiler.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "src/ast/ast-numbering.h" | 9 #include "src/ast/ast-numbering.h" |
10 #include "src/ast/prettyprinter.h" | 10 #include "src/ast/prettyprinter.h" |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 bool CompilationInfo::has_shared_info() const { | 108 bool CompilationInfo::has_shared_info() const { |
109 return parse_info_ && !parse_info_->shared_info().is_null(); | 109 return parse_info_ && !parse_info_->shared_info().is_null(); |
110 } | 110 } |
111 | 111 |
112 | 112 |
113 bool CompilationInfo::has_context() const { | 113 bool CompilationInfo::has_context() const { |
114 return parse_info_ && !parse_info_->context().is_null(); | 114 return parse_info_ && !parse_info_->context().is_null(); |
115 } | 115 } |
116 | 116 |
117 | 117 |
118 bool CompilationInfo::has_scope() const { | |
119 return parse_info_ && parse_info_->scope() != nullptr; | |
120 } | |
121 | |
122 | |
123 CompilationInfo::CompilationInfo(ParseInfo* parse_info) | 118 CompilationInfo::CompilationInfo(ParseInfo* parse_info) |
124 : CompilationInfo(parse_info, nullptr, Code::ComputeFlags(Code::FUNCTION), | 119 : CompilationInfo(parse_info, nullptr, Code::ComputeFlags(Code::FUNCTION), |
125 BASE, parse_info->isolate(), parse_info->zone()) { | 120 BASE, parse_info->isolate(), parse_info->zone()) { |
126 // Compiling for the snapshot typically results in different code than | 121 // Compiling for the snapshot typically results in different code than |
127 // compiling later on. This means that code recompiled with deoptimization | 122 // compiling later on. This means that code recompiled with deoptimization |
128 // support won't be "equivalent" (as defined by SharedFunctionInfo:: | 123 // support won't be "equivalent" (as defined by SharedFunctionInfo:: |
129 // EnableDeoptimizationSupport), so it will replace the old code and all | 124 // EnableDeoptimizationSupport), so it will replace the old code and all |
130 // its type feedback. To avoid this, always compile functions in the snapshot | 125 // its type feedback. To avoid this, always compile functions in the snapshot |
131 // with deoptimization support. | 126 // with deoptimization support. |
132 if (isolate_->serializer_enabled()) EnableDeoptimizationSupport(); | 127 if (isolate_->serializer_enabled()) EnableDeoptimizationSupport(); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 delete deferred_handles_; | 169 delete deferred_handles_; |
175 #ifdef DEBUG | 170 #ifdef DEBUG |
176 // Check that no dependent maps have been added or added dependent maps have | 171 // Check that no dependent maps have been added or added dependent maps have |
177 // been rolled back or committed. | 172 // been rolled back or committed. |
178 DCHECK(dependencies()->IsEmpty()); | 173 DCHECK(dependencies()->IsEmpty()); |
179 #endif // DEBUG | 174 #endif // DEBUG |
180 } | 175 } |
181 | 176 |
182 | 177 |
183 int CompilationInfo::num_parameters() const { | 178 int CompilationInfo::num_parameters() const { |
184 return has_scope() ? scope()->num_parameters() : parameter_count_; | 179 return !IsStub() ? scope()->num_parameters() : parameter_count_; |
185 } | 180 } |
186 | 181 |
187 | 182 |
188 int CompilationInfo::num_parameters_including_this() const { | 183 int CompilationInfo::num_parameters_including_this() const { |
189 return num_parameters() + (is_this_defined() ? 1 : 0); | 184 return num_parameters() + (is_this_defined() ? 1 : 0); |
190 } | 185 } |
191 | 186 |
192 | 187 |
193 bool CompilationInfo::is_this_defined() const { return !IsStub(); } | 188 bool CompilationInfo::is_this_defined() const { return !IsStub(); } |
194 | 189 |
195 | 190 |
196 int CompilationInfo::num_heap_slots() const { | |
197 return has_scope() ? scope()->num_heap_slots() : 0; | |
198 } | |
199 | |
200 | |
201 // Primitive functions are unlikely to be picked up by the stack-walking | 191 // Primitive functions are unlikely to be picked up by the stack-walking |
202 // profiler, so they trigger their own optimization when they're called | 192 // profiler, so they trigger their own optimization when they're called |
203 // for the SharedFunctionInfo::kCallsUntilPrimitiveOptimization-th time. | 193 // for the SharedFunctionInfo::kCallsUntilPrimitiveOptimization-th time. |
204 bool CompilationInfo::ShouldSelfOptimize() { | 194 bool CompilationInfo::ShouldSelfOptimize() { |
205 return FLAG_crankshaft && | 195 return FLAG_crankshaft && |
206 !(literal()->flags() & AstProperties::kDontSelfOptimize) && | 196 !(literal()->flags() & AstProperties::kDontSelfOptimize) && |
207 !literal()->dont_optimize() && | 197 !literal()->dont_optimize() && |
208 literal()->scope()->AllowsLazyCompilation() && | 198 literal()->scope()->AllowsLazyCompilation() && |
209 (!has_shared_info() || !shared_info()->optimization_disabled()); | 199 (!has_shared_info() || !shared_info()->optimization_disabled()); |
210 } | 200 } |
(...skipping 1179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1390 Zone zone(shared->GetIsolate()->allocator()); | 1380 Zone zone(shared->GetIsolate()->allocator()); |
1391 ParseInfo parse_info(&zone, shared); | 1381 ParseInfo parse_info(&zone, shared); |
1392 CompilationInfo info(&parse_info); | 1382 CompilationInfo info(&parse_info); |
1393 return CompileForDebugging(&info); | 1383 return CompileForDebugging(&info); |
1394 } | 1384 } |
1395 | 1385 |
1396 // TODO(turbofan): In the future, unoptimized code with deopt support could | 1386 // TODO(turbofan): In the future, unoptimized code with deopt support could |
1397 // be generated lazily once deopt is triggered. | 1387 // be generated lazily once deopt is triggered. |
1398 bool Compiler::EnsureDeoptimizationSupport(CompilationInfo* info) { | 1388 bool Compiler::EnsureDeoptimizationSupport(CompilationInfo* info) { |
1399 DCHECK_NOT_NULL(info->literal()); | 1389 DCHECK_NOT_NULL(info->literal()); |
1400 DCHECK(info->has_scope()); | 1390 DCHECK_NOT_NULL(info->scope()); |
1401 Handle<SharedFunctionInfo> shared = info->shared_info(); | 1391 Handle<SharedFunctionInfo> shared = info->shared_info(); |
1402 if (!shared->has_deoptimization_support()) { | 1392 if (!shared->has_deoptimization_support()) { |
1403 // TODO(titzer): just reuse the ParseInfo for the unoptimized compile. | 1393 // TODO(titzer): just reuse the ParseInfo for the unoptimized compile. |
1404 CompilationInfoWithZone unoptimized(info->closure()); | 1394 CompilationInfoWithZone unoptimized(info->closure()); |
1405 // Note that we use the same AST that we will use for generating the | 1395 // Note that we use the same AST that we will use for generating the |
1406 // optimized code. | 1396 // optimized code. |
1407 ParseInfo* parse_info = unoptimized.parse_info(); | 1397 ParseInfo* parse_info = unoptimized.parse_info(); |
1408 parse_info->set_literal(info->literal()); | 1398 parse_info->set_literal(info->literal()); |
1409 parse_info->set_scope(info->scope()); | 1399 parse_info->set_scope(info->scope()); |
1410 parse_info->set_context(info->context()); | 1400 parse_info->set_context(info->context()); |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1908 MaybeHandle<Code> code; | 1898 MaybeHandle<Code> code; |
1909 if (cached.code != nullptr) code = handle(cached.code); | 1899 if (cached.code != nullptr) code = handle(cached.code); |
1910 Handle<Context> native_context(function->context()->native_context()); | 1900 Handle<Context> native_context(function->context()->native_context()); |
1911 SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code, | 1901 SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code, |
1912 literals, BailoutId::None()); | 1902 literals, BailoutId::None()); |
1913 } | 1903 } |
1914 } | 1904 } |
1915 | 1905 |
1916 } // namespace internal | 1906 } // namespace internal |
1917 } // namespace v8 | 1907 } // namespace v8 |
OLD | NEW |