[Mlir-commits] [mlir] [mlir][xegpu] Add support for `vector.transfer_read/write` on SLM buffers (PR #192757)
Igor Zamyatin
llvmlistbot at llvm.org
Fri Apr 17 18:59:39 PDT 2026
================
@@ -547,31 +547,68 @@ struct TransferReadLowering : public OpRewritePattern<vector::TransferReadOp> {
if (failed(transferPreconditions(rewriter, readOp)))
return failure();
+ auto readMemTy = cast<MemRefType>(readOp.getShapedType());
+ VectorType loadedVecTy = readOp.getVectorType();
+ bool isOutOfBounds = readOp.hasOutOfBoundsDim();
+ // Check if the memref has address space 3 (shared local memory)
+ bool isSharedMemory = xegpu::XeGPUDialect::isSharedMemory(readMemTy);
// TODO:This check needs to be replaced with proper uArch capability check
auto chip = xegpu::getChipStr(readOp);
- if (chip != "pvc" && chip != "bmg") {
- // lower to scattered load Op if the target HW doesn't have 2d block load
- // support
+ // Lower to scattered load Op if the target HW doesn't have 2d block load
+ // support and the load is not from shared memory.
+ if (chip != "pvc" && chip != "bmg" && !isSharedMemory) {
+
// TODO: add support for OutOfBound access
if (readOp.hasOutOfBoundsDim())
return failure();
return lowerToScatteredLoadOp(readOp, rewriter);
}
- VectorType loadedVecTy = readOp.getVectorType();
-
- // Lower using load.gather in 1D case
- if (loadedVecTy.getRank() == 1 && !readOp.hasOutOfBoundsDim())
+ // Handle the 1D non-SLM case using load.gather.
+ if (loadedVecTy.getRank() == 1 && !readOp.hasOutOfBoundsDim() &&
----------------
Garra1980 wrote:
can isOutOfBounds be used here and in other places?
https://github.com/llvm/llvm-project/pull/192757
More information about the Mlir-commits
mailing list