aboutsummaryrefslogtreecommitdiff
path: root/mlir/lib/Transforms/LoopInvariantCodeMotion.cpp
diff options
context:
space:
mode:
authorNicolas Vasilache <ntv@google.com>2022-01-05 08:19:32 -0500
committerNicolas Vasilache <ntv@google.com>2022-01-05 09:31:23 -0500
commitbb2f87af0ac9ad8cc0efcb523e108e715ee9ab93 (patch)
tree3fd81425f77c2605922907403e96ceea0da9ba0b /mlir/lib/Transforms/LoopInvariantCodeMotion.cpp
parent2ee8154816b91201d606378a3e94a1b1bf9c0dd3 (diff)
downloadllvm-bb2f87af0ac9ad8cc0efcb523e108e715ee9ab93.zip
llvm-bb2f87af0ac9ad8cc0efcb523e108e715ee9ab93.tar.gz
llvm-bb2f87af0ac9ad8cc0efcb523e108e715ee9ab93.tar.bz2
[mlir] Fix missing check on nested op values in LICM
LICM checks that nested ops depend only on values defined outside before performing hoisting. However, it specifically omits to check for terminators which can lead to SSA violations. This revision fixes the incorrect behavior. Differential Revision: https://reviews.llvm.org/D116657
Diffstat (limited to 'mlir/lib/Transforms/LoopInvariantCodeMotion.cpp')
-rw-r--r--mlir/lib/Transforms/LoopInvariantCodeMotion.cpp3
1 files changed, 1 insertions, 2 deletions
diff --git a/mlir/lib/Transforms/LoopInvariantCodeMotion.cpp b/mlir/lib/Transforms/LoopInvariantCodeMotion.cpp
index 15462c9..3c8e14a 100644
--- a/mlir/lib/Transforms/LoopInvariantCodeMotion.cpp
+++ b/mlir/lib/Transforms/LoopInvariantCodeMotion.cpp
@@ -66,7 +66,7 @@ static bool canBeHoisted(Operation *op,
// can be hoisted.
for (auto &region : op->getRegions()) {
for (auto &block : region) {
- for (auto &innerOp : block.without_terminator())
+ for (auto &innerOp : block)
if (!canBeHoisted(&innerOp, definedOutside))
return false;
}
@@ -74,7 +74,6 @@ static bool canBeHoisted(Operation *op,
return true;
}
-
LogicalResult mlir::moveLoopInvariantCode(LoopLikeOpInterface looplike) {
auto &loopBody = looplike.getLoopBody();