return op->accept(v);
}
+pp::LinearDocument describe(const coco::Padding2D *pad)
+{
+ pp::LinearDocument doc;
+
+ doc.append("top: ", pad->top());
+ doc.append("bottom: ", pad->bottom());
+ doc.append("left: ", pad->left());
+ doc.append("right: ", pad->right());
+
+ return doc;
+}
+
+pp::LinearDocument describe(const coco::Stride2D *stride)
+{
+ pp::LinearDocument doc;
+
+ doc.append("vertical: ", stride->vertical());
+ doc.append("horizontal ", stride->horizontal());
+
+ return doc;
+}
+
+pp::LinearDocument describe(const coco::Conv2D *conv)
+{
+ pp::LinearDocument doc;
+
+ doc.append("arg: ", conv->arg());
+ doc.append("ker: ", conv->ker());
+ doc.append("group: ", conv->group());
+
+ if (auto pad = conv->pad())
+ {
+ auto set = [pad](pp::LinearDocument &doc) { doc.append(describe(pad)); };
+ auto desc = section("pad").build(set);
+ doc.append(desc);
+ }
+
+ if (auto stride = conv->stride())
+ {
+ auto set = [stride](pp::LinearDocument &doc) { doc.append(describe(stride)); };
+ auto desc = section("stride").build(set);
+ doc.append(desc);
+ }
+
+ return doc;
+}
+
pp::LinearDocument describe(const coco::Op *op)
{
pp::LinearDocument doc;
doc.append("parent(instr): ", op->parent());
doc.append("up(op): ", op->up());
+ if (auto conv = op->asConv2D())
+ {
+ auto set = [conv](pp::LinearDocument &doc) { doc.append(describe(conv)); };
+ auto desc = section("conv2d").build(set);
+ doc.append(desc);
+ }
+
return doc;
}