diff --git a/mlir/include/mlir/ExecutionEngine/SparseTensor/Storage.h b/mlir/include/mlir/ExecutionEngine/SparseTensor/Storage.h --- a/mlir/include/mlir/ExecutionEngine/SparseTensor/Storage.h +++ b/mlir/include/mlir/ExecutionEngine/SparseTensor/Storage.h @@ -679,12 +679,17 @@ /// in the argument differ from those in the current cursor. uint64_t lexDiff(const uint64_t *lvlCoords) const { const uint64_t lvlRank = getLvlRank(); - for (uint64_t l = 0; l < lvlRank; ++l) - if (lvlCoords[l] > lvlCursor[l]) + for (uint64_t l = 0; l < lvlRank; ++l) { + const auto crd = lvlCoords[l]; + const auto cur = lvlCursor[l]; + if (crd > cur || (crd == cur && !isUniqueLvl(l))) return l; - else - assert(lvlCoords[l] == lvlCursor[l] && "non-lexicographic insertion"); - assert(0 && "duplicate insertion"); + if (crd < cur) { + assert(false && "non-lexicographic insertion"); + return -1u; + } + } + assert(false && "duplicate insertion"); return -1u; }