aboutsummaryrefslogtreecommitdiff
path: root/mlir/lib/Transforms/CSE.cpp
diff options
context:
space:
mode:
authorRiver Riddle <riddleriver@gmail.com>2020-03-12 14:06:41 -0700
committerRiver Riddle <riddleriver@gmail.com>2020-03-12 14:26:15 -0700
commit0ddba0bd59c337f16b51a00cb205ecfda46f97fa (patch)
treebe1aaf1254f0c625d48ba66270d69b0db8b38a2e /mlir/lib/Transforms/CSE.cpp
parent907403f342fe661b590f930a83f940c67b3ff855 (diff)
downloadllvm-0ddba0bd59c337f16b51a00cb205ecfda46f97fa.zip
llvm-0ddba0bd59c337f16b51a00cb205ecfda46f97fa.tar.gz
llvm-0ddba0bd59c337f16b51a00cb205ecfda46f97fa.tar.bz2
[mlir][SideEffects] Replace HasNoSideEffect with the memory effect interfaces.
HasNoSideEffect can now be implemented using the MemoryEffectInterface, removing the need to check multiple things for the same information. This also removes an easy foot-gun for users as 'Operation::hasNoSideEffect' would ignore operations that dynamically, or recursively, have no side effects. This also leads to an immediate improvement in some of the existing users, such as DCE, now that they have access to more information. Differential Revision: https://reviews.llvm.org/D76036
Diffstat (limited to 'mlir/lib/Transforms/CSE.cpp')
-rw-r--r--mlir/lib/Transforms/CSE.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/mlir/lib/Transforms/CSE.cpp b/mlir/lib/Transforms/CSE.cpp
index 3a76594..42ba715 100644
--- a/mlir/lib/Transforms/CSE.cpp
+++ b/mlir/lib/Transforms/CSE.cpp
@@ -127,6 +127,13 @@ LogicalResult CSE::simplifyOperation(ScopedMapTy &knownValues, Operation *op) {
if (op->isKnownTerminator())
return failure();
+ // If the operation is already trivially dead just add it to the erase list.
+ if (isOpTriviallyDead(op)) {
+ opsToErase.push_back(op);
+ ++numDCE;
+ return success();
+ }
+
// Don't simplify operations with nested blocks. We don't currently model
// equality comparisons correctly among other things. It is also unclear
// whether we would want to CSE such operations.
@@ -135,16 +142,9 @@ LogicalResult CSE::simplifyOperation(ScopedMapTy &knownValues, Operation *op) {
// TODO(riverriddle) We currently only eliminate non side-effecting
// operations.
- if (!op->hasNoSideEffect())
+ if (!MemoryEffectOpInterface::hasNoEffect(op))
return failure();
- // If the operation is already trivially dead just add it to the erase list.
- if (op->use_empty()) {
- opsToErase.push_back(op);
- ++numDCE;
- return success();
- }
-
// Look for an existing definition for the operation.
if (auto *existing = knownValues.lookup(op)) {
// If we find one then replace all uses of the current operation with the