[Mlir-commits] [mlir] [mlir][amdgpu] Add lowering for make_dma_descriptor (PR #169955)

Krzysztof Drewniak llvmlistbot at llvm.org
Thu Dec 4 08:14:16 PST 2025


================
@@ -730,37 +741,118 @@ LogicalResult MakeDmaBaseOp::verify() {
 LogicalResult MakeDmaDescriptorOp::verify() {
   ArrayRef<int64_t> globalStaticStrides = getGlobalStaticStrides();
 
-  if (globalStaticStrides.empty()) {
+  if (globalStaticStrides.empty())
     return emitOpError("strides must not be empty.");
-  }
-  if (globalStaticStrides.back() != 1) {
+  if (globalStaticStrides.back() != 1)
     return emitOpError("strides for the innermost dimension must be 1.");
-  }
 
   ArrayRef<int64_t> globalStaticSizes = getGlobalStaticSizes();
   size_t rank = globalStaticSizes.size();
-  if (rank != globalStaticStrides.size()) {
+  if (rank < 2)
+    return emitOpError("tensor and tile must be at least of rank 2.");
+  if (rank > 5)
+    return emitOpError("tensor and tile must be at most of rank 5.");
+  if (rank != globalStaticStrides.size())
     return emitOpError("strides and sizes must have same rank.");
-  }
 
   ArrayRef<int64_t> sharedStaticSizes = getSharedStaticSizes();
-  if (rank != sharedStaticSizes.size()) {
+  if (rank != sharedStaticSizes.size())
     return emitOpError("tensor must have same rank as tile.");
-  }
+
+  unsigned elementTypeWidth = getElementTypeWidth();
+  if (!llvm::is_contained<unsigned>({8, 16, 32, 64}, elementTypeWidth))
+    return emitOpError(
+               "element type width must be 1, 2, 4 or 8 bytes, but was ")
+           << elementTypeWidth << " bits long";
 
   if (Value atomicBarrierAddress = getAtomicBarrierAddress()) {
-    MemRefType atomicBarrierAddressType =
+    auto atomicBarrierAddressType =
         cast<MemRefType>(atomicBarrierAddress.getType());
     bool barrierInLDS =
         hasWorkgroupMemorySpace(atomicBarrierAddressType.getMemorySpace());
-    if (!barrierInLDS) {
+    if (!barrierInLDS)
       return emitOpError("atomic barrier address must be in LDS.");
-    }
   }
 
   return success();
 }
 
+static bool maybeUpdateDynamicIndexList(
+    ArrayRef<int64_t> staticElements, ArrayRef<Attribute> foldedElements,
+    SmallVector<Value> dynamicElements, SmallVector<int64_t> &newStaticElements,
+    SmallVector<Value> &newDynamicElements) {
----------------
krzysz00 wrote:

I'm surprised this didn't exist somewhere in, say, `memref::SubviewOp`

https://github.com/llvm/llvm-project/pull/169955


More information about the Mlir-commits mailing list