diff options
Diffstat (limited to 'deps/v8/src/ast-numbering.cc')
-rw-r--r-- | deps/v8/src/ast-numbering.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/deps/v8/src/ast-numbering.cc b/deps/v8/src/ast-numbering.cc index ea25ad8bbc..f63919c058 100644 --- a/deps/v8/src/ast-numbering.cc +++ b/deps/v8/src/ast-numbering.cc @@ -6,7 +6,6 @@ #include "src/ast.h" #include "src/ast-numbering.h" -#include "src/compiler.h" #include "src/scopes.h" namespace v8 { @@ -18,6 +17,8 @@ class AstNumberingVisitor FINAL : public AstVisitor { explicit AstNumberingVisitor(Isolate* isolate, Zone* zone) : AstVisitor(), next_id_(BailoutId::FirstUsable().ToInt()), + properties_(zone), + ic_slot_cache_(FLAG_vector_ics ? 4 : 0), dont_optimize_reason_(kNoReason) { InitializeAstVisitor(isolate, zone); } @@ -60,14 +61,15 @@ class AstNumberingVisitor FINAL : public AstVisitor { template <typename Node> void ReserveFeedbackSlots(Node* node) { FeedbackVectorRequirements reqs = - node->ComputeFeedbackRequirements(isolate()); + node->ComputeFeedbackRequirements(isolate(), &ic_slot_cache_); if (reqs.slots() > 0) { node->SetFirstFeedbackSlot(FeedbackVectorSlot(properties_.slots())); properties_.increase_slots(reqs.slots()); } if (reqs.ic_slots() > 0) { int ic_slots = properties_.ic_slots(); - node->SetFirstFeedbackICSlot(FeedbackVectorICSlot(ic_slots)); + node->SetFirstFeedbackICSlot(FeedbackVectorICSlot(ic_slots), + &ic_slot_cache_); properties_.increase_ic_slots(reqs.ic_slots()); if (FLAG_vector_ics) { for (int i = 0; i < reqs.ic_slots(); i++) { @@ -81,6 +83,9 @@ class AstNumberingVisitor FINAL : public AstVisitor { int next_id_; AstProperties properties_; + // The slot cache allows us to reuse certain vector IC slots. It's only used + // if FLAG_vector_ics is true. + ICSlotCache ic_slot_cache_; BailoutReason dont_optimize_reason_; DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); @@ -186,7 +191,6 @@ void AstNumberingVisitor::VisitImportDeclaration(ImportDeclaration* node) { IncrementNodeCount(); DisableOptimization(kImportDeclaration); VisitVariableProxy(node->proxy()); - Visit(node->module()); } |