1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2013 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include <functional> 6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/v8.h" 8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "graph-tester.h" 10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/compiler/generic-node-inl.h" 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/compiler/node.h" 12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/compiler/operator.h" 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochusing namespace v8::internal; 15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochusing namespace v8::internal::compiler; 16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochstatic SimpleOperator dummy_operator(IrOpcode::kParameter, Operator::kNoWrite, 18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 0, 0, "dummy"); 19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(NodeAllocation) { 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator); 24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n2->id() != n1->id()); 25b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 26b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 27b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(NodeWithOpcode) { 29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator); 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n1->op() == &dummy_operator); 33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n2->op() == &dummy_operator); 34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 35b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 36b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(NodeInputs1) { 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n2->InputCount()); 42b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0 == n2->InputAt(0)); 43b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 44b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 45b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 46b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(NodeInputs2) { 47b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 48b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 49b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 50b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0, n1); 51b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 52b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0 == n2->InputAt(0)); 53b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n1 == n2->InputAt(1)); 54b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 55b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 56b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 57b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(NodeInputs3) { 58b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 59b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 60b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 61b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0, n1, n1); 62b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(3, n2->InputCount()); 63b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0 == n2->InputAt(0)); 64b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n1 == n2->InputAt(1)); 65b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n1 == n2->InputAt(2)); 66b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 67b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 68b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 69b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(NodeInputIteratorEmpty) { 70b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 71b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 72b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Inputs::iterator i(n1->inputs().begin()); 73b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int input_count = 0; 74b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (; i != n1->inputs().end(); ++i) { 75b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch input_count++; 76b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 77b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, input_count); 78b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 79b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 80b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 81b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(NodeInputIteratorOne) { 82b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 83b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 84b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 85b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Inputs::iterator i(n1->inputs().begin()); 86b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->InputCount()); 87b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n0, *i); 88b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i; 89b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n1->inputs().end() == i); 90b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 91b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 92b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 93b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(NodeUseIteratorEmpty) { 94b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 95b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 96b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Uses::iterator i(n1->uses().begin()); 97b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int use_count = 0; 98b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (; i != n1->uses().end(); ++i) { 99b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Edge edge(i.edge()); 100b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch USE(edge); 101b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch use_count++; 102b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 103b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, use_count); 104b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 105b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 106b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 107b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(NodeUseIteratorOne) { 108b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 109b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 110b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 111b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Uses::iterator i(n0->uses().begin()); 112b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n1, *i); 113b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i; 114b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0->uses().end() == i); 115b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 116b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 117b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 118b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(NodeUseIteratorReplaceNoUses) { 119b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 120b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 121b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 122b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator); 123b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n3 = graph.NewNode(&dummy_operator, n2); 124b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n0->ReplaceUses(n1); 125b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0->uses().begin() == n0->uses().end()); 126b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n0->ReplaceUses(n2); 127b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0->uses().begin() == n0->uses().end()); 128b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch USE(n3); 129b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 130b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 131b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 132b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(NodeUseIteratorReplaceUses) { 133b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 134b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 135b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 136b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 137b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n3 = graph.NewNode(&dummy_operator); 138b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Uses::iterator i1(n0->uses().begin()); 139b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n1, *i1); 140b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i1; 141b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n2, *i1); 142b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n0->ReplaceUses(n3); 143b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Uses::iterator i2(n3->uses().begin()); 144b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n1, *i2); 145b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i2; 146b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n2, *i2); 147b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Inputs::iterator i3(n1->inputs().begin()); 148b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n3, *i3); 149b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i3; 150b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n1->inputs().end() == i3); 151b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Inputs::iterator i4(n2->inputs().begin()); 152b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n3, *i4); 153b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i4; 154b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n2->inputs().end() == i4); 155b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 156b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 157b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 158b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(NodeUseIteratorReplaceUsesSelf) { 159b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 160b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 161b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 162b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n3 = graph.NewNode(&dummy_operator); 163b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 164b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->ReplaceInput(0, n1); // Create self-reference. 165b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 166b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Uses::iterator i1(n1->uses().begin()); 167b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n1, *i1); 168b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 169b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->ReplaceUses(n3); 170b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 171b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n1->uses().begin() == n1->uses().end()); 172b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 173b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Uses::iterator i2(n3->uses().begin()); 174b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n1, *i2); 175b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i2; 176b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n1->uses().end() == i2); 177b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 178b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 179b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 180b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(ReplaceInput) { 181b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 182b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 183b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 184b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator); 185b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n3 = graph.NewNode(&dummy_operator, n0, n1, n2); 186b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Inputs::iterator i1(n3->inputs().begin()); 187b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0 == *i1); 188b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n0, n3->InputAt(0)); 189b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i1; 190b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n1, *i1); 191b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n1, n3->InputAt(1)); 192b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i1; 193b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n2, *i1); 194b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n2, n3->InputAt(2)); 195b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i1; 196b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(i1 == n3->inputs().end()); 197b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 198b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Uses::iterator i2(n1->uses().begin()); 199b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n3, *i2); 200b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i2; 201b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(i2 == n1->uses().end()); 202b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 203b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n4 = graph.NewNode(&dummy_operator); 204b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Uses::iterator i3(n4->uses().begin()); 205b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(i3 == n4->uses().end()); 206b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 207b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n3->ReplaceInput(1, n4); 208b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 209b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Uses::iterator i4(n1->uses().begin()); 210b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(i4 == n1->uses().end()); 211b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 212b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Uses::iterator i5(n4->uses().begin()); 213b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n3, *i5); 214b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i5; 215b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(i5 == n4->uses().end()); 216b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 217b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Inputs::iterator i6(n3->inputs().begin()); 218b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0 == *i6); 219b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n0, n3->InputAt(0)); 220b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i6; 221b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n4, *i6); 222b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n4, n3->InputAt(1)); 223b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i6; 224b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n2, *i6); 225b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n2, n3->InputAt(2)); 226b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++i6; 227b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(i6 == n3->inputs().end()); 228b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 229b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 230b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 231b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(OwnedBy) { 232b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 233b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 234b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 235b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 236b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 237b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 238b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n0->OwnedBy(n1)); 239b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n1->OwnedBy(n0)); 240b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 241b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 242b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0->OwnedBy(n2)); 243b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n2->OwnedBy(n0)); 244b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 245b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n3 = graph.NewNode(&dummy_operator, n0); 246b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n0->OwnedBy(n2)); 247b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n0->OwnedBy(n3)); 248b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n2->OwnedBy(n0)); 249b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n3->OwnedBy(n0)); 250b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 251b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 252b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 253b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 254b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 255b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0->OwnedBy(n1)); 256b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n1->OwnedBy(n0)); 257b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 258b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n0->OwnedBy(n1)); 259b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n0->OwnedBy(n2)); 260b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n1->OwnedBy(n0)); 261b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n1->OwnedBy(n2)); 262b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n2->OwnedBy(n0)); 263b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n2->OwnedBy(n1)); 264b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 265b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n3 = graph.NewNode(&dummy_operator); 266b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->ReplaceInput(0, n3); 267b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 268b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0->OwnedBy(n1)); 269b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n1->OwnedBy(n0)); 270b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n1->OwnedBy(n0)); 271b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n1->OwnedBy(n2)); 272b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n2->OwnedBy(n0)); 273b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n2->OwnedBy(n1)); 274b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n3->OwnedBy(n2)); 275b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!n2->OwnedBy(n3)); 276b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 277b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 278b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 279b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 280b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(Uses) { 281b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 282b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 283b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 284b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 285b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 286b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch printf("A: %d vs %d\n", n0->UseAt(0)->id(), n1->id()); 287b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0->UseAt(0) == n1); 288b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 289b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n0->UseCount()); 290b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch printf("B: %d vs %d\n", n0->UseAt(1)->id(), n2->id()); 291b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0->UseAt(1) == n2); 292b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n3 = graph.NewNode(&dummy_operator, n0); 293b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(3, n0->UseCount()); 294b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0->UseAt(2) == n3); 295b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 296b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 297b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 298b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(Inputs) { 299b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 300b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 301b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 302b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 303b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 304b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n3 = graph.NewNode(&dummy_operator, n0, n1, n2); 305b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(3, n3->InputCount()); 306b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n3->InputAt(0) == n0); 307b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n3->InputAt(1) == n1); 308b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n3->InputAt(2) == n2); 309b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n4 = graph.NewNode(&dummy_operator, n0, n1, n2); 310b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n3->AppendInput(graph.zone(), n4); 311b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(4, n3->InputCount()); 312b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n3->InputAt(0) == n0); 313b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n3->InputAt(1) == n1); 314b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n3->InputAt(2) == n2); 315b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n3->InputAt(3) == n4); 316b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n5 = graph.NewNode(&dummy_operator, n4); 317b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n3->AppendInput(graph.zone(), n4); 318b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(5, n3->InputCount()); 319b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n3->InputAt(0) == n0); 320b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n3->InputAt(1) == n1); 321b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n3->InputAt(2) == n2); 322b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n3->InputAt(3) == n4); 323b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n3->InputAt(4) == n4); 324b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 325b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Make sure uses have been hooked op correctly. 326b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Uses uses(n4->uses()); 327b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Uses::iterator current = uses.begin(); 328b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current != uses.end()); 329b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(*current == n3); 330b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++current; 331b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current != uses.end()); 332b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(*current == n5); 333b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++current; 334b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current != uses.end()); 335b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(*current == n3); 336b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++current; 337b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current == uses.end()); 338b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 339b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 340b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 341b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(RemoveInput) { 342b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 343b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 344b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 345b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 346b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0, n1); 347b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 348b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->RemoveInput(0); 349b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n1->InputCount()); 350b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 351b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 352b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->RemoveInput(0); 353b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n2->InputCount()); 354b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 355b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->UseCount()); 356b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 357b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->RemoveInput(0); 358b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->InputCount()); 359b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 360b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 361b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 362b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(AppendInputsAndIterator) { 363b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 364b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 365b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 366b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 367b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0, n1); 368b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 369b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Inputs inputs(n2->inputs()); 370b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Inputs::iterator current = inputs.begin(); 371b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current != inputs.end()); 372b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(*current == n0); 373b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++current; 374b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current != inputs.end()); 375b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(*current == n1); 376b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++current; 377b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current == inputs.end()); 378b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 379b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n3 = graph.NewNode(&dummy_operator); 380b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n3); 381b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch inputs = n2->inputs(); 382b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch current = inputs.begin(); 383b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current != inputs.end()); 384b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(*current == n0); 385b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, current.index()); 386b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++current; 387b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current != inputs.end()); 388b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(*current == n1); 389b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, current.index()); 390b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++current; 391b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current != inputs.end()); 392b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(*current == n3); 393b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, current.index()); 394b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++current; 395b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current == inputs.end()); 396b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 397b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 398b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 399b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(NullInputsSimple) { 400b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 401b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 402b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 403b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 404b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0, n1); 405b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 406b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 407b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0 == n2->InputAt(0)); 408b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n1 == n2->InputAt(1)); 409b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n0->UseCount()); 410b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->ReplaceInput(0, NULL); 411b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(NULL == n2->InputAt(0)); 412b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n1 == n2->InputAt(1)); 413b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 414b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 415b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 416b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 417b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(NullInputsAppended) { 418b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 419b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 420b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 421b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 422b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 423b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n3 = graph.NewNode(&dummy_operator, n0); 424b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n3->AppendInput(graph.zone(), n1); 425b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n3->AppendInput(graph.zone(), n2); 426b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(3, n3->InputCount()); 427b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 428b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0 == n3->InputAt(0)); 429b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n1 == n3->InputAt(1)); 430b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n2 == n3->InputAt(2)); 431b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->UseCount()); 432b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n3->ReplaceInput(1, NULL); 433b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n0 == n3->InputAt(0)); 434b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(NULL == n3->InputAt(1)); 435b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(n2 == n3->InputAt(2)); 436b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n1->UseCount()); 437b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 438b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 439b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 440b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(ReplaceUsesFromAppendedInputs) { 441b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 442b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 443b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 444b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 445b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 446b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n3 = graph.NewNode(&dummy_operator); 447b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n1); 448b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n0); 449b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n3->UseCount()); 450b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(3, n0->UseCount()); 451b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n0->ReplaceUses(n3); 452b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 453b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(3, n3->UseCount()); 454b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 455b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Uses uses(n3->uses()); 456b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node::Uses::iterator current = uses.begin(); 457b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current != uses.end()); 458b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(*current == n1); 459b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++current; 460b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current != uses.end()); 461b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(*current == n2); 462b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++current; 463b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current != uses.end()); 464b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(*current == n2); 465b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ++current; 466b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(current == uses.end()); 467b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 468b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 469b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 470b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochtemplate <bool result> 471b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochstruct FixedPredicate { 472b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch bool operator()(const Node* node) const { return result; } 473b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 474b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 475b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 476b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(ReplaceUsesIfWithFixedPredicate) { 477b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 478b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 479b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 480b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 481b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 482b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n3 = graph.NewNode(&dummy_operator); 483b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 484b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 485b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->ReplaceUsesIf(FixedPredicate<true>(), n1); 486b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 487b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->ReplaceUsesIf(FixedPredicate<false>(), n1); 488b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 489b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 490b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n3->UseCount()); 491b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n3->ReplaceUsesIf(FixedPredicate<true>(), n1); 492b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n3->UseCount()); 493b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n3->ReplaceUsesIf(FixedPredicate<false>(), n1); 494b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n3->UseCount()); 495b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 496b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n0->UseCount()); 497b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n1->UseCount()); 498b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n0->ReplaceUsesIf(FixedPredicate<false>(), n1); 499b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n0->UseCount()); 500b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n1->UseCount()); 501b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n0->ReplaceUsesIf(FixedPredicate<true>(), n1); 502b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 503b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n1->UseCount()); 504b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 505b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->AppendInput(graph.zone(), n1); 506b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(3, n1->UseCount()); 507b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->AppendInput(graph.zone(), n3); 508b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n3->UseCount()); 509b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n3->ReplaceUsesIf(FixedPredicate<true>(), n1); 510b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(4, n1->UseCount()); 511b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n3->UseCount()); 512b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->ReplaceUsesIf(FixedPredicate<false>(), n3); 513b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(4, n1->UseCount()); 514b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n3->UseCount()); 515b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 516b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 517b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 518b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(ReplaceUsesIfWithEqualTo) { 519b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 520b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 521b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 522b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 523b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0, n1); 524b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 525b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 526b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->ReplaceUsesIf(std::bind1st(std::equal_to<Node*>(), n1), n0); 527b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 528b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 529b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n0->UseCount()); 530b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->UseCount()); 531b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->ReplaceUsesIf(std::bind1st(std::equal_to<Node*>(), n0), n0); 532b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n0->UseCount()); 533b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->UseCount()); 534b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n0->ReplaceUsesIf(std::bind2nd(std::equal_to<Node*>(), n2), n1); 535b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 536b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n1->UseCount()); 537b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 538b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 539b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 540b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(ReplaceInputMultipleUses) { 541b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 542b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 543b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 544b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 545b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 546b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->ReplaceInput(0, n1); 547b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 548b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->UseCount()); 549b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 550b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n3 = graph.NewNode(&dummy_operator, n0); 551b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n3->ReplaceInput(0, n1); 552b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 553b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n1->UseCount()); 554b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 555b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 556b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 557b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(TrimInputCountInline) { 558b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 559b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 560b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 561b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 562b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 563b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->TrimInputCount(1); 564b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->InputCount()); 565b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n0, n1->InputAt(0)); 566b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 567b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 568b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 569b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 570b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 571b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 572b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->TrimInputCount(0); 573b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n1->InputCount()); 574b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 575b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 576b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 577b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 578b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 579b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 580b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0, n1); 581b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(2); 582b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 583b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 584b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->UseCount()); 585b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 586b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 587b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 588b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 589b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 590b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 591b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0, n1); 592b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(1); 593b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n2->InputCount()); 594b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 595b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n1->UseCount()); 596b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 597b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 598b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 599b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 600b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 601b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 602b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0, n1); 603b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(0); 604b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->InputCount()); 605b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 606b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n1->UseCount()); 607b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 608b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 609b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 610b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 611b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 612b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0, n0); 613b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(1); 614b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n2->InputCount()); 615b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 616b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 617b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 618b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 619b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 620b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 621b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0, n0); 622b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(0); 623b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->InputCount()); 624b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 625b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 626b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 627b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 628b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 629b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 630b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(TrimInputCountOutOfLine1) { 631b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 632b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 633b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 634b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 635b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 636b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->AppendInput(graph.zone(), n0); 637b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->TrimInputCount(1); 638b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->InputCount()); 639b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n0, n1->InputAt(0)); 640b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 641b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 642b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 643b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 644b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 645b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 646b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->AppendInput(graph.zone(), n0); 647b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->InputCount()); 648b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->TrimInputCount(0); 649b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n1->InputCount()); 650b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 651b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 652b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 653b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 654b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 655b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 656b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator); 657b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n0); 658b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n1); 659b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 660b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(2); 661b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 662b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n0, n2->InputAt(0)); 663b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n1, n2->InputAt(1)); 664b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 665b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->UseCount()); 666b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 667b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 668b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 669b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 670b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 671b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 672b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator); 673b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n0); 674b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n1); 675b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 676b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(1); 677b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n2->InputCount()); 678b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n0, n2->InputAt(0)); 679b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 680b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n1->UseCount()); 681b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 682b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 683b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 684b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 685b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 686b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 687b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator); 688b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n0); 689b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n1); 690b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 691b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(0); 692b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->InputCount()); 693b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 694b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n1->UseCount()); 695b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 696b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 697b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 698b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 699b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 700b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator); 701b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n0); 702b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n0); 703b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 704b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n0->UseCount()); 705b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(1); 706b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n2->InputCount()); 707b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 708b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 709b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 710b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 711b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 712b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 713b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator); 714b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n0); 715b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n0); 716b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 717b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n0->UseCount()); 718b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(0); 719b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->InputCount()); 720b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 721b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 722b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 723b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 724b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 725b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 726b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(TrimInputCountOutOfLine2) { 727b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 728b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 729b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 730b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 731b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 732b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 733b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n1); 734b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 735b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(2); 736b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 737b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n0, n2->InputAt(0)); 738b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n1, n2->InputAt(1)); 739b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 740b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->UseCount()); 741b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 742b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 743b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 744b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 745b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 746b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 747b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 748b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n1); 749b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 750b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(1); 751b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n2->InputCount()); 752b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(n0, n2->InputAt(0)); 753b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 754b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n1->UseCount()); 755b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 756b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 757b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 758b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 759b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 760b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator); 761b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 762b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n1); 763b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 764b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(0); 765b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->InputCount()); 766b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 767b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n1->UseCount()); 768b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 769b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 770b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 771b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 772b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 773b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 774b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n0); 775b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 776b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n0->UseCount()); 777b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(1); 778b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n2->InputCount()); 779b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 780b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 781b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 782b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 783b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 784b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 785b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2 = graph.NewNode(&dummy_operator, n0); 786b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n0); 787b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 788b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n0->UseCount()); 789b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->TrimInputCount(0); 790b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->InputCount()); 791b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 792b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n2->UseCount()); 793b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 794b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 795b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 796b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 797b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(RemoveAllInputs) { 798b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GraphTester graph; 799b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 800b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (int i = 0; i < 2; i++) { 801b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 802b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 803b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n2; 804b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (i == 0) { 805b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2 = graph.NewNode(&dummy_operator, n0, n1); 806b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else { 807b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2 = graph.NewNode(&dummy_operator, n0); 808b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->AppendInput(graph.zone(), n1); // with out-of-line input. 809b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 810b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 811b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n0->RemoveAllInputs(); 812b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->InputCount()); 813b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 814b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n0->UseCount()); 815b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->RemoveAllInputs(); 816b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->InputCount()); 817b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n0->UseCount()); 818b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(NULL, n1->InputAt(0)); 819b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 820b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->UseCount()); 821b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n2->RemoveAllInputs(); 822b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(2, n2->InputCount()); 823b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 824b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n1->UseCount()); 825b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(NULL, n2->InputAt(0)); 826b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(NULL, n2->InputAt(1)); 827b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 828b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 829b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { 830b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n0 = graph.NewNode(&dummy_operator); 831b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Node* n1 = graph.NewNode(&dummy_operator, n0); 832b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->ReplaceInput(0, n1); // self-reference. 833b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 834b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n0->UseCount()); 835b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->UseCount()); 836b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch n1->RemoveAllInputs(); 837b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(1, n1->InputCount()); 838b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, n1->UseCount()); 839b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(NULL, n1->InputAt(0)); 840b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 841b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 842