[runtime] Remove "don't OSR functions which use arguments" logic.
OSR for functions which use arguments no longer needs to be disabled, since TurboFan handles the case. Bug: Change-Id: I121f1190a142c18f113bd5f875e258812645c43f Reviewed-on: https://chromium-review.googlesource.com/721661 Reviewed-by: Michael Starzinger <mstarzinger@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Commit-Queue: Marja Hölttä <marja@chromium.org> Cr-Commit-Position: refs/heads/master@{#48631}
This commit is contained in:
parent
b0fc24503c
commit
d2bf7ea55b
@ -1554,12 +1554,6 @@ void DeclarationScope::AnalyzePartially(AstNodeFactory* ast_node_factory) {
|
||||
unresolved = copy;
|
||||
}
|
||||
|
||||
// Clear arguments_ if unused. This is used as a signal for optimization.
|
||||
if (arguments_ != nullptr &&
|
||||
!(MustAllocate(arguments_) && !has_arguments_parameter_)) {
|
||||
arguments_ = nullptr;
|
||||
}
|
||||
|
||||
// Migrate function_ to the right Zone.
|
||||
if (function_ != nullptr) {
|
||||
function_ = ast_node_factory->CopyVariable(function_);
|
||||
|
@ -13756,7 +13756,6 @@ void SharedFunctionInfo::InitFromFunctionLiteral(
|
||||
shared_info->set_inferred_name(*lit->inferred_name());
|
||||
shared_info->set_allows_lazy_compilation(lit->AllowsLazyCompilation());
|
||||
shared_info->set_language_mode(lit->language_mode());
|
||||
shared_info->set_uses_arguments(lit->scope()->arguments() != nullptr);
|
||||
// shared_info->set_kind(lit->kind());
|
||||
// FunctionKind must have already been set.
|
||||
DCHECK(lit->kind() == shared_info->kind());
|
||||
|
@ -84,8 +84,6 @@ AbstractCode* SharedFunctionInfo::abstract_code() {
|
||||
|
||||
BIT_FIELD_ACCESSORS(SharedFunctionInfo, compiler_hints, allows_lazy_compilation,
|
||||
SharedFunctionInfo::AllowLazyCompilationBit)
|
||||
BIT_FIELD_ACCESSORS(SharedFunctionInfo, compiler_hints, uses_arguments,
|
||||
SharedFunctionInfo::UsesArgumentsBit)
|
||||
BIT_FIELD_ACCESSORS(SharedFunctionInfo, compiler_hints,
|
||||
has_duplicate_parameters,
|
||||
SharedFunctionInfo::HasDuplicateParametersBit)
|
||||
|
@ -289,9 +289,6 @@ class SharedFunctionInfo : public HeapObject {
|
||||
inline LanguageMode language_mode();
|
||||
inline void set_language_mode(LanguageMode language_mode);
|
||||
|
||||
// False if the function definitely does not allocate an arguments object.
|
||||
DECL_BOOLEAN_ACCESSORS(uses_arguments)
|
||||
|
||||
// True if the function has any duplicated parameter names.
|
||||
DECL_BOOLEAN_ACCESSORS(has_duplicate_parameters)
|
||||
|
||||
@ -467,7 +464,6 @@ class SharedFunctionInfo : public HeapObject {
|
||||
V(FunctionKindBits, FunctionKind, 10, _) \
|
||||
V(HasDuplicateParametersBit, bool, 1, _) \
|
||||
V(AllowLazyCompilationBit, bool, 1, _) \
|
||||
V(UsesArgumentsBit, bool, 1, _) \
|
||||
V(NeedsHomeObjectBit, bool, 1, _) \
|
||||
V(IsDeclarationBit, bool, 1, _) \
|
||||
V(IsAsmWasmBrokenBit, bool, 1, _) \
|
||||
|
@ -123,11 +123,6 @@ void RuntimeProfiler::AttemptOnStackReplacement(JavaScriptFrame* frame,
|
||||
// If the code is not optimizable, don't try OSR.
|
||||
if (shared->optimization_disabled()) return;
|
||||
|
||||
// We are not prepared to do OSR for a function that already has an
|
||||
// allocated arguments object. The optimized code would bypass it for
|
||||
// arguments accesses, which is unsound. Don't try OSR.
|
||||
if (shared->uses_arguments()) return;
|
||||
|
||||
// We're using on-stack replacement: Store new loop nesting level in
|
||||
// BytecodeArray header so that certain back edges in any interpreter frame
|
||||
// for this bytecode will trigger on-stack replacement for that frame.
|
||||
|
@ -211,9 +211,6 @@ RUNTIME_FUNCTION(Runtime_CompileForOnStackReplacement) {
|
||||
DCHECK_EQ(1, args.length());
|
||||
CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
|
||||
|
||||
// We're not prepared to handle a function with arguments object.
|
||||
DCHECK(!function->shared()->uses_arguments());
|
||||
|
||||
// Only reachable when OST is enabled.
|
||||
CHECK(FLAG_use_osr);
|
||||
|
||||
|
17
test/mjsunit/compiler/osr-arguments.js
Normal file
17
test/mjsunit/compiler/osr-arguments.js
Normal file
@ -0,0 +1,17 @@
|
||||
// Copyright 2017 the V8 project authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// Flags: --allow-natives-syntax
|
||||
|
||||
function f1() {
|
||||
var sum = 0;
|
||||
for (var i = 0; i < 1000; i++) {
|
||||
sum += arguments[0] + arguments[1] + arguments[2] + arguments[3];
|
||||
if (i == 18) %OptimizeOsr();
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
let result = f1(1, 1, 2, 3);
|
||||
assertEquals(7000, result);
|
Loading…
Reference in New Issue
Block a user