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

Unified Diff: src/ast-numbering.cc

Issue 668143003: Move BailoutReason and flags computation to post-pass (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebased Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/ast.cc ('k') | src/compiler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast-numbering.cc
diff --git a/src/ast-numbering.cc b/src/ast-numbering.cc
index 8994ac8c78c7ca1a26d1f03fb5fb04114323aaff..3894492a0205f3224246ce90a2458bf0809c4b1d 100644
--- a/src/ast-numbering.cc
+++ b/src/ast-numbering.cc
@@ -16,7 +16,10 @@ namespace internal {
class AstNumberingVisitor FINAL : public AstVisitor {
public:
explicit AstNumberingVisitor(Zone* zone)
- : AstVisitor(), next_id_(BailoutId::FirstUsable().ToInt()) {
+ : AstVisitor(),
+ next_id_(BailoutId::FirstUsable().ToInt()),
+ dont_crankshaft_reason_(kNoReason),
+ dont_turbofan_reason_(kNoReason) {
InitializeAstVisitor(zone);
}
@@ -40,9 +43,36 @@ class AstNumberingVisitor FINAL : public AstVisitor {
}
void IncrementNodeCount() { properties_.add_node_count(1); }
+ void DisableCrankshaft(BailoutReason reason) {
+ dont_crankshaft_reason_ = reason;
+ properties_.flags()->Add(kDontSelfOptimize);
+ }
+ // TODO(turbofan): Remove the dont_turbofan_reason once no nodes are
+ // DontTurbofanNode. That set of nodes must be kept in sync with
+ // Pipeline::GenerateCode.
+ void DisableTurbofan(BailoutReason reason) {
+ dont_crankshaft_reason_ = reason;
+ dont_turbofan_reason_ = reason;
+ DisableSelfOptimization();
+ }
+ void DisableSelfOptimization() {
+ properties_.flags()->Add(kDontSelfOptimize);
+ }
+ void DisableCaching(BailoutReason reason) {
+ dont_crankshaft_reason_ = reason;
+ DisableSelfOptimization();
+ properties_.flags()->Add(kDontCache);
+ }
+
+ BailoutReason dont_optimize_reason() const {
+ return (dont_turbofan_reason_ != kNoReason) ? dont_turbofan_reason_
+ : dont_crankshaft_reason_;
+ }
int next_id_;
AstProperties properties_;
+ BailoutReason dont_crankshaft_reason_;
+ BailoutReason dont_turbofan_reason_;
DEFINE_AST_VISITOR_SUBCLASS_MEMBERS();
DISALLOW_COPY_AND_ASSIGN(AstNumberingVisitor);
@@ -57,12 +87,14 @@ void AstNumberingVisitor::VisitVariableDeclaration(VariableDeclaration* node) {
void AstNumberingVisitor::VisitExportDeclaration(ExportDeclaration* node) {
IncrementNodeCount();
+ DisableCrankshaft(kExportDeclaration);
VisitVariableProxy(node->proxy());
}
void AstNumberingVisitor::VisitModuleUrl(ModuleUrl* node) {
IncrementNodeCount();
+ DisableCrankshaft(kModuleUrl);
}
@@ -83,6 +115,7 @@ void AstNumberingVisitor::VisitBreakStatement(BreakStatement* node) {
void AstNumberingVisitor::VisitDebuggerStatement(DebuggerStatement* node) {
IncrementNodeCount();
+ DisableCrankshaft(kDebuggerStatement);
node->set_base_id(ReserveIdRange(DebuggerStatement::num_ids()));
}
@@ -90,6 +123,7 @@ void AstNumberingVisitor::VisitDebuggerStatement(DebuggerStatement* node) {
void AstNumberingVisitor::VisitNativeFunctionLiteral(
NativeFunctionLiteral* node) {
IncrementNodeCount();
+ DisableCrankshaft(kNativeFunctionLiteral);
node->set_base_id(ReserveIdRange(NativeFunctionLiteral::num_ids()));
}
@@ -108,6 +142,9 @@ void AstNumberingVisitor::VisitRegExpLiteral(RegExpLiteral* node) {
void AstNumberingVisitor::VisitVariableProxy(VariableProxy* node) {
IncrementNodeCount();
+ if (node->var()->IsLookupSlot()) {
+ DisableCrankshaft(kReferenceToAVariableWhichRequiresDynamicLookup);
+ }
node->set_base_id(ReserveIdRange(VariableProxy::num_ids()));
}
@@ -120,6 +157,7 @@ void AstNumberingVisitor::VisitThisFunction(ThisFunction* node) {
void AstNumberingVisitor::VisitSuperReference(SuperReference* node) {
IncrementNodeCount();
+ DisableTurbofan(kSuperReference);
node->set_base_id(ReserveIdRange(SuperReference::num_ids()));
Visit(node->this_var());
}
@@ -127,6 +165,7 @@ void AstNumberingVisitor::VisitSuperReference(SuperReference* node) {
void AstNumberingVisitor::VisitModuleDeclaration(ModuleDeclaration* node) {
IncrementNodeCount();
+ DisableCrankshaft(kModuleDeclaration);
VisitVariableProxy(node->proxy());
Visit(node->module());
}
@@ -134,6 +173,7 @@ void AstNumberingVisitor::VisitModuleDeclaration(ModuleDeclaration* node) {
void AstNumberingVisitor::VisitImportDeclaration(ImportDeclaration* node) {
IncrementNodeCount();
+ DisableCrankshaft(kImportDeclaration);
VisitVariableProxy(node->proxy());
Visit(node->module());
}
@@ -141,18 +181,21 @@ void AstNumberingVisitor::VisitImportDeclaration(ImportDeclaration* node) {
void AstNumberingVisitor::VisitModuleVariable(ModuleVariable* node) {
IncrementNodeCount();
+ DisableCrankshaft(kModuleVariable);
Visit(node->proxy());
}
void AstNumberingVisitor::VisitModulePath(ModulePath* node) {
IncrementNodeCount();
+ DisableCrankshaft(kModulePath);
Visit(node->module());
}
void AstNumberingVisitor::VisitModuleStatement(ModuleStatement* node) {
IncrementNodeCount();
+ DisableCrankshaft(kModuleStatement);
Visit(node->body());
}
@@ -171,6 +214,7 @@ void AstNumberingVisitor::VisitReturnStatement(ReturnStatement* node) {
void AstNumberingVisitor::VisitYield(Yield* node) {
IncrementNodeCount();
+ DisableCrankshaft(kYield);
node->set_base_id(ReserveIdRange(Yield::num_ids()));
Visit(node->generator_object());
Visit(node->expression());
@@ -215,12 +259,17 @@ void AstNumberingVisitor::VisitFunctionDeclaration(FunctionDeclaration* node) {
void AstNumberingVisitor::VisitModuleLiteral(ModuleLiteral* node) {
IncrementNodeCount();
+ DisableCaching(kModuleLiteral);
VisitBlock(node->body());
}
void AstNumberingVisitor::VisitCallRuntime(CallRuntime* node) {
IncrementNodeCount();
+ if (node->is_jsruntime()) {
+ // Don't try to optimize JS runtime calls because we bailout on them.
+ DisableCrankshaft(kCallToAJavaScriptRuntimeFunction);
+ }
node->set_base_id(ReserveIdRange(CallRuntime::num_ids()));
VisitArguments(node->arguments());
}
@@ -228,6 +277,7 @@ void AstNumberingVisitor::VisitCallRuntime(CallRuntime* node) {
void AstNumberingVisitor::VisitWithStatement(WithStatement* node) {
IncrementNodeCount();
+ DisableCrankshaft(kWithStatement);
Visit(node->expression());
Visit(node->statement());
}
@@ -235,6 +285,7 @@ void AstNumberingVisitor::VisitWithStatement(WithStatement* node) {
void AstNumberingVisitor::VisitDoWhileStatement(DoWhileStatement* node) {
IncrementNodeCount();
+ DisableSelfOptimization();
node->set_base_id(ReserveIdRange(DoWhileStatement::num_ids()));
Visit(node->body());
Visit(node->cond());
@@ -243,6 +294,7 @@ void AstNumberingVisitor::VisitDoWhileStatement(DoWhileStatement* node) {
void AstNumberingVisitor::VisitWhileStatement(WhileStatement* node) {
IncrementNodeCount();
+ DisableSelfOptimization();
node->set_base_id(ReserveIdRange(WhileStatement::num_ids()));
Visit(node->cond());
Visit(node->body());
@@ -251,6 +303,7 @@ void AstNumberingVisitor::VisitWhileStatement(WhileStatement* node) {
void AstNumberingVisitor::VisitTryCatchStatement(TryCatchStatement* node) {
IncrementNodeCount();
+ DisableTurbofan(kTryCatchStatement);
Visit(node->try_block());
Visit(node->catch_block());
}
@@ -258,6 +311,7 @@ void AstNumberingVisitor::VisitTryCatchStatement(TryCatchStatement* node) {
void AstNumberingVisitor::VisitTryFinallyStatement(TryFinallyStatement* node) {
IncrementNodeCount();
+ DisableTurbofan(kTryFinallyStatement);
Visit(node->try_block());
Visit(node->finally_block());
}
@@ -298,6 +352,7 @@ void AstNumberingVisitor::VisitCompareOperation(CompareOperation* node) {
void AstNumberingVisitor::VisitForInStatement(ForInStatement* node) {
IncrementNodeCount();
+ DisableSelfOptimization();
node->set_base_id(ReserveIdRange(ForInStatement::num_ids()));
Visit(node->each());
Visit(node->enumerable());
@@ -307,6 +362,7 @@ void AstNumberingVisitor::VisitForInStatement(ForInStatement* node) {
void AstNumberingVisitor::VisitForOfStatement(ForOfStatement* node) {
IncrementNodeCount();
+ DisableTurbofan(kForOfStatement);
node->set_base_id(ReserveIdRange(ForOfStatement::num_ids()));
Visit(node->assign_iterator());
Visit(node->next_result());
@@ -357,6 +413,7 @@ void AstNumberingVisitor::VisitCaseClause(CaseClause* node) {
void AstNumberingVisitor::VisitForStatement(ForStatement* node) {
IncrementNodeCount();
+ DisableSelfOptimization();
node->set_base_id(ReserveIdRange(ForStatement::num_ids()));
if (node->init() != NULL) Visit(node->init());
if (node->cond() != NULL) Visit(node->cond());
@@ -367,6 +424,7 @@ void AstNumberingVisitor::VisitForStatement(ForStatement* node) {
void AstNumberingVisitor::VisitClassLiteral(ClassLiteral* node) {
IncrementNodeCount();
+ DisableTurbofan(kClassLiteral);
node->set_base_id(ReserveIdRange(ClassLiteral::num_ids()));
if (node->extends()) Visit(node->extends());
if (node->constructor()) Visit(node->constructor());
@@ -467,6 +525,7 @@ void AstNumberingVisitor::Renumber(FunctionLiteral* node) {
VisitStatements(node->body());
node->set_ast_properties(&properties_);
+ node->set_dont_optimize_reason(dont_optimize_reason());
}
« no previous file with comments | « src/ast.cc ('k') | src/compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698