[Mlir-commits] [mlir] [mlir][vector] Refactor WarpOpScfForOp to support unused or swapped forOp results. (PR #147620)
Petr Kurapov
llvmlistbot at llvm.org
Wed Jul 9 09:42:17 PDT 2025
================
@@ -876,15 +877,32 @@ void XeGPUSubgroupDistributePass::runOnOperation() {
// Step 3: Apply subgroup to workitem distribution patterns.
RewritePatternSet patterns(&getContext());
xegpu::populateXeGPUSubgroupDistributePatterns(patterns);
- // TODO: distributionFn and shuffleFn are not used at this point.
+ // distributionFn is used by vector distribution patterns to determine the
+ // distributed vector type for a given vector value. In XeGPU subgroup
+ // distribution context, we compute this based on lane layout.
auto distributionFn = [](Value val) {
VectorType vecType = dyn_cast<VectorType>(val.getType());
int64_t vecRank = vecType ? vecType.getRank() : 0;
- OpBuilder builder(val.getContext());
if (vecRank == 0)
return AffineMap::get(val.getContext());
- return AffineMap::getMultiDimIdentityMap(vecRank, val.getContext());
+ // Get the layout of the vector type.
+ xegpu::LayoutAttr layout = xegpu::getLayoutAttr(val);
+ // If no layout is specified, assume the inner most dimension is distributed
+ // for now.
+ if (!layout)
+ return AffineMap::getMultiDimMapWithTargets(
+ vecRank, {static_cast<unsigned int>(vecRank - 1)}, val.getContext());
----------------
kurapov-peter wrote:
This assumes 2d, right?
https://github.com/llvm/llvm-project/pull/147620
More information about the Mlir-commits
mailing list