std::string name;
std::string cppOpName;
Optional<std::string> doc;
+ SmallVector<std::string> implements;
};
struct SerializedAffineMap {
io.mapRequired("name", info.name);
io.mapRequired("cpp_op_name", info.cppOpName);
io.mapOptional("doc", info.doc);
+ io.mapOptional("implements", info.implements);
}
};
// Op definition for {0}
//===----------------------------------------------------------------------===//
-def {0} : LinalgStructuredBase_Op<"{1}", [
+def {0} : LinalgStructuredBase_Op<"{1}", !listconcat([
AttrSizedOperandSegments,
DeclareOpInterfaceMethods<MemoryEffectsOpInterface>,
- SingleBlockImplicitTerminator<"YieldOp">
- /*extraInterfaces=*/{2}]> {
+ SingleBlockImplicitTerminator<"YieldOp">],
+ /*extraInterfaces=*/[{2}])> {
{3}
let arguments = (ins
Variadic<AnyShaped>:$inputs,
doc = llvm::formatv(docFmt, summary.trim(), description.trim());
}
+ interfaceNameList = interleaveToString(opConfig.metadata->implements, ", ");
+
os << llvm::formatv(structuredOpOdsHeaderFormat, opConfig.metadata->cppOpName,
opConfig.metadata->name, interfaceNameList, doc, attrList,
opConfig.structuredOp->args.size(), attrBuilder,