| Index: src/compiler/node.cc
|
| diff --git a/src/compiler/node.cc b/src/compiler/node.cc
|
| index 9a12fe88c67de05921a4b14ae63d049f85053df0..8f44c24fd2117018dc28d0181e046d1378611d94 100644
|
| --- a/src/compiler/node.cc
|
| +++ b/src/compiler/node.cc
|
| @@ -3,6 +3,7 @@
|
| // found in the LICENSE file.
|
|
|
| #include "src/compiler/node.h"
|
| +
|
| #include "src/compiler/graph.h"
|
| #include "src/zone.h"
|
|
|
| @@ -10,16 +11,14 @@ namespace v8 {
|
| namespace internal {
|
| namespace compiler {
|
|
|
| -Node::Node(Graph* graph, int input_count, int reserve_input_count)
|
| - : input_count_(input_count),
|
| - reserve_input_count_(reserve_input_count),
|
| - has_appendable_inputs_(false),
|
| - use_count_(0),
|
| - first_use_(NULL),
|
| - last_use_(NULL) {
|
| - DCHECK(reserve_input_count <= kMaxReservedInputs);
|
| +Node::Node(NodeId id, int input_count, int reserved_input_count)
|
| + : id_(id),
|
| + bit_field_(InputCountField::encode(input_count) |
|
| + ReservedInputCountField::encode(reserved_input_count) |
|
| + HasAppendableInputsField::encode(false)),
|
| + first_use_(nullptr),
|
| + last_use_(nullptr) {
|
| inputs_.static_ = reinterpret_cast<Input*>(this + 1);
|
| - id_ = graph->NextNodeID();
|
| }
|
|
|
|
|
| @@ -32,7 +31,8 @@ Node* Node::New(Graph* graph, int input_count, Node** inputs,
|
| int size = static_cast<int>(node_size + inputs_size + uses_size);
|
| Zone* zone = graph->zone();
|
| void* buffer = zone->New(size);
|
| - Node* result = new (buffer) Node(graph, input_count, reserve_input_count);
|
| + Node* result =
|
| + new (buffer) Node(graph->NextNodeID(), input_count, reserve_input_count);
|
| Input* input =
|
| reinterpret_cast<Input*>(reinterpret_cast<char*>(buffer) + node_size);
|
| Use* use =
|
| @@ -84,6 +84,26 @@ Node* Node::FindProjection(size_t projection_index) {
|
| }
|
|
|
|
|
| +int Node::UseCount() const {
|
| + int use_count = 0;
|
| + for (const Use* use = first_use_; use; use = use->next) {
|
| + ++use_count;
|
| + }
|
| + return use_count;
|
| +}
|
| +
|
| +
|
| +Node* Node::UseAt(int index) const {
|
| + DCHECK_LE(0, index);
|
| + DCHECK_LT(index, UseCount());
|
| + Use* current = first_use_;
|
| + while (index-- != 0) {
|
| + current = current->next;
|
| + }
|
| + return current->from;
|
| +}
|
| +
|
| +
|
| std::ostream& operator<<(std::ostream& os, const Node& n) {
|
| os << n.id() << ": " << *n.op();
|
| if (n.InputCount() > 0) {
|
|
|