[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