extern "C" MLIR_CRUNNERUTILS_EXPORT void printComma();
extern "C" MLIR_CRUNNERUTILS_EXPORT void printNewline();
-#endif // EXECUTIONENGINE_CRUNNERUTILS_H_
+//===----------------------------------------------------------------------===//
+// Small runtime support for sparse tensors.
+//===----------------------------------------------------------------------===//
+extern "C" MLIR_CRUNNERUTILS_EXPORT void openMatrixC(char *filename,
+ uint64_t *mdata,
+ uint64_t *ndata,
+ uint64_t *nnzdata);
+extern "C" MLIR_CRUNNERUTILS_EXPORT void
+readMatrixItemC(uint64_t *idata, uint64_t *jdata, double *ddata);
+extern "C" MLIR_CRUNNERUTILS_EXPORT void closeMatrix();
+extern "C" MLIR_CRUNNERUTILS_EXPORT char *getMatrix(uint64_t id);
+#endif // EXECUTIONENGINE_CRUNNERUTILS_H_
//
//===----------------------------------------------------------------------===//
+#include "mlir/ExecutionEngine/CRunnerUtils.h"
+
+#ifdef MLIR_CRUNNERUTILS_DEFINE_FUNCTIONS
+
#include <cctype>
#include <cinttypes>
#include <cstdio>
// The implementation is *not* thread-safe. Also, only *one* matrix file can
// be open at the time. A matrix file must be closed before reading in a next.
//
-// Note that input parameters mimic the layout of a MemRef<T>:
+// Note that input parameters in the "MLIRized" version of a function mimic
+// the data layout of a MemRef<T>:
+//
// struct MemRef {
// T *base;
// T *data;
// int64_t off;
// }
+//
//===----------------------------------------------------------------------===//
// Currently open matrix. This is *not* thread-safe or re-entrant.
static FILE *sparseFile = nullptr;
static char *sparseFilename = nullptr;
-extern "C" void openMatrix(char *filename, uint64_t *mbase, uint64_t *mdata,
- int64_t moff, uint64_t *nbase, uint64_t *ndata,
- int64_t noff, uint64_t *nnzbase, uint64_t *nnzdata,
- int64_t nnzoff) {
+extern "C" void openMatrixC(char *filename, uint64_t *mdata, uint64_t *ndata,
+ uint64_t *nnzdata) {
if (sparseFile != nullptr) {
fprintf(stderr, "Other file still open %s vs. %s\n", sparseFilename,
filename);
readHeader(sparseFile, filename, mdata, ndata, nnzdata);
}
-extern "C" void readMatrixItem(uint64_t *ibase, uint64_t *idata, int64_t ioff,
- uint64_t *jbase, uint64_t *jdata, int64_t joff,
- double *dbase, double *ddata, int64_t doff) {
+// "MLIRized" version.
+extern "C" void openMatrix(char *filename, uint64_t *mbase, uint64_t *mdata,
+ int64_t moff, uint64_t *nbase, uint64_t *ndata,
+ int64_t noff, uint64_t *nnzbase, uint64_t *nnzdata,
+ int64_t nnzoff) {
+ openMatrixC(filename, mdata, ndata, nnzdata);
+}
+
+extern "C" void readMatrixItemC(uint64_t *idata, uint64_t *jdata,
+ double *ddata) {
if (sparseFile == nullptr) {
fprintf(stderr, "Cannot read item from unopened matrix\n");
exit(1);
readItem(sparseFile, sparseFilename, idata, jdata, ddata);
}
+// "MLIRized" version.
+extern "C" void readMatrixItem(uint64_t *ibase, uint64_t *idata, int64_t ioff,
+ uint64_t *jbase, uint64_t *jdata, int64_t joff,
+ double *dbase, double *ddata, int64_t doff) {
+ readMatrixItemC(idata, jdata, ddata);
+}
+
extern "C" void closeMatrix() {
if (sparseFile == nullptr) {
fprintf(stderr, "Cannot close unopened matrix\n");
char *env = getenv(var);
return env;
}
+
+#endif // MLIR_CRUNNERUTILS_DEFINE_FUNCTIONS