// Deletes the random number generator.
extern "C" MLIR_CRUNNERUTILS_EXPORT void rtdrand(void *);
+//===----------------------------------------------------------------------===//
+// Runtime support library to allow the use of std::sort in MLIR program.
+//===----------------------------------------------------------------------===//
+extern "C" MLIR_CRUNNERUTILS_EXPORT void
+_mlir_ciface_stdSortI64(uint64_t n, StridedMemRefType<int64_t, 1> *vref);
+extern "C" MLIR_CRUNNERUTILS_EXPORT void
+_mlir_ciface_stdSortF64(uint64_t n, StridedMemRefType<double, 1> *vref);
+extern "C" MLIR_CRUNNERUTILS_EXPORT void
+_mlir_ciface_stdSortF32(uint64_t n, StridedMemRefType<float, 1> *vref);
#endif // MLIR_EXECUTIONENGINE_CRUNNERUTILS_H
#include "malloc.h"
#endif // _WIN32
+#include <algorithm>
#include <cinttypes>
#include <cstdio>
#include <cstdlib>
#ifdef MLIR_CRUNNERUTILS_DEFINE_FUNCTIONS
+namespace {
+template <typename V>
+void stdSort(uint64_t n, V *p) {
+ std::sort(p, p + n);
+}
+
+} // namespace
+
// Small runtime support "lib" for vector.print lowering.
// By providing elementary printing methods only, this
// library can remain fully unaware of low-level implementation
delete generator;
}
+#define IMPL_STDSORT(VNAME, V) \
+ extern "C" void _mlir_ciface_stdSort##VNAME(uint64_t n, \
+ StridedMemRefType<V, 1> *vref) { \
+ assert(vref); \
+ assert(vref->strides[0] == 1); \
+ V *values = vref->data + vref->offset; \
+ stdSort(n, values); \
+ }
+IMPL_STDSORT(I64, int64_t)
+IMPL_STDSORT(F64, double)
+IMPL_STDSORT(F32, float)
+#undef IMPL_STDSORT
+
#endif // MLIR_CRUNNERUTILS_DEFINE_FUNCTIONS