[Mlir-commits] [mlir] [MLIR][ROCm] Build mlir_rocm_runtime STANDALONE (PR #205651)
Umang Yadav
llvmlistbot at llvm.org
Thu Jun 25 06:11:53 PDT 2026
================
@@ -167,22 +171,25 @@ extern "C" void mgpuMemHostRegister(void *ptr, uint64_t sizeBytes) {
extern "C" void
mgpuMemHostRegisterMemRef(int64_t rank, StridedMemRefType<char, 1> *descriptor,
int64_t elementSizeBytes) {
-
- llvm::SmallVector<int64_t, 4> denseStrides(rank);
- llvm::ArrayRef<int64_t> sizes(descriptor->sizes, rank);
- llvm::ArrayRef<int64_t> strides(sizes.end(), rank);
-
- std::partial_sum(sizes.rbegin(), sizes.rend(), denseStrides.rbegin(),
- std::multiplies<int64_t>());
- auto sizeBytes = denseStrides.front() * elementSizeBytes;
-
// Only densely packed tensors are currently supported.
- std::rotate(denseStrides.begin(), denseStrides.begin() + 1,
- denseStrides.end());
- denseStrides.back() = 1;
- assert(strides == llvm::ArrayRef(denseStrides));
-
- auto ptr = descriptor->data + descriptor->offset * elementSizeBytes;
+#ifdef _WIN32
+ int64_t *denseStrides = (int64_t *)_alloca(rank * sizeof(int64_t));
+#else
+ int64_t *denseStrides = (int64_t *)alloca(rank * sizeof(int64_t));
----------------
umangyadav wrote:
Here it is checking for the dense (packed) memory layout by comparing memref strides with expected strides.
It can be done by just keeping a `runningStrides` variable and a loop.
I rewrote logic and it doesn't need to use alloca or `std::vector` at all.
https://github.com/llvm/llvm-project/pull/205651
More information about the Mlir-commits
mailing list