[Mlir-commits] [mlir] [mlir][ArmSME] More precisely model dataflow in ArmSME to SCF lowerings (PR #73922)
Benjamin Maxwell
llvmlistbot at llvm.org
Wed Dec 6 01:47:15 PST 2023
================
@@ -202,32 +209,36 @@ struct TileLoadOpWithMaskAndPadZeroConversion
// Initialize tile with zero to satisfy padding. Inactive cols will be
// zeroed anyway since the loads use zeroing predication. For inactive rows
// however, no load will occur so these need to be zeroed.
- auto tile = tileLoadOp.createOpAndForwardTileId<arm_sme::ZeroOp>(
+ auto initTile = tileLoadOp.createOpAndForwardTileId<arm_sme::ZeroOp>(
rewriter, loc, tileType);
// Create a loop to load the active tile slices from memory.
auto step = rewriter.create<arith::ConstantIndexOp>(loc, 1);
auto lowerBound = rewriter.create<arith::ConstantIndexOp>(loc, 0);
auto upperBound = numRows;
- auto forOp = rewriter.create<scf::ForOp>(loc, lowerBound, upperBound, step);
+ auto forOp = rewriter.create<scf::ForOp>(loc, lowerBound, upperBound, step,
+ ValueRange{initTile});
rewriter.setInsertionPointToStart(forOp.getBody());
// Create 'arm_sme.load_tile_slice' to load tile slice from memory into
// tile.
SmallVector<Value> memrefIndices;
auto tileSliceIndex = forOp.getInductionVar();
+ auto currentTile = forOp.getRegionIterArg(0);
----------------
MacDue wrote:
Naming is tricky, but it's the tile at the start of the current iteration of the loop, which is taken from the `iter_args`. The `updatedTile` would be the tile you get from the operation in the loop (i.e. the result of `move_vector_to_tile_slice`), and `outputTile` the result of the `scf.for` (at least that's how I see it :))
https://github.com/llvm/llvm-project/pull/73922
More information about the Mlir-commits
mailing list