[Mlir-commits] [mlir] [mlir][sparse] Print new syntax (PR #68130)
Aart Bik
llvmlistbot at llvm.org
Wed Oct 4 09:43:19 PDT 2023
================
@@ -586,31 +586,67 @@ Attribute SparseTensorEncodingAttr::parse(AsmParser &parser, Type type) {
}
void SparseTensorEncodingAttr::print(AsmPrinter &printer) const {
- // Print the struct-like storage in dictionary fashion.
- printer << "<{ lvlTypes = [ ";
- llvm::interleaveComma(getLvlTypes(), printer, [&](DimLevelType dlt) {
- printer << "\"" << toMLIRString(dlt) << "\"";
- });
- printer << " ]";
+ auto map = static_cast<AffineMap>(getDimToLvl());
+ // Empty affine map indicates identity map
+ if (!map) {
+ map = AffineMap::getMultiDimIdentityMap(getLvlTypes().size(), getContext());
+ }
+ printer << "<{ map = ";
+ printSymbol(map, printer);
+ printer << '(';
+ printDimension(map, printer, getDimSlices());
+ printer << ") -> (";
+ printLevel(map, printer, getLvlTypes());
+ printer << ')';
// Print remaining members only for non-default values.
- if (!isIdentity())
- printer << ", dimToLvl = affine_map<" << getDimToLvl() << ">";
if (getPosWidth())
printer << ", posWidth = " << getPosWidth();
if (getCrdWidth())
printer << ", crdWidth = " << getCrdWidth();
- if (!getDimSlices().empty()) {
- printer << ", dimSlices = [ ";
- llvm::interleaveComma(getDimSlices(), printer,
- [&](SparseTensorDimSliceAttr attr) {
- // Calls SparseTensorDimSliceAttr::print directly to
- // skip mnemonic.
- attr.print(printer);
- });
- printer << " ]";
+ printer << " }>";
+}
+
+void SparseTensorEncodingAttr::printSymbol(AffineMap &map,
+ AsmPrinter &printer) const {
+ if (map.getNumSymbols() != 0) {
+ printer << '[';
+ for (unsigned i = 0; i < map.getNumSymbols() - 1; ++i)
+ printer << 's' << i << ", ";
+ if (map.getNumSymbols() >= 1)
+ printer << 's' << map.getNumSymbols() - 1;
+ printer << ']';
}
+}
- printer << " }>";
+void SparseTensorEncodingAttr::printDimension(
+ AffineMap &map, AsmPrinter &printer,
+ ArrayRef<SparseTensorDimSliceAttr> dimSlices) const {
+ if (!dimSlices.empty()) {
+ for (unsigned i = 0; i < map.getNumDims() - 1; ++i)
+ printer << 'd' << i << " : " << dimSlices[i] << ", ";
+ if (map.getNumDims() >= 1)
+ printer << 'd' << map.getNumDims() - 1 << " : "
+ << dimSlices[map.getNumDims() - 1];
+ } else {
+ for (unsigned i = 0; i < map.getNumDims() - 1; ++i)
+ printer << 'd' << i << ", ";
+ if (map.getNumDims() >= 1)
+ printer << 'd' << map.getNumDims() - 1;
+ }
+}
+
+void SparseTensorEncodingAttr::printLevel(
+ AffineMap &map, AsmPrinter &printer,
+ ArrayRef<DimLevelType> lvlTypes) const {
+ for (unsigned i = 0; i < map.getNumResults() - 1; ++i) {
----------------
aartbik wrote:
same
https://github.com/llvm/llvm-project/pull/68130
More information about the Mlir-commits
mailing list