Upgrade V8 to version 4.9.385.28
https://chromium.googlesource.com/v8/v8/+/4.9.385.28
FPIIM-449
Change-Id: I4b2e74289d4bf3667f2f3dc8aa2e541f63e26eb4
diff --git a/src/compiler/js-context-specialization.cc b/src/compiler/js-context-specialization.cc
index a700b47..4d9d1d9 100644
--- a/src/compiler/js-context-specialization.cc
+++ b/src/compiler/js-context-specialization.cc
@@ -4,48 +4,51 @@
#include "src/compiler/js-context-specialization.h"
-#include "src/compiler.h"
#include "src/compiler/common-operator.h"
-#include "src/compiler/graph-inl.h"
+#include "src/compiler/js-graph.h"
#include "src/compiler/js-operator.h"
#include "src/compiler/node-matchers.h"
-#include "src/compiler/node-properties-inl.h"
+#include "src/compiler/node-properties.h"
+#include "src/contexts.h"
+#include "src/objects-inl.h"
namespace v8 {
namespace internal {
namespace compiler {
-Reduction JSContextSpecializer::Reduce(Node* node) {
- if (node == context_) {
- Node* constant = jsgraph_->Constant(info_->context());
- NodeProperties::ReplaceWithValue(node, constant);
- return Replace(constant);
- }
- if (node->opcode() == IrOpcode::kJSLoadContext) {
- return ReduceJSLoadContext(node);
- }
- if (node->opcode() == IrOpcode::kJSStoreContext) {
- return ReduceJSStoreContext(node);
+Reduction JSContextSpecialization::Reduce(Node* node) {
+ switch (node->opcode()) {
+ case IrOpcode::kJSLoadContext:
+ return ReduceJSLoadContext(node);
+ case IrOpcode::kJSStoreContext:
+ return ReduceJSStoreContext(node);
+ default:
+ break;
}
return NoChange();
}
-Reduction JSContextSpecializer::ReduceJSLoadContext(Node* node) {
+MaybeHandle<Context> JSContextSpecialization::GetSpecializationContext(
+ Node* node) {
+ DCHECK(node->opcode() == IrOpcode::kJSLoadContext ||
+ node->opcode() == IrOpcode::kJSStoreContext);
+ Node* const object = NodeProperties::GetValueInput(node, 0);
+ return NodeProperties::GetSpecializationContext(object, context());
+}
+
+
+Reduction JSContextSpecialization::ReduceJSLoadContext(Node* node) {
DCHECK_EQ(IrOpcode::kJSLoadContext, node->opcode());
- HeapObjectMatcher<Context> m(NodeProperties::GetValueInput(node, 0));
- // If the context is not constant, no reduction can occur.
- if (!m.HasValue()) {
- return NoChange();
- }
-
- const ContextAccess& access = ContextAccessOf(node->op());
+ // Get the specialization context from the node.
+ Handle<Context> context;
+ if (!GetSpecializationContext(node).ToHandle(&context)) return NoChange();
// Find the right parent context.
- Context* context = *m.Value().handle();
+ const ContextAccess& access = ContextAccessOf(node->op());
for (size_t i = access.depth(); i > 0; --i) {
- context = context->previous();
+ context = handle(context->previous(), isolate());
}
// If the access itself is mutable, only fold-in the parent.
@@ -56,13 +59,12 @@
}
const Operator* op = jsgraph_->javascript()->LoadContext(
0, access.index(), access.immutable());
- node->set_op(op);
- Handle<Object> context_handle = Handle<Object>(context, info_->isolate());
- node->ReplaceInput(0, jsgraph_->Constant(context_handle));
+ node->ReplaceInput(0, jsgraph_->Constant(context));
+ NodeProperties::ChangeOp(node, op);
return Changed(node);
}
- Handle<Object> value = Handle<Object>(
- context->get(static_cast<int>(access.index())), info_->isolate());
+ Handle<Object> value =
+ handle(context->get(static_cast<int>(access.index())), isolate());
// Even though the context slot is immutable, the context might have escaped
// before the function to which it belongs has initialized the slot.
@@ -76,41 +78,44 @@
// TODO(titzer): record the specialization for sharing code across multiple
// contexts that have the same value in the corresponding context slot.
Node* constant = jsgraph_->Constant(value);
- NodeProperties::ReplaceWithValue(node, constant);
+ ReplaceWithValue(node, constant);
return Replace(constant);
}
-Reduction JSContextSpecializer::ReduceJSStoreContext(Node* node) {
+Reduction JSContextSpecialization::ReduceJSStoreContext(Node* node) {
DCHECK_EQ(IrOpcode::kJSStoreContext, node->opcode());
- HeapObjectMatcher<Context> m(NodeProperties::GetValueInput(node, 0));
- // If the context is not constant, no reduction can occur.
- if (!m.HasValue()) {
- return NoChange();
- }
-
- const ContextAccess& access = ContextAccessOf(node->op());
+ // Get the specialization context from the node.
+ Handle<Context> context;
+ if (!GetSpecializationContext(node).ToHandle(&context)) return NoChange();
// The access does not have to look up a parent, nothing to fold.
+ const ContextAccess& access = ContextAccessOf(node->op());
if (access.depth() == 0) {
return NoChange();
}
// Find the right parent context.
- Context* context = *m.Value().handle();
for (size_t i = access.depth(); i > 0; --i) {
- context = context->previous();
+ context = handle(context->previous(), isolate());
}
- const Operator* op = jsgraph_->javascript()->StoreContext(0, access.index());
- node->set_op(op);
- Handle<Object> new_context_handle = Handle<Object>(context, info_->isolate());
- node->ReplaceInput(0, jsgraph_->Constant(new_context_handle));
-
+ node->ReplaceInput(0, jsgraph_->Constant(context));
+ NodeProperties::ChangeOp(node, javascript()->StoreContext(0, access.index()));
return Changed(node);
}
+
+Isolate* JSContextSpecialization::isolate() const {
+ return jsgraph()->isolate();
+}
+
+
+JSOperatorBuilder* JSContextSpecialization::javascript() const {
+ return jsgraph()->javascript();
+}
+
} // namespace compiler
} // namespace internal
} // namespace v8