Commit ea8312ba authored by ager@chromium.org's avatar ager@chromium.org

Reapply: Never use classic code generator.

Crankshaft is now the default on all platforms. This is the first
patch on the way to removing the classic code generator from the
system.

This time with no removal of the crankshaft flag. --nocrankshaft is
not at all the same as --always-full-compiler which I had used instead
for testing. That was what caused timeouts on the buildbots because of
repeated attempts to optimize hot functions. It makes sense to keep
the crankshaft flag in case you want to run only with the full
compiler and with no adaptive compilation.

R=vitalyr@chromium.org

Review URL: http://codereview.chromium.org/6759070

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7486 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 24596cae
...@@ -2351,16 +2351,6 @@ void FullCodeGenerator::VisitCall(Call* expr) { ...@@ -2351,16 +2351,6 @@ void FullCodeGenerator::VisitCall(Call* expr) {
} }
} }
} else { } else {
// Call to some other expression. If the expression is an anonymous
// function literal not called in a loop, mark it as one that should
// also use the fast code generator.
FunctionLiteral* lit = fun->AsFunctionLiteral();
if (lit != NULL &&
lit->name()->Equals(isolate()->heap()->empty_string()) &&
loop_depth() == 0) {
lit->set_try_full_codegen(true);
}
{ PreservePositionScope scope(masm()->positions_recorder()); { PreservePositionScope scope(masm()->positions_recorder());
VisitForStackValue(fun); VisitForStackValue(fun);
} }
......
// Copyright 2010 the V8 project authors. All rights reserved. // Copyright 2011 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are // modification, are permitted provided that the following conditions are
// met: // met:
...@@ -1748,7 +1748,6 @@ class FunctionLiteral: public Expression { ...@@ -1748,7 +1748,6 @@ class FunctionLiteral: public Expression {
contains_loops_(contains_loops), contains_loops_(contains_loops),
function_token_position_(RelocInfo::kNoPosition), function_token_position_(RelocInfo::kNoPosition),
inferred_name_(HEAP->empty_string()), inferred_name_(HEAP->empty_string()),
try_full_codegen_(false),
pretenure_(false) { } pretenure_(false) { }
DECLARE_NODE_TYPE(FunctionLiteral) DECLARE_NODE_TYPE(FunctionLiteral)
...@@ -1786,9 +1785,6 @@ class FunctionLiteral: public Expression { ...@@ -1786,9 +1785,6 @@ class FunctionLiteral: public Expression {
inferred_name_ = inferred_name; inferred_name_ = inferred_name;
} }
bool try_full_codegen() { return try_full_codegen_; }
void set_try_full_codegen(bool flag) { try_full_codegen_ = flag; }
bool pretenure() { return pretenure_; } bool pretenure() { return pretenure_; }
void set_pretenure(bool value) { pretenure_ = value; } void set_pretenure(bool value) { pretenure_ = value; }
...@@ -1808,7 +1804,6 @@ class FunctionLiteral: public Expression { ...@@ -1808,7 +1804,6 @@ class FunctionLiteral: public Expression {
bool strict_mode_; bool strict_mode_;
int function_token_position_; int function_token_position_;
Handle<String> inferred_name_; Handle<String> inferred_name_;
bool try_full_codegen_;
bool pretenure_; bool pretenure_;
}; };
......
// Copyright 2010 the V8 project authors. All rights reserved. // Copyright 2011 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are // modification, are permitted provided that the following conditions are
// met: // met:
...@@ -326,30 +326,9 @@ static bool MakeCode(CompilationInfo* info) { ...@@ -326,30 +326,9 @@ static bool MakeCode(CompilationInfo* info) {
if (Rewriter::Rewrite(info) && Scope::Analyze(info)) { if (Rewriter::Rewrite(info) && Scope::Analyze(info)) {
if (V8::UseCrankshaft()) return MakeCrankshaftCode(info); if (V8::UseCrankshaft()) return MakeCrankshaftCode(info);
// If crankshaft is not supported fall back to full code generator
// Generate code and return it. Code generator selection is governed by // for all compilation.
// which backends are enabled and whether the function is considered return FullCodeGenerator::MakeCode(info);
// run-once code or not.
//
// --full-compiler enables the dedicated backend for code we expect to
// be run once
//
// The normal choice of backend can be overridden with the flags
// --always-full-compiler.
if (Rewriter::Analyze(info)) {
Handle<SharedFunctionInfo> shared = info->shared_info();
bool is_run_once = (shared.is_null())
? info->scope()->is_global_scope()
: (shared->is_toplevel() || shared->try_full_codegen());
bool can_use_full =
FLAG_full_compiler && !info->function()->contains_loops();
if (AlwaysFullCompiler() || (is_run_once && can_use_full)) {
return FullCodeGenerator::MakeCode(info);
} else {
return AssignedVariablesAnalyzer::Analyze(info) &&
CodeGenerator::MakeCode(info);
}
}
} }
return false; return false;
...@@ -721,35 +700,12 @@ Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo(FunctionLiteral* literal, ...@@ -721,35 +700,12 @@ Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo(FunctionLiteral* literal,
if (FLAG_lazy && allow_lazy) { if (FLAG_lazy && allow_lazy) {
Handle<Code> code = info.isolate()->builtins()->LazyCompile(); Handle<Code> code = info.isolate()->builtins()->LazyCompile();
info.SetCode(code); info.SetCode(code);
} else { } else if ((V8::UseCrankshaft() && MakeCrankshaftCode(&info)) ||
if (V8::UseCrankshaft()) { (!V8::UseCrankshaft() && FullCodeGenerator::MakeCode(&info))) {
if (!MakeCrankshaftCode(&info)) {
return Handle<SharedFunctionInfo>::null();
}
} else {
// The bodies of function literals have not yet been visited by the
// AST optimizer/analyzer.
if (!Rewriter::Analyze(&info)) return Handle<SharedFunctionInfo>::null();
bool is_run_once = literal->try_full_codegen();
bool can_use_full = FLAG_full_compiler && !literal->contains_loops();
if (AlwaysFullCompiler() || (is_run_once && can_use_full)) {
if (!FullCodeGenerator::MakeCode(&info)) {
return Handle<SharedFunctionInfo>::null();
}
} else {
// We fall back to the classic V8 code generator.
if (!AssignedVariablesAnalyzer::Analyze(&info) ||
!CodeGenerator::MakeCode(&info)) {
return Handle<SharedFunctionInfo>::null();
}
}
}
ASSERT(!info.code().is_null()); ASSERT(!info.code().is_null());
// Function compilation complete.
scope_info = SerializedScopeInfo::Create(info.scope()); scope_info = SerializedScopeInfo::Create(info.scope());
} else {
return Handle<SharedFunctionInfo>::null();
} }
// Create a shared function info object. // Create a shared function info object.
...@@ -791,7 +747,6 @@ void Compiler::SetFunctionInfo(Handle<SharedFunctionInfo> function_info, ...@@ -791,7 +747,6 @@ void Compiler::SetFunctionInfo(Handle<SharedFunctionInfo> function_info,
function_info->SetThisPropertyAssignmentsInfo( function_info->SetThisPropertyAssignmentsInfo(
lit->has_only_simple_this_property_assignments(), lit->has_only_simple_this_property_assignments(),
*lit->this_property_assignments()); *lit->this_property_assignments());
function_info->set_try_full_codegen(lit->try_full_codegen());
function_info->set_allows_lazy_compilation(lit->AllowsLazyCompilation()); function_info->set_allows_lazy_compilation(lit->AllowsLazyCompilation());
function_info->set_strict_mode(lit->strict_mode()); function_info->set_strict_mode(lit->strict_mode());
} }
......
// Copyright 2010 the V8 project authors. All rights reserved. // Copyright 2011 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are // modification, are permitted provided that the following conditions are
// met: // met:
......
...@@ -2267,15 +2267,6 @@ void FullCodeGenerator::VisitCall(Call* expr) { ...@@ -2267,15 +2267,6 @@ void FullCodeGenerator::VisitCall(Call* expr) {
} }
} }
} else { } else {
// Call to some other expression. If the expression is an anonymous
// function literal not called in a loop, mark it as one that should
// also use the full code generator.
FunctionLiteral* lit = fun->AsFunctionLiteral();
if (lit != NULL &&
lit->name()->Equals(isolate()->heap()->empty_string()) &&
loop_depth() == 0) {
lit->set_try_full_codegen(true);
}
{ PreservePositionScope scope(masm()->positions_recorder()); { PreservePositionScope scope(masm()->positions_recorder());
VisitForStackValue(fun); VisitForStackValue(fun);
} }
......
// Copyright 2010 the V8 project authors. All rights reserved. // Copyright 2011 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are // modification, are permitted provided that the following conditions are
// met: // met:
...@@ -3054,10 +3054,6 @@ BOOL_ACCESSORS(SharedFunctionInfo, start_position_and_type, is_toplevel, ...@@ -3054,10 +3054,6 @@ BOOL_ACCESSORS(SharedFunctionInfo, start_position_and_type, is_toplevel,
BOOL_GETTER(SharedFunctionInfo, compiler_hints, BOOL_GETTER(SharedFunctionInfo, compiler_hints,
has_only_simple_this_property_assignments, has_only_simple_this_property_assignments,
kHasOnlySimpleThisPropertyAssignments) kHasOnlySimpleThisPropertyAssignments)
BOOL_ACCESSORS(SharedFunctionInfo,
compiler_hints,
try_full_codegen,
kTryFullCodegen)
BOOL_ACCESSORS(SharedFunctionInfo, BOOL_ACCESSORS(SharedFunctionInfo,
compiler_hints, compiler_hints,
allows_lazy_compilation, allows_lazy_compilation,
......
// Copyright 2010 the V8 project authors. All rights reserved. // Copyright 2011 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are // modification, are permitted provided that the following conditions are
// met: // met:
...@@ -4259,9 +4259,6 @@ class SharedFunctionInfo: public HeapObject { ...@@ -4259,9 +4259,6 @@ class SharedFunctionInfo: public HeapObject {
// this.x = y; where y is either a constant or refers to an argument. // this.x = y; where y is either a constant or refers to an argument.
inline bool has_only_simple_this_property_assignments(); inline bool has_only_simple_this_property_assignments();
inline bool try_full_codegen();
inline void set_try_full_codegen(bool flag);
// Indicates if this function can be lazy compiled. // Indicates if this function can be lazy compiled.
// This is used to determine if we can safely flush code from a function // This is used to determine if we can safely flush code from a function
// when doing GC if we expect that the function will no longer be used. // when doing GC if we expect that the function will no longer be used.
...@@ -4461,13 +4458,12 @@ class SharedFunctionInfo: public HeapObject { ...@@ -4461,13 +4458,12 @@ class SharedFunctionInfo: public HeapObject {
// Bit positions in compiler_hints. // Bit positions in compiler_hints.
static const int kHasOnlySimpleThisPropertyAssignments = 0; static const int kHasOnlySimpleThisPropertyAssignments = 0;
static const int kTryFullCodegen = 1; static const int kAllowLazyCompilation = 1;
static const int kAllowLazyCompilation = 2; static const int kLiveObjectsMayExist = 2;
static const int kLiveObjectsMayExist = 3; static const int kCodeAgeShift = 3;
static const int kCodeAgeShift = 4;
static const int kCodeAgeMask = 0x7; static const int kCodeAgeMask = 0x7;
static const int kOptimizationDisabled = 7; static const int kOptimizationDisabled = 6;
static const int kStrictModeFunction = 8; static const int kStrictModeFunction = 7;
private: private:
#if V8_HOST_ARCH_32_BIT #if V8_HOST_ARCH_32_BIT
......
// Copyright 2006-2009 the V8 project authors. All rights reserved. // Copyright 2011 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are // modification, are permitted provided that the following conditions are
// met: // met:
......
...@@ -2247,15 +2247,6 @@ void FullCodeGenerator::VisitCall(Call* expr) { ...@@ -2247,15 +2247,6 @@ void FullCodeGenerator::VisitCall(Call* expr) {
} }
} }
} else { } else {
// Call to some other expression. If the expression is an anonymous
// function literal not called in a loop, mark it as one that should
// also use the full code generator.
FunctionLiteral* lit = fun->AsFunctionLiteral();
if (lit != NULL &&
lit->name()->Equals(isolate()->heap()->empty_string()) &&
loop_depth() == 0) {
lit->set_try_full_codegen(true);
}
{ PreservePositionScope scope(masm()->positions_recorder()); { PreservePositionScope scope(masm()->positions_recorder());
VisitForStackValue(fun); VisitForStackValue(fun);
} }
......
...@@ -584,7 +584,9 @@ class TestSuite(object): ...@@ -584,7 +584,9 @@ class TestSuite(object):
# Use this to run several variants of the tests, e.g.: # Use this to run several variants of the tests, e.g.:
# VARIANT_FLAGS = [[], ['--always_compact', '--noflush_code']] # VARIANT_FLAGS = [[], ['--always_compact', '--noflush_code']]
VARIANT_FLAGS = [[], ['--stress-opt', '--always-opt'], ['--nocrankshaft']] VARIANT_FLAGS = [[],
['--stress-opt', '--always-opt'],
['--nocrankshaft']]
class TestRepository(TestSuite): class TestRepository(TestSuite):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment