[mlir][crunner] Add support for invoking std::sort.

Reviewed By: aartbik

Differential Revision: https://reviews.llvm.org/D139880
This commit is contained in:
bixia1 2022-12-12 13:39:55 -08:00
parent 9c87746de7
commit 9889753c6d
2 changed files with 31 additions and 0 deletions

View File

@ -486,4 +486,13 @@ extern "C" MLIR_CRUNNERUTILS_EXPORT uint64_t rtrand(void *, uint64_t m);
// 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

View File

@ -26,6 +26,7 @@
#include "malloc.h"
#endif // _WIN32
#include <algorithm>
#include <cinttypes>
#include <cstdio>
#include <cstdlib>
@ -34,6 +35,14 @@
#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
@ -165,4 +174,17 @@ extern "C" void rtdrand(void *g) {
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