print uses in output
diff --git a/torch/csrc/jit/ir.cpp b/torch/csrc/jit/ir.cpp
index a5cff1d..a42a00c 100644
--- a/torch/csrc/jit/ir.cpp
+++ b/torch/csrc/jit/ir.cpp
@@ -23,16 +23,19 @@
return THPUtils_unpackString(name.get());
}
}
-
+std::ostream& operator<<(std::ostream & out, Node & n) {
+ if(auto s = n.cast<Select>())
+ out << "%" << s->base()->unique() << "." << s->offset();
+ else
+ out << "%" << n.unique();
+ return out;
+}
std::ostream& operator<<(std::ostream & out, const node_list & nodes) {
size_t i = 0;
for(auto n : nodes) {
if(i++ > 0)
out << ", ";
- if(auto s = n->cast<Select>())
- out << "%" << s->base()->unique() << "." << s->offset();
- else
- out << "%" << n->unique();
+ out << *n;
}
return out;
}
@@ -49,21 +52,28 @@
std::ostream& operator<<(std::ostream & out, Graph & g) {
out << "graph(" << g.inputs() << ") {\n";
for(auto n : g.nodes()) {
- if(!n->cast<Select>()) //improve readibility by printing selects inline
+ if(!n->cast<Select>()) { //improve readibility by printing selects inline
out << " %" << n->unique() << " = ";
- IR_IF(n,PythonOp)
- out << value->name();
- for (auto& scalar : value->scalar_args) {
- out << " " << scalar;
+ IR_IF(n,PythonOp)
+ out << value->name();
+ for (auto& scalar : value->scalar_args) {
+ out << " " << scalar;
+ }
+ IR_ELSEIF(SimpleMap)
+ out << value->op << "!";
+ IR_ELSE()
+ out << toString(n->kind()) << "??";
+ IR_END()
+ out << "(" << n->inputs() << "), uses = [";
+ size_t i = 0;
+ for(auto u : n->uses()) {
+ if(i++ > 0)
+ out << ", ";
+ out << *u.user << ".i" << u.offset;
}
- out << "(" << value->inputs() << ");\n";
- IR_ELSEIF(Select) // print selects inline to improve readability
- IR_ELSEIF(SimpleMap)
- out << value->op << "!(" << value->inputs() << ");\n";
- IR_ELSE()
- out << toString(n->kind()) << "(" << n->inputs() << ");\n";
- IR_END()
+ out << "];\n";
}
+ }
out << " return (" << g.outputs() << ");\n}\n";
return out;
}