[Mlir-commits] [mlir] 0c29f45 - [MLIR] Fix dialect conversion cancelRootUpdate
Uday Bondhugula
llvmlistbot at llvm.org
Tue Jul 6 02:52:41 PDT 2021
Author: Uday Bondhugula
Date: 2021-07-06T15:19:49+05:30
New Revision: 0c29f45ac9e8e67a6481c0810e2e335a12bf3877
URL: https://github.com/llvm/llvm-project/commit/0c29f45ac9e8e67a6481c0810e2e335a12bf3877
DIFF: https://github.com/llvm/llvm-project/commit/0c29f45ac9e8e67a6481c0810e2e335a12bf3877.diff
LOG: [MLIR] Fix dialect conversion cancelRootUpdate
Fix dialect conversion ConversionPatternRewriter::cancelRootUpdate: the
erasure of operations here from the list of root update was off by one.
Should have been:
```
rootUpdates.erase(rootUpdates.begin() + (rootUpdates.rend() - it - 1));
```
instead of
```
rootUpdates.erase(rootUpdates.begin() + (rootUpdates.rend() - it));
```
or more directly:
```
rootUpdates.erase(it.base() - 1)
```
While on this, add an assertion to improve dev experience when a cancel is
called on an op on which a root update hasn't been started.
Differential Revision: https://reviews.llvm.org/D105397
Added:
Modified:
mlir/lib/Transforms/Utils/DialectConversion.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Transforms/Utils/DialectConversion.cpp b/mlir/lib/Transforms/Utils/DialectConversion.cpp
index 00b006cca1b4a..8e1e2cbcb7ee7 100644
--- a/mlir/lib/Transforms/Utils/DialectConversion.cpp
+++ b/mlir/lib/Transforms/Utils/DialectConversion.cpp
@@ -1484,7 +1484,9 @@ void ConversionPatternRewriter::cancelRootUpdate(Operation *op) {
auto stateHasOp = [op](const auto &it) { return it.getOperation() == op; };
auto &rootUpdates = impl->rootUpdates;
auto it = llvm::find_if(llvm::reverse(rootUpdates), stateHasOp);
- rootUpdates.erase(rootUpdates.begin() + (rootUpdates.rend() - it));
+ assert(it != rootUpdates.rend() && "no root update started on op");
+ int updateIdx = std::prev(rootUpdates.rend()) - it;
+ rootUpdates.erase(rootUpdates.begin() + updateIdx);
}
/// PatternRewriter hook for notifying match failure reasons.
@@ -2049,7 +2051,7 @@ void OperationLegalizer::computeLegalizationGraphBenefit(
orderedPatternList = anyOpLegalizerPatterns;
// If the pattern is not found, then it was removed and cannot be matched.
- auto it = llvm::find(orderedPatternList, &pattern);
+ auto *it = llvm::find(orderedPatternList, &pattern);
if (it == orderedPatternList.end())
return PatternBenefit::impossibleToMatch();
More information about the Mlir-commits
mailing list