[Mlir-commits] [mlir] [MLIR][XeGPU][VectorToXeGPU] Fix transfer_read/write cases with non-contiguous memrefs (PR #158126)
Dmitry Chigarev
llvmlistbot at llvm.org
Thu Sep 11 11:07:41 PDT 2025
================
@@ -315,51 +325,30 @@ static Value computeOffsets(VectorTransferOpInterface xferOp,
arith::AddIOp::create(rewriter, loc, localOffsets, broadcasted[i]);
// Compute base offset from transfer read indices
- Value baseOffset = nullptr;
- if (!indices.empty()) {
- baseOffset = arith::ConstantIndexOp::create(rewriter, loc, 0);
- for (size_t i = 0; i < indices.size(); ++i) {
- Value strideVal = strides[i];
- Value offsetContrib =
- arith::MulIOp::create(rewriter, loc, indices[i], strideVal);
- baseOffset =
- arith::AddIOp::create(rewriter, loc, baseOffset, offsetContrib);
- }
- // Broadcast base offset to match vector shape
- Value bcastBase = vector::BroadcastOp::create(
- rewriter, loc, fullIndexVectorType, baseOffset);
- localOffsets =
- arith::AddIOp::create(rewriter, loc, bcastBase, localOffsets);
+ for (size_t i = 0; i < indices.size(); ++i) {
+ Value strideVal = strides[i];
+ Value offsetContrib =
+ arith::MulIOp::create(rewriter, loc, indices[i], strideVal);
+ baseOffset =
+ arith::AddIOp::create(rewriter, loc, baseOffset, offsetContrib);
}
+ // Broadcast base offset to match vector shape
+ Value bcastBase = vector::BroadcastOp::create(
+ rewriter, loc, fullIndexVectorType, baseOffset);
+ localOffsets = arith::AddIOp::create(rewriter, loc, bcastBase, localOffsets);
return localOffsets;
}
-// Collapse memref shape to 1D
-static Value collapseMemrefTo1D(VectorTransferOpInterface xferOp,
- PatternRewriter &rewriter) {
+// Convert memref to i64 base pointer
+static Value memrefToIndexPtr(VectorTransferOpInterface xferOp,
+ PatternRewriter &rewriter) {
----------------
dchigarev wrote:
`memref.collapse_shape` -> `memref.extract_aligned_pointer_as_index + arith.index_cast index -> i64`
https://github.com/llvm/llvm-project/pull/158126
More information about the Mlir-commits
mailing list