@@ -1232,27 +1232,30 @@ transform::GetParentOp::apply(transform::TransformRewriter &rewriter,
12321232 SmallVector<Operation *> parents;
12331233 DenseSet<Operation *> resultSet;
12341234 for (Operation *target : state.getPayloadOps (getTarget ())) {
1235- Operation *parent = target->getParentOp ();
1236- while (parent) {
1237- bool checkIsolatedFromAbove =
1238- !getIsolatedFromAbove () ||
1239- parent->hasTrait <OpTrait::IsIsolatedFromAbove>();
1240- bool checkOpName = !getOpName ().has_value () ||
1241- parent->getName ().getStringRef () == *getOpName ();
1242- if (checkIsolatedFromAbove && checkOpName)
1243- break ;
1235+ Operation *parent = target;
1236+ for (int64_t i = 0 , e = getNthParent (); i < e; ++i) {
12441237 parent = parent->getParentOp ();
1245- }
1246- if (!parent) {
1247- if (getAllowEmptyResults ()) {
1248- results.set (llvm::cast<OpResult>(getResult ()), parents);
1249- return DiagnosedSilenceableFailure::success ();
1238+ while (parent) {
1239+ bool checkIsolatedFromAbove =
1240+ !getIsolatedFromAbove () ||
1241+ parent->hasTrait <OpTrait::IsIsolatedFromAbove>();
1242+ bool checkOpName = !getOpName ().has_value () ||
1243+ parent->getName ().getStringRef () == *getOpName ();
1244+ if (checkIsolatedFromAbove && checkOpName)
1245+ break ;
1246+ parent = parent->getParentOp ();
1247+ }
1248+ if (!parent) {
1249+ if (getAllowEmptyResults ()) {
1250+ results.set (llvm::cast<OpResult>(getResult ()), parents);
1251+ return DiagnosedSilenceableFailure::success ();
1252+ }
1253+ DiagnosedSilenceableFailure diag =
1254+ emitSilenceableError ()
1255+ << " could not find a parent op that matches all requirements" ;
1256+ diag.attachNote (target->getLoc ()) << " target op" ;
1257+ return diag;
12501258 }
1251- DiagnosedSilenceableFailure diag =
1252- emitSilenceableError ()
1253- << " could not find a parent op that matches all requirements" ;
1254- diag.attachNote (target->getLoc ()) << " target op" ;
1255- return diag;
12561259 }
12571260 if (getDeduplicate ()) {
12581261 if (!resultSet.contains (parent)) {
0 commit comments