#include "locop/FormattedGraph.h"
+#include <loco/IR/CanonicalOpcode.h>
+#include <loco/IR/CanonicalDialect.h>
+
#include <pp/Format.h>
#include <map>
#include <set>
+#include <cassert>
+
namespace
{
+/**
+ * @brief Return the opname as "<dialect>.<op>"
+ */
std::string opname(loco::Node *node)
{
- // TODO Use Visitor later
- if (dynamic_cast<loco::Push *>(node))
- {
- return "Push";
- }
-
- if (dynamic_cast<loco::Pull *>(node))
+ if (node->dialect() == loco::CanonicalDialect::get())
{
- return "Pull";
- }
+ auto canonical_node = dynamic_cast<loco::CanonicalNode *>(node);
- if (dynamic_cast<loco::MaxPool2D *>(node))
- {
- return "MaxPool2D";
- }
+ assert(canonical_node != nullptr);
- if (dynamic_cast<loco::FeatureEncode *>(node))
- {
- return "FeatureEncode";
+ switch (canonical_node->opcode())
+ {
+#define CANONICAL_NODE(OPCODE, CLASS) \
+ case loco::CanonicalOpcode::OPCODE: \
+ return "canonical." #OPCODE;
+#include "loco/IR/CanonicalNodes.lst"
+#undef CANONICAL_NODE
+ default:
+ break;
+ };
+
+ return "canonical."
+ "Invalid";
}
- return "Unknown";
+ return "unknown."
+ "Unknown";
}
} // namespace