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

Side by Side Diff: src/runtime/runtime-compiler.cc

Issue 1225683004: [turbofan] Add new JSFrameSpecialization reducer. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Also specialize Parameters as discussed with Jaro. Created 5 years, 5 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 | « src/compiler/pipeline.cc ('k') | tools/gyp/v8.gyp » ('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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/arguments.h" 7 #include "src/arguments.h"
8 #include "src/compiler.h" 8 #include "src/compiler.h"
9 #include "src/deoptimizer.h" 9 #include "src/deoptimizer.h"
10 #include "src/frames.h" 10 #include "src/frames.h"
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 #ifdef DEBUG 212 #ifdef DEBUG
213 DCHECK_EQ(frame->function(), *function); 213 DCHECK_EQ(frame->function(), *function);
214 DCHECK_EQ(frame->LookupCode(), *caller_code); 214 DCHECK_EQ(frame->LookupCode(), *caller_code);
215 DCHECK(caller_code->contains(frame->pc())); 215 DCHECK(caller_code->contains(frame->pc()));
216 #endif // DEBUG 216 #endif // DEBUG
217 217
218 218
219 BailoutId ast_id = caller_code->TranslatePcOffsetToAstId(pc_offset); 219 BailoutId ast_id = caller_code->TranslatePcOffsetToAstId(pc_offset);
220 DCHECK(!ast_id.IsNone()); 220 DCHECK(!ast_id.IsNone());
221 221
222 Compiler::ConcurrencyMode mode = 222 // Disable concurrent OSR for asm.js, to enable frame specialization.
223 isolate->concurrent_osr_enabled() && 223 Compiler::ConcurrencyMode mode = (isolate->concurrent_osr_enabled() &&
224 (function->shared()->ast_node_count() > 512) 224 !function->shared()->asm_function() &&
225 ? Compiler::CONCURRENT 225 function->shared()->ast_node_count() > 512)
226 : Compiler::NOT_CONCURRENT; 226 ? Compiler::CONCURRENT
227 : Compiler::NOT_CONCURRENT;
227 Handle<Code> result = Handle<Code>::null(); 228 Handle<Code> result = Handle<Code>::null();
228 229
229 OptimizedCompileJob* job = NULL; 230 OptimizedCompileJob* job = NULL;
230 if (mode == Compiler::CONCURRENT) { 231 if (mode == Compiler::CONCURRENT) {
231 // Gate the OSR entry with a stack check. 232 // Gate the OSR entry with a stack check.
232 BackEdgeTable::AddStackCheck(caller_code, pc_offset); 233 BackEdgeTable::AddStackCheck(caller_code, pc_offset);
233 // Poll already queued compilation jobs. 234 // Poll already queued compilation jobs.
234 OptimizingCompileDispatcher* dispatcher = 235 OptimizingCompileDispatcher* dispatcher =
235 isolate->optimizing_compile_dispatcher(); 236 isolate->optimizing_compile_dispatcher();
236 if (dispatcher->IsQueuedForOSR(function, ast_id)) { 237 if (dispatcher->IsQueuedForOSR(function, ast_id)) {
(...skipping 14 matching lines...) Expand all
251 function->PrintName(); 252 function->PrintName();
252 PrintF(" at AST id %d]\n", ast_id.ToInt()); 253 PrintF(" at AST id %d]\n", ast_id.ToInt());
253 } 254 }
254 result = Compiler::GetConcurrentlyOptimizedCode(job); 255 result = Compiler::GetConcurrentlyOptimizedCode(job);
255 } else if (IsSuitableForOnStackReplacement(isolate, function)) { 256 } else if (IsSuitableForOnStackReplacement(isolate, function)) {
256 if (FLAG_trace_osr) { 257 if (FLAG_trace_osr) {
257 PrintF("[OSR - Compiling: "); 258 PrintF("[OSR - Compiling: ");
258 function->PrintName(); 259 function->PrintName();
259 PrintF(" at AST id %d]\n", ast_id.ToInt()); 260 PrintF(" at AST id %d]\n", ast_id.ToInt());
260 } 261 }
261 MaybeHandle<Code> maybe_result = 262 MaybeHandle<Code> maybe_result = Compiler::GetOptimizedCode(
262 Compiler::GetOptimizedCode(function, caller_code, mode, ast_id); 263 function, caller_code, mode, ast_id,
264 (mode == Compiler::NOT_CONCURRENT) ? frame : nullptr);
263 if (maybe_result.ToHandle(&result) && 265 if (maybe_result.ToHandle(&result) &&
264 result.is_identical_to(isolate->builtins()->InOptimizationQueue())) { 266 result.is_identical_to(isolate->builtins()->InOptimizationQueue())) {
265 // Optimization is queued. Return to check later. 267 // Optimization is queued. Return to check later.
266 return NULL; 268 return NULL;
267 } 269 }
268 } 270 }
269 271
270 // Revert the patched back edge table, regardless of whether OSR succeeds. 272 // Revert the patched back edge table, regardless of whether OSR succeeds.
271 BackEdgeTable::Revert(isolate, *caller_code); 273 BackEdgeTable::Revert(isolate, *caller_code);
272 274
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 DCHECK(is_valid_language_mode(args.smi_at(3))); 436 DCHECK(is_valid_language_mode(args.smi_at(3)));
435 LanguageMode language_mode = static_cast<LanguageMode>(args.smi_at(3)); 437 LanguageMode language_mode = static_cast<LanguageMode>(args.smi_at(3));
436 DCHECK(args[4]->IsSmi()); 438 DCHECK(args[4]->IsSmi());
437 Handle<SharedFunctionInfo> outer_info(args.at<JSFunction>(2)->shared(), 439 Handle<SharedFunctionInfo> outer_info(args.at<JSFunction>(2)->shared(),
438 isolate); 440 isolate);
439 return CompileGlobalEval(isolate, args.at<String>(1), outer_info, 441 return CompileGlobalEval(isolate, args.at<String>(1), outer_info,
440 language_mode, args.smi_at(4)); 442 language_mode, args.smi_at(4));
441 } 443 }
442 } // namespace internal 444 } // namespace internal
443 } // namespace v8 445 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/pipeline.cc ('k') | tools/gyp/v8.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698