[Mlir-commits] [mlir] [mlir][vector] Fix vector.gather lowering for strided memrefs. (PR #184706)
Andrzej WarzyĆski
llvmlistbot at llvm.org
Fri Mar 13 04:08:41 PDT 2026
================
@@ -210,8 +233,23 @@ struct Gather1DToConditionalLoads : OpRewritePattern<vector::GatherOp> {
Value condition =
vector::ExtractOp::create(rewriter, loc, condMask, thisIdx);
Value index = vector::ExtractOp::create(rewriter, loc, indexVec, thisIdx);
- baseOffsets.back() =
- rewriter.createOrFold<arith::AddIOp>(loc, lastBaseOffset, index);
+
+ if (useDelinearization) {
+ // The gather index offsets the innermost dimension. Combine with
+ // the base offsets by linearizing, adding the gather index, then
+ // delinearizing back to N-D indices:
+ // flatIdx = linearize(baseOffsets, shape) + gatherIndex
+ // loadIndices = delinearize(flatIdx, shape)
+ Value flatIdx =
+ rewriter.createOrFold<arith::AddIOp>(loc, linearizedBase, index);
+ auto delinOp = affine::AffineDelinearizeIndexOp::create(
+ rewriter, loc, flatIdx, basis, /*hasOuterBound=*/true);
+ for (int64_t d = 0, rank = baseOffsets.size(); d < rank; ++d)
+ baseOffsets[d] = delinOp.getResult(d);
+ } else {
+ baseOffsets.back() =
----------------
banach-space wrote:
```suggestion
loadOffsets.back() =
```
https://github.com/llvm/llvm-project/pull/184706
More information about the Mlir-commits
mailing list