@@ -1060,10 +1060,10 @@ struct UnrollTransferReadConversion
1060
1060
setHasBoundedRewriteRecursion ();
1061
1061
}
1062
1062
1063
- // / Return the vector into which the newly created TransferReadOp results
1064
- // / are inserted.
1065
- Value getResultVector (TransferReadOp xferOp ,
1066
- PatternRewriter &rewriter ) const {
1063
+ // / Get or build the vector into which the newly created TransferReadOp
1064
+ // / results are inserted.
1065
+ Value buildResultVector (PatternRewriter &rewriter ,
1066
+ TransferReadOp xferOp ) const {
1067
1067
if (auto insertOp = getInsertOp (xferOp))
1068
1068
return insertOp.getDest ();
1069
1069
Location loc = xferOp.getLoc ();
@@ -1098,24 +1098,27 @@ struct UnrollTransferReadConversion
1098
1098
LogicalResult matchAndRewrite (TransferReadOp xferOp,
1099
1099
PatternRewriter &rewriter) const override {
1100
1100
if (xferOp.getVectorType ().getRank () <= options.targetRank )
1101
- return failure ();
1101
+ return rewriter.notifyMatchFailure (
1102
+ xferOp, " vector rank is less or equal to target rank" );
1102
1103
if (isTensorOp (xferOp) && !options.lowerTensors )
1103
- return failure ();
1104
+ return rewriter.notifyMatchFailure (
1105
+ xferOp, " transfers operating on tensors are excluded" );
1104
1106
// Transfer ops that modify the element type are not supported atm.
1105
1107
if (xferOp.getVectorType ().getElementType () !=
1106
1108
xferOp.getShapedType ().getElementType ())
1107
- return failure ();
1108
-
1109
- auto insertOp = getInsertOp (xferOp);
1110
- auto vec = getResultVector (xferOp, rewriter);
1111
- auto vecType = dyn_cast<VectorType>(vec.getType ());
1109
+ return rewriter.notifyMatchFailure (
1110
+ xferOp, " not yet supported: element type mismatch" );
1112
1111
auto xferVecType = xferOp.getVectorType ();
1113
-
1114
1112
if (xferVecType.getScalableDims ()[0 ]) {
1115
1113
// Cannot unroll a scalable dimension at compile time.
1116
- return failure ();
1114
+ return rewriter.notifyMatchFailure (
1115
+ xferOp, " scalable dimensions cannot be unrolled" );
1117
1116
}
1118
1117
1118
+ auto insertOp = getInsertOp (xferOp);
1119
+ auto vec = buildResultVector (rewriter, xferOp);
1120
+ auto vecType = dyn_cast<VectorType>(vec.getType ());
1121
+
1119
1122
VectorType newXferVecType = VectorType::Builder (xferVecType).dropDim (0 );
1120
1123
1121
1124
int64_t dimSize = xferVecType.getShape ()[0 ];
0 commit comments