@@ -1665,10 +1665,10 @@ static bool hasZeroDimVectors(Operation *op) {
16651665 llvm::any_of (op->getResultTypes (), hasZeroDimVectorType);
16661666}
16671667
1668- // / All BroadcastOps and SplatOps , as well as ShapeCastOps that only prepend
1669- // / 1s, are considered to be 'broadcastlike'.
1668+ // / All BroadcastOps, as well as ShapeCastOps that only prepend 1s, are
1669+ // / considered to be 'broadcastlike'.
16701670static bool isBroadcastLike (Operation *op) {
1671- if (isa<BroadcastOp, SplatOp >(op))
1671+ if (isa<BroadcastOp>(op))
16721672 return true ;
16731673
16741674 auto shapeCast = dyn_cast<ShapeCastOp>(op);
@@ -3249,23 +3249,18 @@ struct Canonicalize0DShuffleOp : public OpRewritePattern<ShuffleOp> {
32493249};
32503250
32513251// / Consider the defining operation `defOp` of `value`. If `defOp` is a
3252- // / vector.splat or a vector. broadcast with a scalar operand, return the scalar
3253- // / value that is splatted. Otherwise return null.
3252+ // / vector.broadcast with a scalar operand, return the scalar value that is
3253+ // / splatted. Otherwise return null.
32543254// /
3255- // / Examples :
3255+ // / Example :
32563256// /
3257- // / scalar_source --> vector.splat --> value - return scalar_source
32583257// / scalar_source --> vector.broadcast --> value - return scalar_source
32593258static Value getScalarSplatSource (Value value) {
32603259 // Block argument:
32613260 Operation *defOp = value.getDefiningOp ();
32623261 if (!defOp)
32633262 return {};
32643263
3265- // Splat:
3266- if (auto splat = dyn_cast<vector::SplatOp>(defOp))
3267- return splat.getInput ();
3268-
32693264 auto broadcast = dyn_cast<vector::BroadcastOp>(defOp);
32703265
32713266 // Not broadcast (and not splat):
@@ -7511,41 +7506,6 @@ void mlir::vector::populateVectorToVectorCanonicalizationPatterns(
75117506 patterns.getContext (), benefit);
75127507}
75137508
7514- // ===----------------------------------------------------------------------===//
7515- // SplatOp
7516- // ===----------------------------------------------------------------------===//
7517-
7518- OpFoldResult SplatOp::fold (FoldAdaptor adaptor) {
7519- auto constOperand = adaptor.getInput ();
7520- if (!isa_and_nonnull<IntegerAttr, FloatAttr>(constOperand))
7521- return {};
7522-
7523- // SplatElementsAttr::get treats single value for second arg as being a splat.
7524- return SplatElementsAttr::get (getType (), {constOperand});
7525- }
7526-
7527- // Canonicalizer for vector.splat. It always gets canonicalized to a
7528- // vector.broadcast.
7529- class SplatToBroadcastPattern final : public OpRewritePattern<SplatOp> {
7530- public:
7531- using Base::Base;
7532- LogicalResult matchAndRewrite (SplatOp splatOp,
7533- PatternRewriter &rewriter) const override {
7534- rewriter.replaceOpWithNewOp <vector::BroadcastOp>(splatOp, splatOp.getType (),
7535- splatOp.getOperand ());
7536- return success ();
7537- }
7538- };
7539- void SplatOp::getCanonicalizationPatterns (RewritePatternSet &results,
7540- MLIRContext *context) {
7541- results.add <SplatToBroadcastPattern>(context);
7542- }
7543-
7544- void SplatOp::inferResultRanges (ArrayRef<ConstantIntRanges> argRanges,
7545- SetIntRangeFn setResultRanges) {
7546- setResultRanges (getResult (), argRanges.front ());
7547- }
7548-
75497509Value mlir::vector::makeArithReduction (OpBuilder &b, Location loc,
75507510 CombiningKind kind, Value v1, Value acc,
75517511 arith::FastMathFlagsAttr fastmath,
0 commit comments