@@ -1047,15 +1047,18 @@ class ExtractOpFromElementwise final
10471047 }
10481048};
10491049
1050+ // / Check if the element type is suitable for vector.load/store sinking.
1051+ // / Element type must be index or byte-aligned integer or floating-point type.
10501052static bool isSupportedMemSinkElementType (Type type) {
10511053 if (isa<IndexType>(type))
10521054 return true ;
10531055
1054- // Non-byte-aligned types are tricky, skip them.
10551056 return type.isIntOrFloat () && type.getIntOrFloatBitWidth () % 8 == 0 ;
10561057}
10571058
1058- // / Pattern to rewrite vector.extract(vector.load) -> vector/memref.load.
1059+ // / Pattern to rewrite `vector.extract(vector.load) -> vector/memref.load.
1060+ // / Only index and byte-aligned integer and floating-point element types are
1061+ // / supported for now.
10591062// /
10601063// / Example:
10611064// / ```
@@ -1088,8 +1091,11 @@ class ExtractOpFromLoad final : public OpRewritePattern<vector::ExtractOp> {
10881091 " scalable vectors are not supported" );
10891092
10901093 MemRefType memType = loadOp.getMemRefType ();
1094+
1095+ // Non-byte-aligned types are tricky and may require special handling,
1096+ // ignore them for now.
10911097 if (!isSupportedMemSinkElementType (memType.getElementType ()))
1092- return rewriter.notifyMatchFailure (op, " unsupported memref element type" );
1098+ return rewriter.notifyMatchFailure (op, " unsupported element type" );
10931099
10941100 int64_t rankOffset = memType.getRank () - loadVecType.getRank ();
10951101 if (rankOffset < 0 )
@@ -1161,7 +1167,7 @@ class StoreOpFromSplatOrBroadcast final
11611167
11621168 if (vecType.getNumElements () != 1 )
11631169 return rewriter.notifyMatchFailure (
1164- op, " only 1-element, vectors are supported" );
1170+ op, " only 1-element vectors are supported" );
11651171
11661172 Operation *splat = op.getValueToStore ().getDefiningOp ();
11671173 if (!isa_and_present<vector::BroadcastOp, vector::SplatOp>(splat))
@@ -2253,6 +2259,7 @@ void mlir::vector::populateSinkVectorOpsPatterns(RewritePatternSet &patterns,
22532259
22542260void mlir::vector::populateSinkVectorMemOpsPatterns (RewritePatternSet &patterns,
22552261 PatternBenefit benefit) {
2262+ // TODO: Consider converting these patterns to canonicalizations.
22562263 patterns.add <ExtractOpFromLoad, StoreOpFromSplatOrBroadcast>(
22572264 patterns.getContext (), benefit);
22582265}
0 commit comments