[Mlir-commits] [mlir] [MLIR][XeGPU] Add uniform values distribution pattern (PR #176737)
Artem Kroviakov
llvmlistbot at llvm.org
Mon Jan 26 03:26:56 PST 2026
================
@@ -1208,6 +1213,71 @@ struct LoadDistribution final : public gpu::WarpDistributionPattern {
}
};
+// Sink SG-uniform ops. An op is uniform if any of the following is none
+// of its operands/results has a distribution layout attribute.
+// Non-uniform vectors are handled by dedicated patterns.
+// This pattern must have a higher priority than distribution patterns,
+// because a distributable shape may be logically intended as uniform.
+struct SinkUniformOps final : public gpu::WarpDistributionPattern {
+ using gpu::WarpDistributionPattern::WarpDistributionPattern;
+ LogicalResult matchAndRewrite(gpu::WarpExecuteOnLane0Op warpOp,
+ PatternRewriter &rewriter) const override {
+ // Take the last op
+ Operation *warpRegionPreYieldOp = warpOp.getTerminator()->getPrevNode();
+ // Any ops with nested regions must be handled carefully in dedicated
+ // patterns.
+ if (!warpRegionPreYieldOp || warpRegionPreYieldOp->getNumRegions())
+ return failure();
+ int operandIdx = -1;
+ if (warpRegionPreYieldOp->getNumResults()) {
+ OpOperand *operand = getWarpResult(
+ warpOp, [&](Operation *op) { return warpRegionPreYieldOp == op; });
+ if (!operand)
+ return failure();
+ operandIdx = operand->getOperandNumber();
+ if (warpRegionPreYieldOp->getResult(0).getType() !=
+ warpOp.getResult(operandIdx).getType())
+ return rewriter.notifyMatchFailure(warpOp,
+ "The op result is not uniform.");
+ }
+
+ // The op must have at least no layout-based operands or results.
----------------
akroviakov wrote:
Fixed
https://github.com/llvm/llvm-project/pull/176737
More information about the Mlir-commits
mailing list