diff --git a/mlir/lib/ExecutionEngine/SparseTensorUtils.cpp b/mlir/lib/ExecutionEngine/SparseTensorUtils.cpp --- a/mlir/lib/ExecutionEngine/SparseTensorUtils.cpp +++ b/mlir/lib/ExecutionEngine/SparseTensorUtils.cpp @@ -82,6 +82,17 @@ Element(const std::vector &ind, V val) : indices(ind), value(val){}; std::vector indices; V value; + /// Returns true if indices of e1 < indices of e2. + static bool lexOrder(const Element &e1, const Element &e2) { + uint64_t rank = e1.indices.size(); + assert(rank == e2.indices.size()); + for (uint64_t r = 0; r < rank; r++) { + if (e1.indices[r] == e2.indices[r]) + continue; + return e1.indices[r] < e2.indices[r]; + } + return false; + } }; /// A memory-resident sparse tensor in coordinate scheme (collection of @@ -111,7 +122,7 @@ assert(!iteratorLocked && "Attempt to sort() after startIterator()"); // TODO: we may want to cache an `isSorted` bit, to avoid // unnecessary/redundant sorting. - std::sort(elements.begin(), elements.end(), lexOrder); + std::sort(elements.begin(), elements.end(), Element::lexOrder); } /// Returns rank. uint64_t getRank() const { return sizes.size(); } @@ -149,17 +160,6 @@ } private: - /// Returns true if indices of e1 < indices of e2. - static bool lexOrder(const Element &e1, const Element &e2) { - uint64_t rank = e1.indices.size(); - assert(rank == e2.indices.size()); - for (uint64_t r = 0; r < rank; r++) { - if (e1.indices[r] == e2.indices[r]) - continue; - return e1.indices[r] < e2.indices[r]; - } - return false; - } const std::vector sizes; // per-dimension sizes std::vector> elements; bool iteratorLocked;