@@ -1087,53 +1087,10 @@ struct PTOViewToMemrefPass
10871087 auto sv = rewriter.create <memref::SubViewOp>(
10881088 loc, subViewMemRefType, src, mixedOffsets, mixedSizes, mixedStrides);
10891089
1090- // Reinterpret the subview base as a parent-shaped tile view.
1091- // valid_row/valid_col (below) carries the actual sub-tile extent.
1092- SmallVector<OpFoldResult> parentMixedSizes;
1093- SmallVector<OpFoldResult> parentMixedStrides;
1094- parentMixedSizes.reserve (parentShape.size ());
1095- parentMixedStrides.reserve (srcStrides.size ());
1096-
1097- memref::ExtractStridedMetadataOp srcMd;
1098- bool needDynamicMeta = false ;
1099- for (size_t i = 0 ; i < parentShape.size (); ++i)
1100- needDynamicMeta |= (parentShape[i] == ShapedType::kDynamic );
1101- for (int64_t s : srcStrides)
1102- needDynamicMeta |= (s == ShapedType::kDynamic );
1103- if (needDynamicMeta)
1104- srcMd = rewriter.create <memref::ExtractStridedMetadataOp>(loc, src);
1105-
1106- for (size_t i = 0 ; i < parentShape.size (); ++i) {
1107- if (parentShape[i] == ShapedType::kDynamic ) {
1108- if (!srcMd) {
1109- op.emitError (" failed to materialize dynamic parent size for subview" );
1110- signalPassFailure ();
1111- return ;
1112- }
1113- parentMixedSizes.push_back (srcMd.getSizes ()[i]);
1114- } else {
1115- parentMixedSizes.push_back (rewriter.getIndexAttr (parentShape[i]));
1116- }
1117- }
1118-
1119- for (size_t i = 0 ; i < srcStrides.size (); ++i) {
1120- if (srcStrides[i] == ShapedType::kDynamic ) {
1121- if (!srcMd) {
1122- op.emitError (" failed to materialize dynamic parent stride for subview" );
1123- signalPassFailure ();
1124- return ;
1125- }
1126- parentMixedStrides.push_back (srcMd.getStrides ()[i]);
1127- } else {
1128- parentMixedStrides.push_back (rewriter.getIndexAttr (srcStrides[i]));
1129- }
1130- }
1131-
1132- auto subAsParent = rewriter.create <memref::ReinterpretCastOp>(
1133- loc, resultMemRefType, sv.getResult (), rewriter.getIndexAttr (0 ),
1134- parentMixedSizes, parentMixedStrides);
1135-
11361090 // 6. Re-bind tile metadata (config + valid dims).
1091+ // BindTileOp already models metadata rebind + memref type bridge,
1092+ // so we can bind subview directly and avoid an intermediate
1093+ // memref.reinterpret_cast.
11371094 // subview defaults valid dims to subview shape unless user explicitly
11381095 // provides valid_row/valid_col.
11391096 Value vRow;
@@ -1146,8 +1103,8 @@ struct PTOViewToMemrefPass
11461103 staticSizes[1 ], op);
11471104
11481105 auto bindOp = rewriter.create <pto::BindTileOp>(
1149- loc, resultMemRefType, subAsParent .getResult (),
1150- vRow ? vRow : Value (), vCol ? vCol : Value (), configAttr);
1106+ loc, resultMemRefType, sv .getResult (), vRow ? vRow : Value (),
1107+ vCol ? vCol : Value (), configAttr);
11511108 markForceDynamicValidShape (bindOp,
11521109 resultTileTy && resultTileTy.hasDynamicValid (),
11531110 ctx);
0 commit comments