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

Erick Ochoa Lopez llvmlistbot at llvm.org
Wed Dec 3 06:46:11 PST 2025


================
@@ -730,37 +743,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.");
-  }
+
+  int elementTypeWidth = getElementTypeWidth();
+  if (!llvm::is_contained({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) {
+  bool changed = false;
+  int index = 0;
+
+  for (int64_t static_element : staticElements) {
+    if (!ShapedType::isDynamic(static_element)) {
----------------
amd-eochoalo wrote:

https://github.com/llvm/llvm-project/pull/169955/commits/1549f5bdd6469d60823a07db1aebc16fdb2a61ca

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


More information about the Mlir-commits mailing list