[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