1// Copyright 2013 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "src/compiler/node.h"
6
7#include "src/compiler/generic-node-inl.h"
8
9namespace v8 {
10namespace internal {
11namespace compiler {
12
13void Node::Kill() {
14  DCHECK_NOT_NULL(op());
15  RemoveAllInputs();
16  DCHECK(uses().empty());
17}
18
19
20void Node::CollectProjections(NodeVector* projections) {
21  for (size_t i = 0; i < projections->size(); i++) {
22    (*projections)[i] = NULL;
23  }
24  for (UseIter i = uses().begin(); i != uses().end(); ++i) {
25    if ((*i)->opcode() != IrOpcode::kProjection) continue;
26    size_t index = OpParameter<size_t>(*i);
27    DCHECK_LT(index, projections->size());
28    DCHECK_EQ(NULL, (*projections)[index]);
29    (*projections)[index] = *i;
30  }
31}
32
33
34Node* Node::FindProjection(size_t projection_index) {
35  for (UseIter i = uses().begin(); i != uses().end(); ++i) {
36    if ((*i)->opcode() == IrOpcode::kProjection &&
37        OpParameter<size_t>(*i) == projection_index) {
38      return *i;
39    }
40  }
41  return NULL;
42}
43
44
45OStream& operator<<(OStream& os, const Operator& op) { return op.PrintTo(os); }
46
47
48OStream& operator<<(OStream& os, const Node& n) {
49  os << n.id() << ": " << *n.op();
50  if (n.op()->InputCount() != 0) {
51    os << "(";
52    for (int i = 0; i < n.op()->InputCount(); ++i) {
53      if (i != 0) os << ", ";
54      os << n.InputAt(i)->id();
55    }
56    os << ")";
57  }
58  return os;
59}
60
61}  // namespace compiler
62}  // namespace internal
63}  // namespace v8
64