Skip to content

Conversation

@yinying-lisa-li
Copy link
Contributor

@yinying-lisa-li yinying-lisa-li commented Sep 11, 2023

Currently, dimlvlmap with identity affine map will be treated as empty affine map. But the new syntax would treat it as an actual identity affine map such as {d0} -> {d0}. This mismatch could raise an error when we are comparing sparse encodings.

Currently, dimlvlmap with identity Affine map will be treated as empty Affine map. But the new syntax would treat it as an actual identity Affine map such as {d0} -> {d0}. This mismatch could raise error in reshape rewriting.
@yinying-lisa-li yinying-lisa-li added bug Indicates an unexpected problem or unintended behavior mlir:sparse Sparse compiler in MLIR labels Sep 11, 2023
@yinying-lisa-li yinying-lisa-li requested a review from a team as a code owner September 11, 2023 22:49
@llvmbot
Copy link
Member

llvmbot commented Sep 11, 2023

@llvm/pr-subscribers-mlir-sparse

Changes

Currently, dimlvlmap with identity affine map will be treated as empty affine map. But the new syntax would treat it as an actual identity affine map such as {d0} -> {d0}. This mismatch could raise error in reshape rewriting.

Full diff: https://github.com/llvm/llvm-project/pull/66024.diff

1 Files Affected:

  • (modified) mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp (+6-2)
diff --git a/mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp b/mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp index 81302f200f686bb..05fce96043826f1 100644 --- a/mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp +++ b/mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp @@ -348,7 +348,9 @@ AffineMap DimLvlMap::getDimToLvlMap(MLIRContext *context) const { lvlAffines.reserve(getLvlRank()); for (const auto &lvlSpec : lvlSpecs) lvlAffines.push_back(lvlSpec.getExpr().getAffineExpr()); - return AffineMap::get(getDimRank(), getSymRank(), lvlAffines, context); + auto map = AffineMap::get(getDimRank(), getSymRank(), lvlAffines, context); + if (map.isIdentity()) return AffineMap(); + return map; } AffineMap DimLvlMap::getLvlToDimMap(MLIRContext *context) const { @@ -356,7 +358,9 @@ AffineMap DimLvlMap::getLvlToDimMap(MLIRContext *context) const { dimAffines.reserve(getDimRank()); for (const auto &dimSpec : dimSpecs) dimAffines.push_back(dimSpec.getExpr().getAffineExpr()); - return AffineMap::get(getLvlRank(), getSymRank(), dimAffines, context); + auto map = AffineMap::get(getLvlRank(), getSymRank(), dimAffines, context); + if (map.isIdentity()) return AffineMap(); + return map; } void DimLvlMap::dump() const { 
@llvmbot llvmbot added mlir:core MLIR Core Infrastructure mlir labels Sep 11, 2023
@llvmbot
Copy link
Member

llvmbot commented Sep 11, 2023

@llvm/pr-subscribers-mlir-core

Changes

Currently, dimlvlmap with identity affine map will be treated as empty affine map. But the new syntax would treat it as an actual identity affine map such as {d0} -> {d0}. This mismatch could raise error in reshape rewriting.

Full diff: https://github.com/llvm/llvm-project/pull/66024.diff

1 Files Affected:

  • (modified) mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp (+6-2)
diff --git a/mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp b/mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp index 81302f200f686bb..05fce96043826f1 100644 --- a/mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp +++ b/mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp @@ -348,7 +348,9 @@ AffineMap DimLvlMap::getDimToLvlMap(MLIRContext *context) const { lvlAffines.reserve(getLvlRank()); for (const auto &lvlSpec : lvlSpecs) lvlAffines.push_back(lvlSpec.getExpr().getAffineExpr()); - return AffineMap::get(getDimRank(), getSymRank(), lvlAffines, context); + auto map = AffineMap::get(getDimRank(), getSymRank(), lvlAffines, context); + if (map.isIdentity()) return AffineMap(); + return map; } AffineMap DimLvlMap::getLvlToDimMap(MLIRContext *context) const { @@ -356,7 +358,9 @@ AffineMap DimLvlMap::getLvlToDimMap(MLIRContext *context) const { dimAffines.reserve(getDimRank()); for (const auto &dimSpec : dimSpecs) dimAffines.push_back(dimSpec.getExpr().getAffineExpr()); - return AffineMap::get(getLvlRank(), getSymRank(), dimAffines, context); + auto map = AffineMap::get(getLvlRank(), getSymRank(), dimAffines, context); + if (map.isIdentity()) return AffineMap(); + return map; } void DimLvlMap::dump() const { 
@llvmbot
Copy link
Member

llvmbot commented Sep 11, 2023

@llvm/pr-subscribers-mlir

Changes

Currently, dimlvlmap with identity affine map will be treated as empty affine map. But the new syntax would treat it as an actual identity affine map such as {d0} -> {d0}. This mismatch could raise error in reshape rewriting.

Full diff: https://github.com/llvm/llvm-project/pull/66024.diff

1 Files Affected:

  • (modified) mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp (+6-2)
diff --git a/mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp b/mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp index 81302f200f686bb..05fce96043826f1 100644 --- a/mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp +++ b/mlir/lib/Dialect/SparseTensor/IR/Detail/DimLvlMap.cpp @@ -348,7 +348,9 @@ AffineMap DimLvlMap::getDimToLvlMap(MLIRContext *context) const { lvlAffines.reserve(getLvlRank()); for (const auto &lvlSpec : lvlSpecs) lvlAffines.push_back(lvlSpec.getExpr().getAffineExpr()); - return AffineMap::get(getDimRank(), getSymRank(), lvlAffines, context); + auto map = AffineMap::get(getDimRank(), getSymRank(), lvlAffines, context); + if (map.isIdentity()) return AffineMap(); + return map; } AffineMap DimLvlMap::getLvlToDimMap(MLIRContext *context) const { @@ -356,7 +358,9 @@ AffineMap DimLvlMap::getLvlToDimMap(MLIRContext *context) const { dimAffines.reserve(getDimRank()); for (const auto &dimSpec : dimSpecs) dimAffines.push_back(dimSpec.getExpr().getAffineExpr()); - return AffineMap::get(getLvlRank(), getSymRank(), dimAffines, context); + auto map = AffineMap::get(getLvlRank(), getSymRank(), dimAffines, context); + if (map.isIdentity()) return AffineMap(); + return map; } void DimLvlMap::dump() const { 
Copy link
Contributor

@aartbik aartbik left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice job Yinying!

Only change I would request is in the description, since the bug will show up anywhere we do a comparison on the encoding (the reshaping test was just one that exposed it). But good to go once you make that tiny change.

@yinying-lisa-li yinying-lisa-li merged commit c3160f8 into llvm:main Sep 11, 2023
AntonRydahl pushed a commit to AntonRydahl/llvm-project that referenced this pull request Sep 11, 2023
Currently, dimlvlmap with identity affine map will be treated as empty affine map. But the new syntax would treat it as an actual identity affine map such as {d0} -> {d0}. This mismatch could raise an error when we are comparing sparse encodings.
@yinying-lisa-li yinying-lisa-li deleted the fix_new_syntax branch September 12, 2023 18:57
ZijunZhaoCCK pushed a commit to ZijunZhaoCCK/llvm-project that referenced this pull request Sep 19, 2023
Currently, dimlvlmap with identity affine map will be treated as empty affine map. But the new syntax would treat it as an actual identity affine map such as {d0} -> {d0}. This mismatch could raise an error when we are comparing sparse encodings.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Indicates an unexpected problem or unintended behavior mlir:core MLIR Core Infrastructure mlir:sparse Sparse compiler in MLIR mlir

3 participants