diff --git a/mlir/lib/ExecutionEngine/CRunnerUtils.cpp b/mlir/lib/ExecutionEngine/CRunnerUtils.cpp --- a/mlir/lib/ExecutionEngine/CRunnerUtils.cpp +++ b/mlir/lib/ExecutionEngine/CRunnerUtils.cpp @@ -47,13 +47,18 @@ DynamicMemRefType dst(*dstArg); int64_t rank = src.rank; + char *srcPtr = src.data + src.offset * elemSize; + char *dstPtr = dst.data + dst.offset * elemSize; + + if (rank == 0) { + memcpy(dstPtr, srcPtr, elemSize); + return; + } + int64_t *indices = static_cast(alloca(sizeof(int64_t) * rank)); int64_t *srcStrides = static_cast(alloca(sizeof(int64_t) * rank)); int64_t *dstStrides = static_cast(alloca(sizeof(int64_t) * rank)); - char *srcPtr = src.data + src.offset * elemSize; - char *dstPtr = dst.data + dst.offset * elemSize; - // Initialize index and scale strides. for (int rankp = 0; rankp < rank; ++rankp) { indices[rankp] = 0;