Skip to content

Commit fb5047f

Browse files
[mlir][sparse] Remove old syntax (#69624)
1 parent a2288a8 commit fb5047f

File tree

1 file changed

+18
-91
lines changed

1 file changed

+18
-91
lines changed

mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp

Lines changed: 18 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -415,28 +415,6 @@ SparseTensorEncodingAttr::getStaticLvlSliceStride(Level lvl) const {
415415
return getStaticDimSliceStride(toOrigDim(*this, lvl));
416416
}
417417

418-
const static DimLevelType validDLTs[] = {DimLevelType::Dense,
419-
DimLevelType::TwoOutOfFour,
420-
DimLevelType::Compressed,
421-
DimLevelType::CompressedNu,
422-
DimLevelType::CompressedNo,
423-
DimLevelType::CompressedNuNo,
424-
DimLevelType::Singleton,
425-
DimLevelType::SingletonNu,
426-
DimLevelType::SingletonNo,
427-
DimLevelType::SingletonNuNo,
428-
DimLevelType::LooseCompressed,
429-
DimLevelType::LooseCompressedNu,
430-
DimLevelType::LooseCompressedNo,
431-
DimLevelType::LooseCompressedNuNo};
432-
433-
static std::optional<DimLevelType> parseDLT(StringRef str) {
434-
for (DimLevelType dlt : validDLTs)
435-
if (str == toMLIRString(dlt))
436-
return dlt;
437-
return std::nullopt;
438-
}
439-
440418
Attribute SparseTensorEncodingAttr::parse(AsmParser &parser, Type type) {
441419
#define RETURN_ON_FAIL(stmt) \
442420
if (failed(stmt)) { \
@@ -459,8 +437,7 @@ Attribute SparseTensorEncodingAttr::parse(AsmParser &parser, Type type) {
459437
unsigned posWidth = 0;
460438
unsigned crdWidth = 0;
461439
StringRef attrName;
462-
SmallVector<StringRef, 6> keys = {"lvlTypes", "dimToLvl", "posWidth",
463-
"crdWidth", "dimSlices", "map"};
440+
SmallVector<StringRef, 3> keys = {"map", "posWidth", "crdWidth"};
464441
while (succeeded(parser.parseOptionalKeyword(&attrName))) {
465442
// Detect admissible keyword.
466443
auto *it = find(keys, attrName);
@@ -473,81 +450,16 @@ Attribute SparseTensorEncodingAttr::parse(AsmParser &parser, Type type) {
473450
RETURN_ON_FAIL(parser.parseEqual())
474451
// Dispatch on keyword.
475452
switch (keyWordIndex) {
476-
case 0: { // lvlTypes
477-
Attribute attr;
478-
RETURN_ON_FAIL(parser.parseAttribute(attr));
479-
auto arrayAttr = llvm::dyn_cast<ArrayAttr>(attr);
480-
ERROR_IF(!arrayAttr, "expected an array for lvlTypes")
481-
for (auto i : arrayAttr) {
482-
auto strAttr = llvm::dyn_cast<StringAttr>(i);
483-
ERROR_IF(!strAttr, "expected a string value in lvlTypes")
484-
auto strVal = strAttr.getValue();
485-
if (auto optDLT = parseDLT(strVal)) {
486-
lvlTypes.push_back(optDLT.value());
487-
} else {
488-
parser.emitError(parser.getNameLoc(), "unexpected level-type: ")
489-
<< strVal;
490-
return {};
491-
}
492-
}
493-
break;
494-
}
495-
case 1: { // dimToLvl
496-
Attribute attr;
497-
RETURN_ON_FAIL(parser.parseAttribute(attr))
498-
auto affineAttr = llvm::dyn_cast<AffineMapAttr>(attr);
499-
ERROR_IF(!affineAttr, "expected an affine map for dimToLvl")
500-
dimToLvl = affineAttr.getValue();
501-
break;
502-
}
503-
case 2: { // posWidth
504-
Attribute attr;
505-
RETURN_ON_FAIL(parser.parseAttribute(attr))
506-
auto intAttr = llvm::dyn_cast<IntegerAttr>(attr);
507-
ERROR_IF(!intAttr, "expected an integral position bitwidth")
508-
posWidth = intAttr.getInt();
509-
break;
510-
}
511-
case 3: { // crdWidth
512-
Attribute attr;
513-
RETURN_ON_FAIL(parser.parseAttribute(attr))
514-
auto intAttr = llvm::dyn_cast<IntegerAttr>(attr);
515-
ERROR_IF(!intAttr, "expected an integral index bitwidth")
516-
crdWidth = intAttr.getInt();
517-
break;
518-
}
519-
case 4: { // dimSlices
520-
RETURN_ON_FAIL(parser.parseLSquare())
521-
// Dispatches to DimSliceAttr to skip mnemonic
522-
bool finished = false;
523-
while (auto attr = SparseTensorDimSliceAttr::parse(parser, nullptr)) {
524-
auto sliceAttr = llvm::cast<SparseTensorDimSliceAttr>(attr);
525-
dimSlices.push_back(sliceAttr);
526-
if (parser.parseOptionalComma().failed()) {
527-
finished = true;
528-
break;
529-
}
530-
}
531-
// Wrong when parsing slices
532-
if (!finished)
533-
return {};
534-
RETURN_ON_FAIL(parser.parseRSquare())
535-
break;
536-
}
537-
case 5: { // map (new STEA surface syntax)
453+
case 0: { // map
538454
ir_detail::DimLvlMapParser cParser(parser);
539455
auto res = cParser.parseDimLvlMap();
540456
RETURN_ON_FAIL(res);
541-
// TODO: use DimLvlMap directly as storage representation, rather
542-
// than converting things over.
543457
const auto &dlm = *res;
544458

545-
ERROR_IF(!lvlTypes.empty(), "Cannot mix `lvlTypes` with `map`")
546459
const Level lvlRank = dlm.getLvlRank();
547460
for (Level lvl = 0; lvl < lvlRank; lvl++)
548461
lvlTypes.push_back(dlm.getLvlType(lvl));
549462

550-
ERROR_IF(!dimSlices.empty(), "Cannot mix `dimSlices` with `map`")
551463
const Dimension dimRank = dlm.getDimRank();
552464
for (Dimension dim = 0; dim < dimRank; dim++)
553465
dimSlices.push_back(dlm.getDimSlice(dim));
@@ -567,11 +479,26 @@ Attribute SparseTensorEncodingAttr::parse(AsmParser &parser, Type type) {
567479
dimSlices.clear();
568480
}
569481

570-
ERROR_IF(dimToLvl, "Cannot mix `dimToLvl` with `map`")
571482
dimToLvl = dlm.getDimToLvlMap(parser.getContext());
572483
lvlToDim = dlm.getLvlToDimMap(parser.getContext());
573484
break;
574485
}
486+
case 1: { // posWidth
487+
Attribute attr;
488+
RETURN_ON_FAIL(parser.parseAttribute(attr))
489+
auto intAttr = llvm::dyn_cast<IntegerAttr>(attr);
490+
ERROR_IF(!intAttr, "expected an integral position bitwidth")
491+
posWidth = intAttr.getInt();
492+
break;
493+
}
494+
case 2: { // crdWidth
495+
Attribute attr;
496+
RETURN_ON_FAIL(parser.parseAttribute(attr))
497+
auto intAttr = llvm::dyn_cast<IntegerAttr>(attr);
498+
ERROR_IF(!intAttr, "expected an integral index bitwidth")
499+
crdWidth = intAttr.getInt();
500+
break;
501+
}
575502
} // switch
576503
// Only last item can omit the comma.
577504
if (parser.parseOptionalComma().failed())

0 commit comments

Comments
 (0)