@@ -1153,53 +1153,10 @@ struct PTOViewToMemrefPass
11531153 auto sv = rewriter.create <memref::SubViewOp>(
11541154 loc, subViewMemRefType, src, mixedOffsets, mixedSizes, mixedStrides);
11551155
1156- // Reinterpret the subview base as a parent-shaped tile view.
1157- // valid_row/valid_col (below) carries the actual sub-tile extent.
1158- SmallVector<OpFoldResult> parentMixedSizes;
1159- SmallVector<OpFoldResult> parentMixedStrides;
1160- parentMixedSizes.reserve (parentShape.size ());
1161- parentMixedStrides.reserve (srcStrides.size ());
1162-
1163- memref::ExtractStridedMetadataOp srcMd;
1164- bool needDynamicMeta = false ;
1165- for (size_t i = 0 ; i < parentShape.size (); ++i)
1166- needDynamicMeta |= (parentShape[i] == ShapedType::kDynamic );
1167- for (int64_t s : srcStrides)
1168- needDynamicMeta |= (s == ShapedType::kDynamic );
1169- if (needDynamicMeta)
1170- srcMd = rewriter.create <memref::ExtractStridedMetadataOp>(loc, src);
1171-
1172- for (size_t i = 0 ; i < parentShape.size (); ++i) {
1173- if (parentShape[i] == ShapedType::kDynamic ) {
1174- if (!srcMd) {
1175- op.emitError (" failed to materialize dynamic parent size for subview" );
1176- signalPassFailure ();
1177- return ;
1178- }
1179- parentMixedSizes.push_back (srcMd.getSizes ()[i]);
1180- } else {
1181- parentMixedSizes.push_back (rewriter.getIndexAttr (parentShape[i]));
1182- }
1183- }
1184-
1185- for (size_t i = 0 ; i < srcStrides.size (); ++i) {
1186- if (srcStrides[i] == ShapedType::kDynamic ) {
1187- if (!srcMd) {
1188- op.emitError (" failed to materialize dynamic parent stride for subview" );
1189- signalPassFailure ();
1190- return ;
1191- }
1192- parentMixedStrides.push_back (srcMd.getStrides ()[i]);
1193- } else {
1194- parentMixedStrides.push_back (rewriter.getIndexAttr (srcStrides[i]));
1195- }
1196- }
1197-
1198- auto subAsParent = rewriter.create <memref::ReinterpretCastOp>(
1199- loc, resultMemRefType, sv.getResult (), rewriter.getIndexAttr (0 ),
1200- parentMixedSizes, parentMixedStrides);
1201-
12021156 // 6. Re-bind tile metadata (config + valid dims).
1157+ // BindTileOp already models metadata rebind + memref type bridge,
1158+ // so we can bind subview directly and avoid an intermediate
1159+ // memref.reinterpret_cast.
12031160 // subview defaults valid dims to subview shape unless user explicitly
12041161 // provides valid_row/valid_col.
12051162 Value vRow;
@@ -1212,8 +1169,8 @@ struct PTOViewToMemrefPass
12121169 staticSizes[1 ], op);
12131170
12141171 auto bindOp = rewriter.create <pto::BindTileOp>(
1215- loc, resultMemRefType, subAsParent .getResult (),
1216- vRow ? vRow : Value (), vCol ? vCol : Value (), configAttr);
1172+ loc, resultMemRefType, sv .getResult (), vRow ? vRow : Value (),
1173+ vCol ? vCol : Value (), configAttr);
12171174 markForceDynamicValidShape (bindOp,
12181175 resultTileTy && resultTileTy.hasDynamicValid (),
12191176 ctx);
0 commit comments