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-graph.h b/src/compiler/js-graph.h
index 040a745..5a25ed0 100644
--- a/src/compiler/js-graph.h
+++ b/src/compiler/js-graph.h
@@ -11,28 +11,36 @@
#include "src/compiler/js-operator.h"
#include "src/compiler/machine-operator.h"
#include "src/compiler/node-properties.h"
+#include "src/isolate.h"
namespace v8 {
namespace internal {
namespace compiler {
+class SimplifiedOperatorBuilder;
class Typer;
// Implements a facade on a Graph, enhancing the graph with JS-specific
-// notions, including a builder for for JS* operators, canonicalized global
+// notions, including various builders for operators, canonicalized global
// constants, and various helper methods.
class JSGraph : public ZoneObject {
public:
- JSGraph(Graph* graph, CommonOperatorBuilder* common,
- JSOperatorBuilder* javascript, MachineOperatorBuilder* machine)
- : graph_(graph),
+ JSGraph(Isolate* isolate, Graph* graph, CommonOperatorBuilder* common,
+ JSOperatorBuilder* javascript, SimplifiedOperatorBuilder* simplified,
+ MachineOperatorBuilder* machine)
+ : isolate_(isolate),
+ graph_(graph),
common_(common),
javascript_(javascript),
+ simplified_(simplified),
machine_(machine),
- cache_(zone()) {}
+ cache_(zone()) {
+ for (int i = 0; i < kNumCachedNodes; i++) cached_nodes_[i] = nullptr;
+ }
// Canonicalized global constants.
Node* CEntryStubConstant(int result_size);
+ Node* EmptyFixedArrayConstant();
Node* UndefinedConstant();
Node* TheHoleConstant();
Node* TrueConstant();
@@ -42,10 +50,6 @@
Node* OneConstant();
Node* NaNConstant();
- // Creates a HeapConstant node, possibly canonicalized, without inspecting the
- // object.
- Node* HeapConstant(Unique<HeapObject> value);
-
// Creates a HeapConstant node, possibly canonicalized, and may access the
// heap to inspect the object.
Node* HeapConstant(Handle<HeapObject> value);
@@ -99,6 +103,7 @@
// Creates an ExternalConstant node, usually canonicalized.
Node* ExternalConstant(ExternalReference ref);
+ Node* ExternalConstant(Runtime::FunctionId function_id);
Node* SmiConstant(int32_t immediate) {
DCHECK(Smi::IsValid(immediate));
@@ -109,36 +114,50 @@
// stubs and runtime functions that do not require a context.
Node* NoContextConstant() { return ZeroConstant(); }
- JSOperatorBuilder* javascript() { return javascript_; }
- CommonOperatorBuilder* common() { return common_; }
- MachineOperatorBuilder* machine() { return machine_; }
- Graph* graph() { return graph_; }
- Zone* zone() { return graph()->zone(); }
- Isolate* isolate() { return zone()->isolate(); }
- Factory* factory() { return isolate()->factory(); }
+ // Creates an empty frame states for cases where we know that a function
+ // cannot deopt.
+ Node* EmptyFrameState();
+
+ // Create a control node that serves as dependency for dead nodes.
+ Node* Dead();
+
+ CommonOperatorBuilder* common() const { return common_; }
+ JSOperatorBuilder* javascript() const { return javascript_; }
+ SimplifiedOperatorBuilder* simplified() const { return simplified_; }
+ MachineOperatorBuilder* machine() const { return machine_; }
+ Graph* graph() const { return graph_; }
+ Zone* zone() const { return graph()->zone(); }
+ Isolate* isolate() const { return isolate_; }
+ Factory* factory() const { return isolate()->factory(); }
void GetCachedNodes(NodeVector* nodes);
private:
+ enum CachedNode {
+ kCEntryStubConstant,
+ kEmptyFixedArrayConstant,
+ kUndefinedConstant,
+ kTheHoleConstant,
+ kTrueConstant,
+ kFalseConstant,
+ kNullConstant,
+ kZeroConstant,
+ kOneConstant,
+ kNaNConstant,
+ kEmptyFrameState,
+ kDead,
+ kNumCachedNodes // Must remain last.
+ };
+
+ Isolate* isolate_;
Graph* graph_;
CommonOperatorBuilder* common_;
JSOperatorBuilder* javascript_;
+ SimplifiedOperatorBuilder* simplified_;
MachineOperatorBuilder* machine_;
-
- // TODO(titzer): make this into a simple array.
- SetOncePointer<Node> c_entry_stub_constant_;
- SetOncePointer<Node> undefined_constant_;
- SetOncePointer<Node> the_hole_constant_;
- SetOncePointer<Node> true_constant_;
- SetOncePointer<Node> false_constant_;
- SetOncePointer<Node> null_constant_;
- SetOncePointer<Node> zero_constant_;
- SetOncePointer<Node> one_constant_;
- SetOncePointer<Node> nan_constant_;
-
CommonNodeCache cache_;
+ Node* cached_nodes_[kNumCachedNodes];
- Node* ImmovableHeapConstant(Handle<HeapObject> value);
Node* NumberConstant(double value);
DISALLOW_COPY_AND_ASSIGN(JSGraph);