-
Notifications
You must be signed in to change notification settings - Fork 13.3k
[mlir][IntegerRangeAnalysis] expose maybeReplaceWithConstant #133151
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[mlir][IntegerRangeAnalysis] expose maybeReplaceWithConstant #133151
Conversation
@llvm/pr-subscribers-mlir Author: Maksim Levental (makslevental) ChangesThis PR exposes Full diff: https://github.com/llvm/llvm-project/pull/133151.diff 2 Files Affected:
diff --git a/mlir/include/mlir/Analysis/DataFlow/IntegerRangeAnalysis.h b/mlir/include/mlir/Analysis/DataFlow/IntegerRangeAnalysis.h
index b9e5573d6ad40..b643ca5284187 100644
--- a/mlir/include/mlir/Analysis/DataFlow/IntegerRangeAnalysis.h
+++ b/mlir/include/mlir/Analysis/DataFlow/IntegerRangeAnalysis.h
@@ -19,6 +19,7 @@
#define MLIR_ANALYSIS_DATAFLOW_INTEGERANGEANALYSIS_H
#include "mlir/Analysis/DataFlow/SparseAnalysis.h"
+#include "mlir/IR/PatternMatch.h"
#include "mlir/Interfaces/InferIntRangeInterface.h"
namespace mlir {
@@ -83,6 +84,9 @@ LogicalResult staticallyNonNegative(DataFlowSolver &solver, Operation *op);
/// to use a non-64-bit index.
LogicalResult staticallyNonNegative(DataFlowSolver &solver, Value v);
+LogicalResult maybeReplaceWithConstant(DataFlowSolver &solver,
+ PatternRewriter &rewriter, Value value);
+
} // end namespace dataflow
} // end namespace mlir
diff --git a/mlir/lib/Dialect/Arith/Transforms/IntRangeOptimizations.cpp b/mlir/lib/Dialect/Arith/Transforms/IntRangeOptimizations.cpp
index f866c91ef6e39..22e14fabba9a7 100644
--- a/mlir/lib/Dialect/Arith/Transforms/IntRangeOptimizations.cpp
+++ b/mlir/lib/Dialect/Arith/Transforms/IntRangeOptimizations.cpp
@@ -57,10 +57,10 @@ static void copyIntegerRange(DataFlowSolver &solver, Value oldVal,
*oldState);
}
+namespace mlir::dataflow {
/// Patterned after SCCP
-static LogicalResult maybeReplaceWithConstant(DataFlowSolver &solver,
- PatternRewriter &rewriter,
- Value value) {
+LogicalResult maybeReplaceWithConstant(DataFlowSolver &solver,
+ PatternRewriter &rewriter, Value value) {
if (value.use_empty())
return failure();
std::optional<APInt> maybeConstValue = getMaybeConstantValue(solver, value);
@@ -95,6 +95,7 @@ static LogicalResult maybeReplaceWithConstant(DataFlowSolver &solver,
rewriter.replaceAllUsesWith(value, constOp->getResult(0));
return success();
}
+} // namespace mlir::dataflow
namespace {
class DataFlowListener : public RewriterBase::Listener {
|
@llvm/pr-subscribers-mlir-arith Author: Maksim Levental (makslevental) ChangesThis PR exposes Full diff: https://github.com/llvm/llvm-project/pull/133151.diff 2 Files Affected:
diff --git a/mlir/include/mlir/Analysis/DataFlow/IntegerRangeAnalysis.h b/mlir/include/mlir/Analysis/DataFlow/IntegerRangeAnalysis.h
index b9e5573d6ad40..b643ca5284187 100644
--- a/mlir/include/mlir/Analysis/DataFlow/IntegerRangeAnalysis.h
+++ b/mlir/include/mlir/Analysis/DataFlow/IntegerRangeAnalysis.h
@@ -19,6 +19,7 @@
#define MLIR_ANALYSIS_DATAFLOW_INTEGERANGEANALYSIS_H
#include "mlir/Analysis/DataFlow/SparseAnalysis.h"
+#include "mlir/IR/PatternMatch.h"
#include "mlir/Interfaces/InferIntRangeInterface.h"
namespace mlir {
@@ -83,6 +84,9 @@ LogicalResult staticallyNonNegative(DataFlowSolver &solver, Operation *op);
/// to use a non-64-bit index.
LogicalResult staticallyNonNegative(DataFlowSolver &solver, Value v);
+LogicalResult maybeReplaceWithConstant(DataFlowSolver &solver,
+ PatternRewriter &rewriter, Value value);
+
} // end namespace dataflow
} // end namespace mlir
diff --git a/mlir/lib/Dialect/Arith/Transforms/IntRangeOptimizations.cpp b/mlir/lib/Dialect/Arith/Transforms/IntRangeOptimizations.cpp
index f866c91ef6e39..22e14fabba9a7 100644
--- a/mlir/lib/Dialect/Arith/Transforms/IntRangeOptimizations.cpp
+++ b/mlir/lib/Dialect/Arith/Transforms/IntRangeOptimizations.cpp
@@ -57,10 +57,10 @@ static void copyIntegerRange(DataFlowSolver &solver, Value oldVal,
*oldState);
}
+namespace mlir::dataflow {
/// Patterned after SCCP
-static LogicalResult maybeReplaceWithConstant(DataFlowSolver &solver,
- PatternRewriter &rewriter,
- Value value) {
+LogicalResult maybeReplaceWithConstant(DataFlowSolver &solver,
+ PatternRewriter &rewriter, Value value) {
if (value.use_empty())
return failure();
std::optional<APInt> maybeConstValue = getMaybeConstantValue(solver, value);
@@ -95,6 +95,7 @@ static LogicalResult maybeReplaceWithConstant(DataFlowSolver &solver,
rewriter.replaceAllUsesWith(value, constOp->getResult(0));
return success();
}
+} // namespace mlir::dataflow
namespace {
class DataFlowListener : public RewriterBase::Listener {
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor API notes, approved after those
@@ -19,6 +19,7 @@ | |||
#define MLIR_ANALYSIS_DATAFLOW_INTEGERANGEANALYSIS_H | |||
|
|||
#include "mlir/Analysis/DataFlow/SparseAnalysis.h" | |||
#include "mlir/IR/PatternMatch.h" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we can forward-declare this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
@@ -83,6 +84,9 @@ LogicalResult staticallyNonNegative(DataFlowSolver &solver, Operation *op); | |||
/// to use a non-64-bit index. | |||
LogicalResult staticallyNonNegative(DataFlowSolver &solver, Value v); | |||
|
|||
LogicalResult maybeReplaceWithConstant(DataFlowSolver &solver, | |||
PatternRewriter &rewriter, Value value); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This could be an RewriterBase &
since this isn't necessarily being called in a pattern context?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
6c7d94f
to
936c023
Compare
This PR exposes
maybeReplaceWithConstant
in headers for downstream use.