summaryrefslogtreecommitdiff
path: root/deps/v8/src/ast-numbering.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/ast-numbering.cc')
-rw-r--r--deps/v8/src/ast-numbering.cc12
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());
}