[Mlir-commits] [mlir] [mlir][memref-to-spirv]: Reverse Image Load Coordinates (PR #160495)
Jakub Kuderski
llvmlistbot at llvm.org
Mon Sep 29 09:40:27 PDT 2025
================
@@ -699,6 +699,36 @@ LoadOpPattern::matchAndRewrite(memref::LoadOp loadOp, OpAdaptor adaptor,
return success();
}
+template <typename OpAdaptor>
+static FailureOr<SmallVector<Value>>
+extractLoadCoordsForComposite(memref::LoadOp loadOp, OpAdaptor adaptor,
+ ConversionPatternRewriter &rewriter) {
+ // At present we only support linear "tiling" as specified in Vulkan, this
+ // means that texels are assumed to be laid out in memory in a row-major
+ // order. This allows us to support any memref layout that is a permutation of
+ // the dimensions. Future work will pass an optional image layout to the
+ // rewrite pattern so that we can support optimized target specific tilings.
+ //
+ // The memrefs layout determines the dimension ordering so we need to invert
+ // the map to get the ordering.
+ SmallVector<Value> indices = adaptor.getIndices();
+ auto map = loadOp.getMemRefType().getLayout().getAffineMap();
+ if (!map.isPermutation())
+ return rewriter.notifyMatchFailure(
+ loadOp,
+ "Cannot lower memrefs with memory layout which is not a permutation");
+
+ const unsigned dimCount = map.getNumDims();
+ SmallVector<Value, 3> coords(dimCount);
+ for (unsigned dim = 0; dim < dimCount; ++dim)
+ coords[map.getDimPosition(dim)] = indices[dim];
----------------
kuhar wrote:
Maybe it would be worth adding as a code comment too?
https://github.com/llvm/llvm-project/pull/160495
More information about the Mlir-commits
mailing list