[Mlir-commits] [mlir] b32831f - [mlir][sparse] move SparseTensorReader functions into the _mlir_ciface_ section
wren romano
llvmlistbot at llvm.org
Tue Nov 15 17:49:48 PST 2022
Author: wren romano
Date: 2022-11-15T17:49:41-08:00
New Revision: b32831f4a93fd3b8c6718a6a1847e199c72b1385
URL: https://github.com/llvm/llvm-project/commit/b32831f4a93fd3b8c6718a6a1847e199c72b1385
DIFF: https://github.com/llvm/llvm-project/commit/b32831f4a93fd3b8c6718a6a1847e199c72b1385.diff
LOG: [mlir][sparse] move SparseTensorReader functions into the _mlir_ciface_ section
This is a reposting of D137737, which got reverted when D137735 did. There are no changes other than rebasing.
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D138000
Added:
Modified:
mlir/lib/ExecutionEngine/SparseTensorRuntime.cpp
Removed:
################################################################################
diff --git a/mlir/lib/ExecutionEngine/SparseTensorRuntime.cpp b/mlir/lib/ExecutionEngine/SparseTensorRuntime.cpp
index d77ec2300ecb9..bca4a2805d8a3 100644
--- a/mlir/lib/ExecutionEngine/SparseTensorRuntime.cpp
+++ b/mlir/lib/ExecutionEngine/SparseTensorRuntime.cpp
@@ -535,6 +535,63 @@ MLIR_SPARSETENSOR_FOREVERY_V(IMPL_LEXINSERT)
MLIR_SPARSETENSOR_FOREVERY_V(IMPL_EXPINSERT)
#undef IMPL_EXPINSERT
+void _mlir_ciface_getSparseTensorReaderDimSizes(
+ void *p, StridedMemRefType<index_type, 1> *dref) {
+ assert(p && dref);
+ assert(dref->strides[0] == 1);
+ index_type *dimSizes = dref->data + dref->offset;
+ SparseTensorReader &file = *static_cast<SparseTensorReader *>(p);
+ const index_type *sizes = file.getDimSizes();
+ index_type rank = file.getRank();
+ for (uint64_t r = 0; r < rank; ++r)
+ dimSizes[r] = sizes[r];
+}
+
+#define IMPL_GETNEXT(VNAME, V) \
+ void _mlir_ciface_getSparseTensorReaderNext##VNAME( \
+ void *p, StridedMemRefType<index_type, 1> *iref, \
+ StridedMemRefType<V, 0> *vref) { \
+ assert(p &&iref &&vref); \
+ assert(iref->strides[0] == 1); \
+ index_type *indices = iref->data + iref->offset; \
+ SparseTensorReader *stfile = static_cast<SparseTensorReader *>(p); \
+ index_type rank = stfile->getRank(); \
+ V *value = vref->data + vref->offset; \
+ *value = stfile->readCOOElement<V>(rank, indices); \
+ }
+MLIR_SPARSETENSOR_FOREVERY_V(IMPL_GETNEXT)
+#undef IMPL_GETNEXT
+
+void _mlir_ciface_outSparseTensorWriterMetaData(
+ void *p, index_type rank, index_type nnz,
+ StridedMemRefType<index_type, 1> *dref) {
+ assert(p && dref);
+ assert(dref->strides[0] == 1);
+ assert(rank != 0);
+ index_type *dimSizes = dref->data + dref->offset;
+ SparseTensorWriter &file = *static_cast<SparseTensorWriter *>(p);
+ file << rank << " " << nnz << std::endl;
+ for (index_type r = 0; r < rank - 1; ++r)
+ file << dimSizes[r] << " ";
+ file << dimSizes[rank - 1] << std::endl;
+}
+
+#define IMPL_OUTNEXT(VNAME, V) \
+ void _mlir_ciface_outSparseTensorWriterNext##VNAME( \
+ void *p, index_type rank, StridedMemRefType<index_type, 1> *iref, \
+ StridedMemRefType<V, 0> *vref) { \
+ assert(p &&iref &&vref); \
+ assert(iref->strides[0] == 1); \
+ index_type *indices = iref->data + iref->offset; \
+ SparseTensorWriter &file = *static_cast<SparseTensorWriter *>(p); \
+ for (uint64_t r = 0; r < rank; ++r) \
+ file << (indices[r] + 1) << " "; \
+ V *value = vref->data + vref->offset; \
+ file << *value << std::endl; \
+ }
+MLIR_SPARSETENSOR_FOREVERY_V(IMPL_OUTNEXT)
+#undef IMPL_OUTNEXT
+
//===----------------------------------------------------------------------===//
//
// Public functions which accept only C-style data structures to interact
@@ -645,37 +702,10 @@ index_type getSparseTensorReaderDimSize(void *p, index_type d) {
return static_cast<SparseTensorReader *>(p)->getDimSize(d);
}
-void _mlir_ciface_getSparseTensorReaderDimSizes(
- void *p, StridedMemRefType<index_type, 1> *dref) {
- assert(p && dref);
- assert(dref->strides[0] == 1);
- index_type *dimSizes = dref->data + dref->offset;
- SparseTensorReader &file = *static_cast<SparseTensorReader *>(p);
- const index_type *sizes = file.getDimSizes();
- index_type rank = file.getRank();
- for (uint64_t r = 0; r < rank; ++r)
- dimSizes[r] = sizes[r];
-}
-
void delSparseTensorReader(void *p) {
delete static_cast<SparseTensorReader *>(p);
}
-#define IMPL_GETNEXT(VNAME, V) \
- void _mlir_ciface_getSparseTensorReaderNext##VNAME( \
- void *p, StridedMemRefType<index_type, 1> *iref, \
- StridedMemRefType<V, 0> *vref) { \
- assert(p &&iref &&vref); \
- assert(iref->strides[0] == 1); \
- index_type *indices = iref->data + iref->offset; \
- SparseTensorReader *stfile = static_cast<SparseTensorReader *>(p); \
- index_type rank = stfile->getRank(); \
- V *value = vref->data + vref->offset; \
- *value = stfile->readCOOElement<V>(rank, indices); \
- }
-MLIR_SPARSETENSOR_FOREVERY_V(IMPL_GETNEXT)
-#undef IMPL_GETNEXT
-
void *createSparseTensorWriter(char *filename) {
SparseTensorWriter *file =
(filename[0] == 0) ? &std::cout : new std::ofstream(filename);
@@ -691,36 +721,6 @@ void delSparseTensorWriter(void *p) {
delete file;
}
-void _mlir_ciface_outSparseTensorWriterMetaData(
- void *p, index_type rank, index_type nnz,
- StridedMemRefType<index_type, 1> *dref) {
- assert(p && dref);
- assert(dref->strides[0] == 1);
- assert(rank != 0);
- index_type *dimSizes = dref->data + dref->offset;
- SparseTensorWriter &file = *static_cast<SparseTensorWriter *>(p);
- file << rank << " " << nnz << std::endl;
- for (index_type r = 0; r < rank - 1; ++r)
- file << dimSizes[r] << " ";
- file << dimSizes[rank - 1] << std::endl;
-}
-
-#define IMPL_OUTNEXT(VNAME, V) \
- void _mlir_ciface_outSparseTensorWriterNext##VNAME( \
- void *p, index_type rank, StridedMemRefType<index_type, 1> *iref, \
- StridedMemRefType<V, 0> *vref) { \
- assert(p &&iref &&vref); \
- assert(iref->strides[0] == 1); \
- index_type *indices = iref->data + iref->offset; \
- SparseTensorWriter &file = *static_cast<SparseTensorWriter *>(p); \
- for (uint64_t r = 0; r < rank; ++r) \
- file << (indices[r] + 1) << " "; \
- V *value = vref->data + vref->offset; \
- file << *value << std::endl; \
- }
-MLIR_SPARSETENSOR_FOREVERY_V(IMPL_OUTNEXT)
-#undef IMPL_OUTNEXT
-
} // extern "C"
#endif // MLIR_CRUNNERUTILS_DEFINE_FUNCTIONS
More information about the Mlir-commits
mailing list