From f625ff78242e100292c12b83592b000d9e2768f9 Mon Sep 17 00:00:00 2001 From: jumerckx <31353884+jumerckx@users.noreply.github.com> Date: Tue, 7 Oct 2025 13:31:57 +0200 Subject: [PATCH 1/2] don't shadow maximum depth position when creating constraint position. --- mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp b/mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp index 39d4815dc73b7..f19536261f077 100644 --- a/mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp +++ b/mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp @@ -279,8 +279,8 @@ static void getConstraintPredicates(pdl::ApplyNativeConstraintOp op, // For each result register a position so it can be used later for (auto [i, result] : llvm::enumerate(results)) { ConstraintQuestion *q = cast(pred.first); - ConstraintPosition *pos = builder.getConstraintPosition(q, i); - auto [it, inserted] = inputs.try_emplace(result, pos); + ConstraintPosition *constraintPos = builder.getConstraintPosition(q, i); + auto [it, inserted] = inputs.try_emplace(result, constraintPos); // If this is an input value that has been visited in the tree, add a // constraint to ensure that both instances refer to the same value. if (!inserted) { From 422f2c6e12847ff2914f24e228cf5c42b1f9c993 Mon Sep 17 00:00:00 2001 From: jumerckx <31353884+jumerckx@users.noreply.github.com> Date: Tue, 7 Oct 2025 13:55:35 +0200 Subject: [PATCH 2/2] fix --- mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp b/mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp index f19536261f077..e95a178c030d4 100644 --- a/mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp +++ b/mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp @@ -284,9 +284,9 @@ static void getConstraintPredicates(pdl::ApplyNativeConstraintOp op, // If this is an input value that has been visited in the tree, add a // constraint to ensure that both instances refer to the same value. if (!inserted) { - Position *first = pos; + Position *first = constraintPos; Position *second = it->second; - if (comparePosDepth(second, first)) + if (comparePosDepth(second, pos)) std::tie(second, first) = std::make_pair(first, second); predList.emplace_back(second, builder.getEqualTo(first));