Changeset View
Changeset View
Standalone View
Standalone View
mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-yaml-gen.cpp
Show First 20 Lines • Show All 716 Lines • ▼ Show 20 Lines | if (llvm::any_of(opConfig.structuredOp->args, [](LinalgOperandDef &arg) { | ||||
for (LinalgOperandDef &arg : opConfig.structuredOp->args) { | for (LinalgOperandDef &arg : opConfig.structuredOp->args) { | ||||
static const char paramFmt[] = "\"Attribute\":${0}"; | static const char paramFmt[] = "\"Attribute\":${0}"; | ||||
static const char stmtFmt[] = "$_state.addAttribute(\"{0}\", {0});"; | static const char stmtFmt[] = "$_state.addAttribute(\"{0}\", {0});"; | ||||
// Add the type conversion attributes to the op definition and builders. | // Add the type conversion attributes to the op definition and builders. | ||||
if (isFunctionAttribute(arg.kind)) { | if (isFunctionAttribute(arg.kind)) { | ||||
assert(arg.defaultFn); | assert(arg.defaultFn); | ||||
std::string enumName = convertOperandKindToEnumName(arg.kind); | std::string enumName = convertOperandKindToEnumName(arg.kind); | ||||
static const char typeFmt[] = "{0}::{1}"; | static const char typeFmt[] = "{0}::{1}"; | ||||
static const char defFmt[] = "DefaultValuedAttr<{0}, \"{1}\">:${2}"; | static const char defFmt[] = "DefaultValuedOptionalAttr<{0}, \"{1}\">:${2}"; | ||||
attrDefs.push_back(llvm::formatv( | attrDefs.push_back(llvm::formatv( | ||||
defFmt, llvm::formatv("{0}Attr", enumName), | defFmt, llvm::formatv("{0}Attr", enumName), | ||||
llvm::formatv(typeFmt, enumName, arg.defaultFn), arg.name)); | llvm::formatv(typeFmt, enumName, arg.defaultFn), arg.name)); | ||||
attrParams.push_back(llvm::formatv(paramFmt, arg.name)); | attrParams.push_back(llvm::formatv(paramFmt, arg.name)); | ||||
attrStmts.push_back(llvm::formatv(stmtFmt, arg.name)); | attrStmts.push_back(llvm::formatv(stmtFmt, arg.name)); | ||||
} | } | ||||
// Add the index attributes to the op definition and builders. | // Add the index attributes to the op definition and builders. | ||||
if (arg.kind == LinalgOperandDefKind::IndexAttr) { | if (arg.kind == LinalgOperandDefKind::IndexAttr) { | ||||
assert(arg.indexAttrMap.has_value()); | assert(arg.indexAttrMap.has_value()); | ||||
assert(arg.defaultIndices.has_value()); | assert(arg.defaultIndices.has_value()); | ||||
size_t size = arg.indexAttrMap->affineMap().getNumResults(); | size_t size = arg.indexAttrMap->affineMap().getNumResults(); | ||||
assert(arg.defaultIndices.value().size() == size); | assert(arg.defaultIndices.value().size() == size); | ||||
static const char typeFmt[] = "RankedI64ElementsAttr<[{0}]>"; | static const char typeFmt[] = "RankedI64ElementsAttr<[{0}]>"; | ||||
static const char defFmt[] = "DefaultValuedAttr<{0}, \"{ {1} }\">:${2}"; | static const char defFmt[] = "DefaultValuedOptionalAttr<{0}, \"{ {1} }\">:${2}"; | ||||
std::string defaultVals; | std::string defaultVals; | ||||
llvm::raw_string_ostream ss(defaultVals); | llvm::raw_string_ostream ss(defaultVals); | ||||
llvm::interleave( | llvm::interleave( | ||||
arg.defaultIndices.value(), ss, | arg.defaultIndices.value(), ss, | ||||
[&](int64_t val) { ss << "static_cast<int64_t>(" << val << ")"; }, | [&](int64_t val) { ss << "static_cast<int64_t>(" << val << ")"; }, | ||||
", "); | ", "); | ||||
attrDefs.push_back(llvm::formatv(defFmt, llvm::formatv(typeFmt, size), | attrDefs.push_back(llvm::formatv(defFmt, llvm::formatv(typeFmt, size), | ||||
ss.str(), arg.name)); | ss.str(), arg.name)); | ||||
▲ Show 20 Lines • Show All 514 Lines • Show Last 20 Lines |