@@ -1665,10 +1665,10 @@ static bool hasZeroDimVectors(Operation *op) {
1665
1665
llvm::any_of (op->getResultTypes (), hasZeroDimVectorType);
1666
1666
}
1667
1667
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'.
1670
1670
static bool isBroadcastLike (Operation *op) {
1671
- if (isa<BroadcastOp, SplatOp >(op))
1671
+ if (isa<BroadcastOp>(op))
1672
1672
return true ;
1673
1673
1674
1674
auto shapeCast = dyn_cast<ShapeCastOp>(op);
@@ -3249,23 +3249,18 @@ struct Canonicalize0DShuffleOp : public OpRewritePattern<ShuffleOp> {
3249
3249
};
3250
3250
3251
3251
// / 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.
3254
3254
// /
3255
- // / Examples :
3255
+ // / Example :
3256
3256
// /
3257
- // / scalar_source --> vector.splat --> value - return scalar_source
3258
3257
// / scalar_source --> vector.broadcast --> value - return scalar_source
3259
3258
static Value getScalarSplatSource (Value value) {
3260
3259
// Block argument:
3261
3260
Operation *defOp = value.getDefiningOp ();
3262
3261
if (!defOp)
3263
3262
return {};
3264
3263
3265
- // Splat:
3266
- if (auto splat = dyn_cast<vector::SplatOp>(defOp))
3267
- return splat.getInput ();
3268
-
3269
3264
auto broadcast = dyn_cast<vector::BroadcastOp>(defOp);
3270
3265
3271
3266
// Not broadcast (and not splat):
@@ -7511,41 +7506,6 @@ void mlir::vector::populateVectorToVectorCanonicalizationPatterns(
7511
7506
patterns.getContext (), benefit);
7512
7507
}
7513
7508
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
-
7549
7509
Value mlir::vector::makeArithReduction (OpBuilder &b, Location loc,
7550
7510
CombiningKind kind, Value v1, Value acc,
7551
7511
arith::FastMathFlagsAttr fastmath,
0 commit comments