Revision: 22851
Author:   [email protected]
Date:     Tue Aug  5 08:47:39 2014 UTC
Log:      Make start node a value input to parameter nodes.

BUG=
[email protected]

Review URL: https://codereview.chromium.org/437183002
http://code.google.com/p/v8/source/detail?r=22851

Modified:
 /branches/bleeding_edge/src/compiler/ast-graph-builder.cc
 /branches/bleeding_edge/src/compiler/common-operator.h
 /branches/bleeding_edge/src/compiler/opcodes.h
 /branches/bleeding_edge/src/compiler/raw-machine-assembler.cc
 /branches/bleeding_edge/src/compiler/structured-machine-assembler.cc
 /branches/bleeding_edge/src/compiler/verifier.cc
 /branches/bleeding_edge/test/cctest/compiler/graph-builder-tester.cc
 /branches/bleeding_edge/test/cctest/compiler/graph-builder-tester.h
 /branches/bleeding_edge/test/cctest/compiler/graph-tester.h
 /branches/bleeding_edge/test/cctest/compiler/simplified-graph-builder.cc
 /branches/bleeding_edge/test/cctest/compiler/simplified-graph-builder.h
/branches/bleeding_edge/test/cctest/compiler/test-js-context-specialization.cc
 /branches/bleeding_edge/test/cctest/compiler/test-js-typed-lowering.cc
/branches/bleeding_edge/test/cctest/compiler/test-machine-operator-reducer.cc
 /branches/bleeding_edge/test/cctest/compiler/test-phi-reducer.cc
 /branches/bleeding_edge/test/cctest/compiler/test-representation-change.cc
 /branches/bleeding_edge/test/cctest/compiler/test-schedule.cc
 /branches/bleeding_edge/test/cctest/compiler/test-scheduler.cc

=======================================
--- /branches/bleeding_edge/src/compiler/ast-graph-builder.cc Mon Aug 4 11:34:54 2014 UTC +++ /branches/bleeding_edge/src/compiler/ast-graph-builder.cc Tue Aug 5 08:47:39 2014 UTC
@@ -33,7 +33,7 @@
   if (!function_closure_.is_set()) {
     // Parameter -1 is special for the function closure
     Operator* op = common()->Parameter(-1);
-    Node* node = NewNode(op);
+    Node* node = NewNode(op, graph()->start());
     function_closure_.set(node);
   }
   return function_closure_.get();
@@ -44,7 +44,7 @@
   if (!function_context_.is_set()) {
// Parameter (arity + 1) is special for the outer context of the function
     Operator* op = common()->Parameter(info()->num_parameters() + 1);
-    Node* node = NewNode(op);
+    Node* node = NewNode(op, graph()->start());
     function_context_.set(node);
   }
   return function_context_.get();
@@ -60,7 +60,8 @@
       SourcePosition(info()->shared_info()->start_position()));

   // Set up the basic structure of the graph.
-  graph()->SetStart(graph()->NewNode(common()->Start()));
+  graph()->SetStart(
+      graph()->NewNode(common()->Start(info()->num_parameters())));

   // Initialize the top-level environment.
   Environment env(this, scope, graph()->start());
@@ -177,13 +178,15 @@
   DCHECK_EQ(scope->num_parameters() + 1, parameters_count());

   // Bind the receiver variable.
-  Node* receiver = builder->graph()->NewNode(common()->Parameter(0));
+  Node* receiver = builder->graph()->NewNode(common()->Parameter(0),
+                                             builder->graph()->start());
   values()->push_back(receiver);

   // Bind all parameter variables. The parameter indices are shifted by 1
   // (receiver is parameter index -1 but environment index 0).
   for (int i = 0; i < scope->num_parameters(); ++i) {
- Node* parameter = builder->graph()->NewNode(common()->Parameter(i + 1));
+    Node* parameter = builder->graph()->NewNode(common()->Parameter(i + 1),
+                                                builder->graph()->start());
     values()->push_back(parameter);
   }

@@ -1618,7 +1621,7 @@
     if (!variable->IsContextSlot()) continue;
     // Temporary parameter node. The parameter indices are shifted by 1
     // (receiver is parameter index -1 but environment index 0).
-    Node* parameter = NewNode(common()->Parameter(i + 1));
+ Node* parameter = NewNode(common()->Parameter(i + 1), graph()->start());
     // Context variable (at bottom of the context chain).
     DCHECK_EQ(0, info()->scope()->ContextChainLength(variable->scope()));
     Operator* op = javascript()->StoreContext(0, variable->index());
=======================================
--- /branches/bleeding_edge/src/compiler/common-operator.h Mon Aug 4 11:34:54 2014 UTC +++ /branches/bleeding_edge/src/compiler/common-operator.h Tue Aug 5 08:47:39 2014 UTC
@@ -65,7 +65,12 @@
return new (zone_) ControlOperator(IrOpcode::k##name, Operator::kFoldable, \
                                      inputs, 0, controls, #name);

-  Operator* Start() { CONTROL_OP(Start, 0, 0); }
+  Operator* Start(int num_formal_parameters) {
+ // Outputs are formal parameters, plus context, receiver, and JSFunction.
+    int outputs = num_formal_parameters + 3;
+ return new (zone_) ControlOperator(IrOpcode::kStart, Operator::kFoldable, 0,
+                                       outputs, 0, "Start");
+  }
   Operator* Dead() { CONTROL_OP(Dead, 0, 0); }
   Operator* End() { CONTROL_OP(End, 0, 1); }
   Operator* Branch() { CONTROL_OP(Branch, 1, 1); }
@@ -95,7 +100,7 @@
   }

   Operator* Parameter(int index) {
- return new (zone_) Operator1<int>(IrOpcode::kParameter, Operator::kPure, 0, + return new (zone_) Operator1<int>(IrOpcode::kParameter, Operator::kPure, 1,
                                       1, "Parameter", index);
   }
   Operator* Int32Constant(int32_t value) {
=======================================
--- /branches/bleeding_edge/src/compiler/opcodes.h Fri Aug 1 12:18:20 2014 UTC +++ /branches/bleeding_edge/src/compiler/opcodes.h Tue Aug 5 08:47:39 2014 UTC
@@ -23,7 +23,6 @@

 // Opcodes for common operators.
 #define LEAF_OP_LIST(V) \
-  V(Parameter)          \
   V(Int32Constant)      \
   V(Int64Constant)      \
   V(Float64Constant)    \
@@ -36,6 +35,7 @@
   V(EffectPhi)           \
   V(FrameState)          \
   V(Call)                \
+  V(Parameter)           \
   V(Projection)

 #define COMMON_OP_LIST(V) \
=======================================
--- /branches/bleeding_edge/src/compiler/raw-machine-assembler.cc Mon Aug 4 11:34:54 2014 UTC +++ /branches/bleeding_edge/src/compiler/raw-machine-assembler.cc Tue Aug 5 08:47:39 2014 UTC
@@ -21,10 +21,12 @@
       parameters_(NULL),
       exit_label_(schedule()->exit()),
       current_block_(schedule()->entry()) {
+  Node* s = graph->NewNode(common_.Start(parameter_count()));
+  graph->SetStart(s);
   if (parameter_count() == 0) return;
   parameters_ = zone()->NewArray<Node*>(parameter_count());
   for (int i = 0; i < parameter_count(); ++i) {
-    parameters_[i] = NewNode(common()->Parameter(i));
+    parameters_[i] = NewNode(common()->Parameter(i), graph->start());
   }
 }

=======================================
--- /branches/bleeding_edge/src/compiler/structured-machine-assembler.cc Mon Aug 4 11:34:54 2014 UTC +++ /branches/bleeding_edge/src/compiler/structured-machine-assembler.cc Tue Aug 5 08:47:39 2014 UTC
@@ -28,10 +28,12 @@
       current_environment_(new (zone())
Environment(zone(), schedule()->entry(), false)),
       number_of_variables_(0) {
+  Node* s = graph->NewNode(common_.Start(parameter_count()));
+  graph->SetStart(s);
   if (parameter_count() == 0) return;
   parameters_ = zone()->NewArray<Node*>(parameter_count());
   for (int i = 0; i < parameter_count(); ++i) {
-    parameters_[i] = NewNode(common()->Parameter(i));
+    parameters_[i] = NewNode(common()->Parameter(i), graph->start());
   }
 }

=======================================
--- /branches/bleeding_edge/src/compiler/verifier.cc Wed Jul 30 13:54:45 2014 UTC +++ /branches/bleeding_edge/src/compiler/verifier.cc Tue Aug 5 08:47:39 2014 UTC
@@ -102,7 +102,8 @@
     Node::Uses uses = node->uses();
     for (Node::Uses::iterator it = uses.begin(); it != uses.end(); ++it) {
       CHECK(!NodeProperties::IsValueEdge(it.edge()) ||
-            (*it)->opcode() == IrOpcode::kProjection);
+            (*it)->opcode() == IrOpcode::kProjection ||
+            (*it)->opcode() == IrOpcode::kParameter);
     }
   }

@@ -148,10 +149,18 @@
     case IrOpcode::kThrow:
       // TODO(rossberg): what are the constraints on these?
       break;
-    case IrOpcode::kParameter:
-      // Parameters have no inputs.
-      CHECK_EQ(0, input_count);
+    case IrOpcode::kParameter: {
+      // Parameters have the start node as inputs.
+      CHECK_EQ(1, input_count);
+      CHECK_EQ(IrOpcode::kStart,
+               NodeProperties::GetValueInput(node, 0)->opcode());
+      // Parameter has an input that produces enough values.
+      int index = static_cast<Operator1<int>*>(node->op())->parameter();
+      Node* input = NodeProperties::GetValueInput(node, 0);
+      // Currently, parameter indices start at -1 instead of 0.
+      CHECK_GT(NodeProperties::GetValueOutputCount(input), index + 1);
       break;
+    }
     case IrOpcode::kInt32Constant:
     case IrOpcode::kInt64Constant:
     case IrOpcode::kFloat64Constant:
=======================================
--- /branches/bleeding_edge/test/cctest/compiler/graph-builder-tester.cc Mon Aug 4 11:34:54 2014 UTC +++ /branches/bleeding_edge/test/cctest/compiler/graph-builder-tester.cc Tue Aug 5 08:47:39 2014 UTC
@@ -22,9 +22,9 @@
   DCHECK_EQ(NULL, parameters_);
   graph_ = builder->graph();
   if (parameter_count() == 0) return;
- parameters_ = builder->graph()->zone()->NewArray<Node*>(parameter_count());
+  parameters_ = graph_->zone()->NewArray<Node*>(parameter_count());
   for (int i = 0; i < parameter_count(); ++i) {
-    parameters_[i] = builder->NewNode(common->Parameter(i));
+ parameters_[i] = builder->NewNode(common->Parameter(i), graph_->start());
   }
 }

=======================================
--- /branches/bleeding_edge/test/cctest/compiler/graph-builder-tester.h Fri Aug 1 08:16:19 2014 UTC +++ /branches/bleeding_edge/test/cctest/compiler/graph-builder-tester.h Tue Aug 5 08:47:39 2014 UTC
@@ -47,10 +47,12 @@
                                 MachineRepresentation* parameters);
void InitParameters(GraphBuilder* builder, CommonOperatorBuilder* common);

- private:
+ protected:
   int parameter_count() const {
     return call_descriptor_builder_->parameter_count();
   }
+
+ private:
   MachineCallDescriptorBuilder* call_descriptor_builder_;
   Node** parameters_;
   // TODO(dcarney): shouldn't need graph stored.
@@ -97,7 +99,7 @@
                 p0, p1, p2, p3, p4)),
         SimplifiedGraphBuilder(main_graph_, &main_common_, &main_machine_,
                                &main_simplified_) {
-    Begin();
+    Begin(parameter_count());
     InitParameters(this, &main_common_);
   }
   virtual ~GraphBuilderTester() {}
=======================================
--- /branches/bleeding_edge/test/cctest/compiler/graph-tester.h Wed Jul 30 13:54:45 2014 UTC +++ /branches/bleeding_edge/test/cctest/compiler/graph-tester.h Tue Aug 5 08:47:39 2014 UTC
@@ -23,8 +23,9 @@

 class GraphWithStartNodeTester : public GraphTester {
  public:
-  GraphWithStartNodeTester()
-      : builder_(main_zone()), start_node_(NewNode(builder_.Start())) {
+  explicit GraphWithStartNodeTester(int num_parameters = 0)
+      : builder_(main_zone()),
+        start_node_(NewNode(builder_.Start(num_parameters))) {
     SetStart(start_node_);
   }

=======================================
--- /branches/bleeding_edge/test/cctest/compiler/simplified-graph-builder.cc Mon Aug 4 11:34:54 2014 UTC +++ /branches/bleeding_edge/test/cctest/compiler/simplified-graph-builder.cc Tue Aug 5 08:47:39 2014 UTC
@@ -16,9 +16,9 @@
       simplified_(simplified) {}


-void SimplifiedGraphBuilder::Begin() {
+void SimplifiedGraphBuilder::Begin(int num_parameters) {
   DCHECK(graph()->start() == NULL);
-  Node* start = graph()->NewNode(common()->Start());
+  Node* start = graph()->NewNode(common()->Start(num_parameters));
   graph()->SetStart(start);
   set_environment(new (zone()) Environment(this, start));
 }
=======================================
--- /branches/bleeding_edge/test/cctest/compiler/simplified-graph-builder.h Wed Jul 30 13:54:45 2014 UTC +++ /branches/bleeding_edge/test/cctest/compiler/simplified-graph-builder.h Tue Aug 5 08:47:39 2014 UTC
@@ -53,7 +53,7 @@
   }

   // Initialize graph and builder.
-  void Begin();
+  void Begin(int num_parameters);

   void Return(Node* value);

=======================================
--- /branches/bleeding_edge/test/cctest/compiler/test-js-context-specialization.cc Wed Jul 30 13:54:45 2014 UTC +++ /branches/bleeding_edge/test/cctest/compiler/test-js-context-specialization.cc Tue Aug 5 08:47:39 2014 UTC
@@ -50,7 +50,7 @@
 TEST(ReduceJSLoadContext) {
   ContextSpecializationTester t;

-  Node* start = t.NewNode(t.common()->Start());
+  Node* start = t.NewNode(t.common()->Start(0));
   t.graph()->SetStart(start);

   // Make a context and initialize it a bit for this test.
@@ -64,7 +64,7 @@
   native->set(slot, *expected);

   Node* const_context = t.jsgraph()->Constant(native);
-  Node* param_context = t.NewNode(t.common()->Parameter(0));
+  Node* param_context = t.NewNode(t.common()->Parameter(0), start);
   JSContextSpecializer spec(t.info(), t.jsgraph(), const_context);

   {
@@ -145,7 +145,7 @@
 TEST(SpecializeToContext) {
   ContextSpecializationTester t;

-  Node* start = t.NewNode(t.common()->Start());
+  Node* start = t.NewNode(t.common()->Start(0));
   t.graph()->SetStart(start);

   // Make a context and initialize it a bit for this test.
@@ -156,13 +156,13 @@
   t.info()->SetContext(native);

   Node* const_context = t.jsgraph()->Constant(native);
-  Node* param_context = t.NewNode(t.common()->Parameter(0));
+  Node* param_context = t.NewNode(t.common()->Parameter(0), start);
   JSContextSpecializer spec(t.info(), t.jsgraph(), const_context);

   {
// Check that SpecializeToContext() replaces values and forwards effects
     // correctly, and folds values from constant and non-constant contexts
-    Node* effect_in = t.NewNode(t.common()->Start());
+    Node* effect_in = t.NewNode(t.common()->Start(0));
     Node* load = t.NewNode(t.javascript()->LoadContext(0, slot, true),
                            const_context, const_context, effect_in, start);

=======================================
--- /branches/bleeding_edge/test/cctest/compiler/test-js-typed-lowering.cc Thu Jul 31 11:31:39 2014 UTC +++ /branches/bleeding_edge/test/cctest/compiler/test-js-typed-lowering.cc Tue Aug 5 08:47:39 2014 UTC
@@ -16,7 +16,7 @@

 class JSTypedLoweringTester : public HandleAndZoneScope {
  public:
-  JSTypedLoweringTester()
+  explicit JSTypedLoweringTester(int num_parameters = 0)
       : isolate(main_isolate()),
         binop(NULL),
         unop(NULL),
@@ -29,6 +29,8 @@
         source_positions(&graph),
         context_node(NULL) {
     typer.DecorateGraph(&graph);
+    Node* s = graph.NewNode(common.Start(num_parameters));
+    graph.SetStart(s);
   }

   Isolate* isolate;
@@ -44,7 +46,7 @@
   Node* context_node;

   Node* Parameter(Type* t, int32_t index = 0) {
-    Node* n = graph.NewNode(common.Parameter(index));
+    Node* n = graph.NewNode(common.Parameter(index), graph.start());
     NodeProperties::SetBounds(n, Bounds(Type::None(), t));
     return n;
   }
@@ -57,18 +59,11 @@
     return node;
   }

-  Node* start() {
-    Node* s = graph.start();
-    if (s == NULL) {
-      s = graph.NewNode(common.Start());
-      graph.SetStart(s);
-    }
-    return s;
-  }
+  Node* start() { return graph.start(); }

   Node* context() {
     if (context_node == NULL) {
-      context_node = graph.NewNode(common.Parameter(-1));
+      context_node = graph.NewNode(common.Parameter(-1), graph.start());
     }
     return context_node;
   }
=======================================
--- /branches/bleeding_edge/test/cctest/compiler/test-machine-operator-reducer.cc Fri Aug 1 10:54:58 2014 UTC +++ /branches/bleeding_edge/test/cctest/compiler/test-machine-operator-reducer.cc Tue Aug 5 08:47:39 2014 UTC
@@ -30,14 +30,17 @@

 class ReducerTester : public HandleAndZoneScope {
  public:
-  ReducerTester()
+  explicit ReducerTester(int num_parameters = 0)
       : isolate(main_isolate()),
         binop(NULL),
         unop(NULL),
         machine(main_zone()),
         common(main_zone()),
         graph(main_zone()),
-        maxuint32(Constant<int32_t>(kMaxUInt32)) {}
+        maxuint32(Constant<int32_t>(kMaxUInt32)) {
+    Node* s = graph.NewNode(common.Start(num_parameters));
+    graph.SetStart(s);
+  }

   Isolate* isolate;
   Operator* binop;
@@ -168,7 +171,7 @@
   }

   Node* Parameter(int32_t index = 0) {
-    return graph.NewNode(common.Parameter(index));
+    return graph.NewNode(common.Parameter(index), graph.start());
   }
 };

=======================================
--- /branches/bleeding_edge/test/cctest/compiler/test-phi-reducer.cc Wed Jul 30 13:54:45 2014 UTC +++ /branches/bleeding_edge/test/cctest/compiler/test-phi-reducer.cc Tue Aug 5 08:47:39 2014 UTC
@@ -14,12 +14,14 @@

 class PhiReducerTester : HandleAndZoneScope {
  public:
-  PhiReducerTester()
+  explicit PhiReducerTester(int num_parameters = 0)
       : isolate(main_isolate()),
         common(main_zone()),
         graph(main_zone()),
-        self(graph.NewNode(common.Start())),
-        dead(graph.NewNode(common.Dead())) {}
+        self(graph.NewNode(common.Start(num_parameters))),
+        dead(graph.NewNode(common.Dead())) {
+    graph.SetStart(self);
+  }

   Isolate* isolate;
   CommonOperatorBuilder common;
@@ -47,7 +49,7 @@
   }

   Node* Parameter(int32_t index = 0) {
-    return graph.NewNode(common.Parameter(index));
+    return graph.NewNode(common.Parameter(index), graph.start());
   }

   Node* Phi(Node* a) {
=======================================
--- /branches/bleeding_edge/test/cctest/compiler/test-representation-change.cc Fri Aug 1 10:54:58 2014 UTC +++ /branches/bleeding_edge/test/cctest/compiler/test-representation-change.cc Tue Aug 5 08:47:39 2014 UTC
@@ -22,11 +22,13 @@
 class RepresentationChangerTester : public HandleAndZoneScope,
                                     public GraphAndBuilders {
  public:
-  RepresentationChangerTester()
+  explicit RepresentationChangerTester(int num_parameters = 0)
       : GraphAndBuilders(main_zone()),
         typer_(main_zone()),
         jsgraph_(main_graph_, &main_common_, &typer_),
changer_(&jsgraph_, &main_simplified_, &main_machine_, main_isolate()) {
+    Node* s = graph()->NewNode(common()->Start(num_parameters));
+    graph()->SetStart(s);
   }

   Typer typer_;
@@ -60,7 +62,7 @@
   }

   Node* Parameter(int index = 0) {
-    return graph()->NewNode(common()->Parameter(index));
+    return graph()->NewNode(common()->Parameter(index), graph()->start());
   }

   void CheckTypeError(RepTypeUnion from, RepTypeUnion to) {
=======================================
--- /branches/bleeding_edge/test/cctest/compiler/test-schedule.cc Wed Jul 30 13:54:45 2014 UTC +++ /branches/bleeding_edge/test/cctest/compiler/test-schedule.cc Tue Aug 5 08:47:39 2014 UTC
@@ -147,10 +147,10 @@
   CommonOperatorBuilder common(scope.main_zone());
   MachineOperatorBuilder machine(scope.main_zone(), kMachineWord32);

-  Node* start = graph.NewNode(common.Start());
+  Node* start = graph.NewNode(common.Start(0));
   graph.SetStart(start);
-  Node* param0 = graph.NewNode(common.Parameter(0));
-  Node* param1 = graph.NewNode(common.Parameter(1));
+  Node* param0 = graph.NewNode(common.Parameter(0), graph.start());
+  Node* param1 = graph.NewNode(common.Parameter(1), graph.start());

   Node* mul = graph.NewNode(machine.Int32Mul(), param0, param1);
   Node* ret = graph.NewNode(common.Return(), mul, start);
=======================================
--- /branches/bleeding_edge/test/cctest/compiler/test-scheduler.cc Thu Jul 31 11:59:49 2014 UTC +++ /branches/bleeding_edge/test/cctest/compiler/test-scheduler.cc Tue Aug 5 08:47:39 2014 UTC
@@ -605,7 +605,7 @@
   HandleAndZoneScope scope;
   Graph graph(scope.main_zone());
   CommonOperatorBuilder builder(scope.main_zone());
-  graph.SetStart(graph.NewNode(builder.Start()));
+  graph.SetStart(graph.NewNode(builder.Start(0)));
   graph.SetEnd(graph.NewNode(builder.End(), graph.start()));

   Scheduler scheduler(scope.main_zone());
@@ -617,9 +617,9 @@
   HandleAndZoneScope scope;
   Graph graph(scope.main_zone());
   CommonOperatorBuilder builder(scope.main_zone());
-  graph.SetStart(graph.NewNode(builder.Start()));
+  graph.SetStart(graph.NewNode(builder.Start(0)));

-  Node* p1 = graph.NewNode(builder.Parameter(0));
+  Node* p1 = graph.NewNode(builder.Parameter(0), graph.start());
Node* ret = graph.NewNode(builder.Return(), p1, graph.start(), graph.start());

   graph.SetEnd(graph.NewNode(builder.End(), ret));
@@ -664,13 +664,13 @@
   Graph graph(scope.main_zone());
   CommonOperatorBuilder builder(scope.main_zone());
   JSOperatorBuilder js_builder(scope.main_zone());
-  graph.SetStart(graph.NewNode(builder.Start()));
+  graph.SetStart(graph.NewNode(builder.Start(3)));

-  Node* p1 = graph.NewNode(builder.Parameter(0));
-  Node* p2 = graph.NewNode(builder.Parameter(1));
-  Node* p3 = graph.NewNode(builder.Parameter(2));
-  Node* p4 = graph.NewNode(builder.Parameter(3));
-  Node* p5 = graph.NewNode(builder.Parameter(4));
+  Node* p1 = graph.NewNode(builder.Parameter(0), graph.start());
+  Node* p2 = graph.NewNode(builder.Parameter(1), graph.start());
+  Node* p3 = graph.NewNode(builder.Parameter(2), graph.start());
+  Node* p4 = graph.NewNode(builder.Parameter(3), graph.start());
+  Node* p5 = graph.NewNode(builder.Parameter(4), graph.start());
   Node* cmp = graph.NewNode(js_builder.LessThanOrEqual(), p1, p2, p3,
                             graph.start(), graph.start());
   Node* branch = graph.NewNode(builder.Branch(), cmp, graph.start());
@@ -715,6 +715,9 @@
   //     return c * c - a;
   //   }
   // }
+  op = common_builder.Start(0);
+  Node* n0 = graph.NewNode(op);
+  USE(n0);
   Node* nil = graph.NewNode(common_builder.Dead());
   op = common_builder.End();
   Node* n23 = graph.NewNode(op, nil);
@@ -738,11 +741,11 @@
   Node* n11 = graph.NewNode(op, nil, nil, nil, nil, nil);
   USE(n11);
   op = common_builder.Parameter(0);
-  Node* n2 = graph.NewNode(op);
+  Node* n2 = graph.NewNode(op, n0);
   USE(n2);
   n11->ReplaceInput(0, n2);
   op = common_builder.Parameter(0);
-  Node* n3 = graph.NewNode(op);
+  Node* n3 = graph.NewNode(op, n0);
   USE(n3);
   n11->ReplaceInput(1, n3);
   op = common_builder.HeapConstant(unique_constant);
@@ -755,9 +758,6 @@
   n8->ReplaceInput(0, n2);
   n8->ReplaceInput(1, n3);
   n8->ReplaceInput(2, n7);
-  op = common_builder.Start();
-  Node* n0 = graph.NewNode(op);
-  USE(n0);
   n8->ReplaceInput(3, n0);
   n8->ReplaceInput(4, n0);
   n11->ReplaceInput(3, n8);
@@ -776,7 +776,7 @@
   Node* n12 = graph.NewNode(op, nil, nil, nil, nil, nil);
   USE(n12);
   op = common_builder.Parameter(0);
-  Node* n4 = graph.NewNode(op);
+  Node* n4 = graph.NewNode(op, n0);
   USE(n4);
   n12->ReplaceInput(0, n4);
   n12->ReplaceInput(1, n4);
@@ -794,7 +794,7 @@
   n14->ReplaceInput(4, n10);
   n15->ReplaceInput(0, n14);
   op = common_builder.Parameter(0);
-  Node* n5 = graph.NewNode(op);
+  Node* n5 = graph.NewNode(op, n0);
   USE(n5);
   n15->ReplaceInput(1, n5);
   n15->ReplaceInput(2, n7);
@@ -867,6 +867,9 @@
   //   }
   //   return a;
   // }
+  op = common_builder.Start(0);
+  Node* n0 = graph.NewNode(op);
+  USE(n0);
   Node* nil = graph.NewNode(common_builder.Dead());
   op = common_builder.End();
   Node* n20 = graph.NewNode(op, nil);
@@ -878,7 +881,7 @@
   Node* n8 = graph.NewNode(op, nil, nil, nil);
   USE(n8);
   op = common_builder.Parameter(0);
-  Node* n2 = graph.NewNode(op);
+  Node* n2 = graph.NewNode(op, n0);
   USE(n2);
   n8->ReplaceInput(0, n2);
   op = js_builder.Add();
@@ -900,16 +903,13 @@
   Node* n9 = graph.NewNode(op, nil, nil, nil);
   USE(n9);
   op = common_builder.Parameter(0);
-  Node* n3 = graph.NewNode(op);
+  Node* n3 = graph.NewNode(op, n0);
   USE(n3);
   n9->ReplaceInput(0, n3);
   n9->ReplaceInput(1, n9);
   op = common_builder.Loop(2);
   Node* n6 = graph.NewNode(op, nil, nil);
   USE(n6);
-  op = common_builder.Start();
-  Node* n0 = graph.NewNode(op);
-  USE(n0);
   n6->ReplaceInput(0, n0);
   op = common_builder.IfTrue();
   Node* n14 = graph.NewNode(op, nil);
@@ -993,6 +993,9 @@
   //   }
   //   return a;
   // }
+  op = common_builder.Start(0);
+  Node* n0 = graph.NewNode(op);
+  USE(n0);
   Node* nil = graph.NewNode(common_builder.Dead());
   op = common_builder.End();
   Node* n46 = graph.NewNode(op, nil);
@@ -1007,7 +1010,7 @@
   Node* n9 = graph.NewNode(op, nil, nil, nil);
   USE(n9);
   op = common_builder.Parameter(0);
-  Node* n2 = graph.NewNode(op);
+  Node* n2 = graph.NewNode(op, n0);
   USE(n2);
   n9->ReplaceInput(0, n2);
   op = common_builder.Phi(2);
@@ -1032,7 +1035,7 @@
   Node* n10 = graph.NewNode(op, nil, nil, nil);
   USE(n10);
   op = common_builder.Parameter(0);
-  Node* n3 = graph.NewNode(op);
+  Node* n3 = graph.NewNode(op, n0);
   USE(n3);
   n10->ReplaceInput(0, n3);
   op = common_builder.Phi(2);
@@ -1053,9 +1056,6 @@
   op = common_builder.Loop(2);
   Node* n7 = graph.NewNode(op, nil, nil);
   USE(n7);
-  op = common_builder.Start();
-  Node* n0 = graph.NewNode(op);
-  USE(n0);
   n7->ReplaceInput(0, n0);
   op = common_builder.IfFalse();
   Node* n30 = graph.NewNode(op, nil);
@@ -1073,7 +1073,7 @@
   Node* n11 = graph.NewNode(op, nil, nil, nil);
   USE(n11);
   op = common_builder.Parameter(0);
-  Node* n4 = graph.NewNode(op);
+  Node* n4 = graph.NewNode(op, n0);
   USE(n4);
   n11->ReplaceInput(0, n4);
   n11->ReplaceInput(1, n25);
@@ -1250,6 +1250,9 @@
   //   }
   //   return a + d;
   // }
+  op = common_builder.Start(0);
+  Node* n0 = graph.NewNode(op);
+  USE(n0);
   Node* nil = graph.NewNode(common_builder.Dead());
   op = common_builder.End();
   Node* n58 = graph.NewNode(op, nil);
@@ -1264,7 +1267,7 @@
   Node* n10 = graph.NewNode(op, nil, nil, nil);
   USE(n10);
   op = common_builder.Parameter(0);
-  Node* n2 = graph.NewNode(op);
+  Node* n2 = graph.NewNode(op, n0);
   USE(n2);
   n10->ReplaceInput(0, n2);
   op = common_builder.Phi(2);
@@ -1289,7 +1292,7 @@
   Node* n11 = graph.NewNode(op, nil, nil, nil);
   USE(n11);
   op = common_builder.Parameter(0);
-  Node* n3 = graph.NewNode(op);
+  Node* n3 = graph.NewNode(op, n0);
   USE(n3);
   n11->ReplaceInput(0, n3);
   op = common_builder.Phi(2);
@@ -1310,9 +1313,6 @@
   op = common_builder.Loop(2);
   Node* n8 = graph.NewNode(op, nil, nil);
   USE(n8);
-  op = common_builder.Start();
-  Node* n0 = graph.NewNode(op);
-  USE(n0);
   n8->ReplaceInput(0, n0);
   op = common_builder.Merge(2);
   Node* n53 = graph.NewNode(op, nil, nil);
@@ -1345,7 +1345,7 @@
   Node* n12 = graph.NewNode(op, nil, nil, nil);
   USE(n12);
   op = common_builder.Parameter(0);
-  Node* n4 = graph.NewNode(op);
+  Node* n4 = graph.NewNode(op, n0);
   USE(n4);
   n12->ReplaceInput(0, n4);
   op = common_builder.Phi(2);
@@ -1580,6 +1580,9 @@
   //   }
   //   return a;
   // }
+  op = common_builder.Start(0);
+  Node* n0 = graph.NewNode(op);
+  USE(n0);
   Node* nil = graph.NewNode(common_builder.Dead());
   op = common_builder.End();
   Node* n22 = graph.NewNode(op, nil);
@@ -1591,7 +1594,7 @@
   Node* n9 = graph.NewNode(op, nil, nil, nil);
   USE(n9);
   op = common_builder.Parameter(0);
-  Node* n2 = graph.NewNode(op);
+  Node* n2 = graph.NewNode(op, n0);
   USE(n2);
   n9->ReplaceInput(0, n2);
   op = js_builder.Add();
@@ -1605,16 +1608,13 @@
   Node* n10 = graph.NewNode(op, nil, nil, nil);
   USE(n10);
   op = common_builder.Parameter(0);
-  Node* n3 = graph.NewNode(op);
+  Node* n3 = graph.NewNode(op, n0);
   USE(n3);
   n10->ReplaceInput(0, n3);
   n10->ReplaceInput(1, n10);
   op = common_builder.Loop(2);
   Node* n7 = graph.NewNode(op, nil, nil);
   USE(n7);
-  op = common_builder.Start();
-  Node* n0 = graph.NewNode(op);
-  USE(n0);
   n7->ReplaceInput(0, n0);
   op = common_builder.IfTrue();
   Node* n17 = graph.NewNode(op, nil);
@@ -1656,7 +1656,7 @@
   Node* n11 = graph.NewNode(op, nil, nil, nil);
   USE(n11);
   op = common_builder.Parameter(0);
-  Node* n4 = graph.NewNode(op);
+  Node* n4 = graph.NewNode(op, n0);
   USE(n4);
   n11->ReplaceInput(0, n4);
   n11->ReplaceInput(1, n11);

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to