[Mlir-commits] [mlir] [MLIR][Vector] Added ToElementsOp::fold for broadcast->to_elements pattern rewrite. (PR #160318)
Jakub Kuderski
llvmlistbot at llvm.org
Tue Sep 30 06:00:45 PDT 2025
================
@@ -2395,9 +2396,41 @@ foldToElementsFromElements(ToElementsOp toElementsOp,
return success();
}
+/// Folds vector.to_elements(vector.broadcast(%x)) for the scalar case only.
+///
+/// Cases handled:
+/// - %x is a scalar: replicate the scalar across all results.
+///
+/// The vector source case is handled by a canonicalization pattern.
+static LogicalResult
+foldToElementsOfBroadcast(ToElementsOp toElementsOp,
+ SmallVectorImpl<OpFoldResult> &results) {
+ auto bcastOp = toElementsOp.getSource().getDefiningOp<BroadcastOp>();
+ if (!bcastOp)
+ return failure();
+
+ auto resultVecType = cast<VectorType>(toElementsOp.getSource().getType());
+ // Bail on scalable vectors, since the element count and per-dimension extents
+ // must be known at compile time.
+ if (resultVecType.getNumScalableDims() != 0)
+ return failure();
+
+ // Case 1: scalar broadcast → replicate scalar across all results.
+ if (!isa<VectorType>(bcastOp.getSource().getType())) {
+ Value scalar = bcastOp.getSource();
+ results.assign(resultVecType.getNumElements(), scalar);
+ return success();
+ }
+
+ // Vector source case is not folded here.
----------------
kuhar wrote:
Err, I don't think this comment adds much clarity, I'd drop it.
https://github.com/llvm/llvm-project/pull/160318
More information about the Mlir-commits
mailing list