[Mlir-commits] [mlir] 3f22d49 - [MLIR] Move `print()` and `dump()` from FlatAffineConstraints to IntegerPolyhedron.
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Mon Dec 27 05:18:35 PST 2021
Author: Groverkss
Date: 2021-12-27T18:40:49+05:30
New Revision: 3f22d492ac3c84e9856eff7280ac51a6baa268c6
URL: https://github.com/llvm/llvm-project/commit/3f22d492ac3c84e9856eff7280ac51a6baa268c6
DIFF: https://github.com/llvm/llvm-project/commit/3f22d492ac3c84e9856eff7280ac51a6baa268c6.diff
LOG: [MLIR] Move `print()` and `dump()` from FlatAffineConstraints to IntegerPolyhedron.
This patch moves `FlatAffineConstraints::print` and
`FlatAffineConstraints::dump()` to IntegerPolyhedron.
Reviewed By: arjunp
Differential Revision: https://reviews.llvm.org/D116289
Added:
Modified:
mlir/include/mlir/Analysis/AffineStructures.h
mlir/include/mlir/Analysis/Presburger/IntegerPolyhedron.h
mlir/lib/Analysis/AffineStructures.cpp
mlir/lib/Analysis/Presburger/IntegerPolyhedron.cpp
Removed:
################################################################################
diff --git a/mlir/include/mlir/Analysis/AffineStructures.h b/mlir/include/mlir/Analysis/AffineStructures.h
index ea20edd1036f1..3f632dcc96a84 100644
--- a/mlir/include/mlir/Analysis/AffineStructures.h
+++ b/mlir/include/mlir/Analysis/AffineStructures.h
@@ -335,15 +335,7 @@ class FlatAffineConstraints : public IntegerPolyhedron {
/// match.
void mergeLocalIds(FlatAffineConstraints &other);
- void print(raw_ostream &os) const;
- void dump() const;
-
protected:
- /// Returns false if the fields corresponding to various identifier counts, or
- /// equality/inequality buffer sizes aren't consistent; true otherwise. This
- /// is meant to be used within an assert internally.
- virtual bool hasConsistentState() const;
-
/// Checks all rows of equality/inequality constraints for trivial
/// contradictions (for example: 1 == 0, 0 >= 1), which may have surfaced
/// after elimination. Returns true if an invalid constraint is found;
@@ -419,6 +411,11 @@ class FlatAffineConstraints : public IntegerPolyhedron {
/// equalities.
bool isColZero(unsigned pos) const;
+ /// Prints the number of constraints, dimensions, symbols and locals in the
+ /// FlatAffineConstraints. Also, prints for each identifier whether there is
+ /// an SSA Value attached to it.
+ void printSpace(raw_ostream &os) const override;
+
/// A parameter that controls detection of an unrealistic number of
/// constraints. If the number of constraints is this many times the number of
/// variables, we consider such a system out of line with the intended use
diff --git a/mlir/include/mlir/Analysis/Presburger/IntegerPolyhedron.h b/mlir/include/mlir/Analysis/Presburger/IntegerPolyhedron.h
index c7eae0cd29ee2..b46874fb80727 100644
--- a/mlir/include/mlir/Analysis/Presburger/IntegerPolyhedron.h
+++ b/mlir/include/mlir/Analysis/Presburger/IntegerPolyhedron.h
@@ -195,7 +195,19 @@ class IntegerPolyhedron {
SmallVectorImpl<unsigned> *eqIndices = nullptr,
unsigned offset = 0, unsigned num = 0) const;
+ void print(raw_ostream &os) const;
+ void dump() const;
+
protected:
+ /// Returns false if the fields corresponding to various identifier counts, or
+ /// equality/inequality buffer sizes aren't consistent; true otherwise. This
+ /// is meant to be used within an assert internally.
+ virtual bool hasConsistentState() const;
+
+ /// Prints the number of constraints, dimensions, symbols and locals in the
+ /// IntegerPolyhedron.
+ virtual void printSpace(raw_ostream &os) const;
+
/// Return the index at which the specified kind of id starts.
unsigned getIdKindOffset(IdKind kind) const;
diff --git a/mlir/lib/Analysis/AffineStructures.cpp b/mlir/lib/Analysis/AffineStructures.cpp
index 520262d6fddc7..205abe280d9bd 100644
--- a/mlir/lib/Analysis/AffineStructures.cpp
+++ b/mlir/lib/Analysis/AffineStructures.cpp
@@ -747,19 +747,6 @@ void FlatAffineConstraints::normalizeConstraintsByGCD() {
}
}
-bool FlatAffineConstraints::hasConsistentState() const {
- if (!inequalities.hasConsistentState())
- return false;
- if (!equalities.hasConsistentState())
- return false;
-
- // Catches errors where numDims, numSymbols, numIds aren't consistent.
- if (numDims > numIds || numSymbols > numIds || numDims + numSymbols > numIds)
- return false;
-
- return true;
-}
-
bool FlatAffineValueConstraints::hasConsistentState() const {
return FlatAffineConstraints::hasConsistentState() &&
values.size() == getNumIds();
@@ -2587,11 +2574,8 @@ bool FlatAffineConstraints::isHyperRectangular(unsigned pos,
return true;
}
-void FlatAffineConstraints::print(raw_ostream &os) const {
- assert(hasConsistentState());
- os << "\nConstraints (" << getNumDimIds() << " dims, " << getNumSymbolIds()
- << " symbols, " << getNumLocalIds() << " locals), (" << getNumConstraints()
- << " constraints)\n";
+void FlatAffineConstraints::printSpace(raw_ostream &os) const {
+ IntegerPolyhedron::printSpace(os);
os << "(";
for (unsigned i = 0, e = getNumIds(); i < e; i++) {
if (auto *valueCstr = dyn_cast<const FlatAffineValueConstraints>(this)) {
@@ -2604,23 +2588,8 @@ void FlatAffineConstraints::print(raw_ostream &os) const {
}
}
os << " const)\n";
- for (unsigned i = 0, e = getNumEqualities(); i < e; ++i) {
- for (unsigned j = 0, f = getNumCols(); j < f; ++j) {
- os << atEq(i, j) << " ";
- }
- os << "= 0\n";
- }
- for (unsigned i = 0, e = getNumInequalities(); i < e; ++i) {
- for (unsigned j = 0, f = getNumCols(); j < f; ++j) {
- os << atIneq(i, j) << " ";
- }
- os << ">= 0\n";
- }
- os << '\n';
}
-void FlatAffineConstraints::dump() const { print(llvm::errs()); }
-
/// Removes duplicate constraints, trivially true constraints, and constraints
/// that can be detected as redundant as a result of
diff ering only in their
/// constant term part. A constraint of the form <non-negative constant> >= 0 is
diff --git a/mlir/lib/Analysis/Presburger/IntegerPolyhedron.cpp b/mlir/lib/Analysis/Presburger/IntegerPolyhedron.cpp
index 958f52e2625eb..4eed7ca91dd49 100644
--- a/mlir/lib/Analysis/Presburger/IntegerPolyhedron.cpp
+++ b/mlir/lib/Analysis/Presburger/IntegerPolyhedron.cpp
@@ -271,3 +271,42 @@ void IntegerPolyhedron::getLowerAndUpperBoundIndices(
eqIndices->push_back(r);
}
}
+
+bool IntegerPolyhedron::hasConsistentState() const {
+ if (!inequalities.hasConsistentState())
+ return false;
+ if (!equalities.hasConsistentState())
+ return false;
+
+ // Catches errors where numDims, numSymbols, numIds aren't consistent.
+ if (numDims > numIds || numSymbols > numIds || numDims + numSymbols > numIds)
+ return false;
+
+ return true;
+}
+
+void IntegerPolyhedron::printSpace(raw_ostream &os) const {
+ os << "\nConstraints (" << getNumDimIds() << " dims, " << getNumSymbolIds()
+ << " symbols, " << getNumLocalIds() << " locals), (" << getNumConstraints()
+ << " constraints)\n";
+}
+
+void IntegerPolyhedron::print(raw_ostream &os) const {
+ assert(hasConsistentState());
+ printSpace(os);
+ for (unsigned i = 0, e = getNumEqualities(); i < e; ++i) {
+ for (unsigned j = 0, f = getNumCols(); j < f; ++j) {
+ os << atEq(i, j) << " ";
+ }
+ os << "= 0\n";
+ }
+ for (unsigned i = 0, e = getNumInequalities(); i < e; ++i) {
+ for (unsigned j = 0, f = getNumCols(); j < f; ++j) {
+ os << atIneq(i, j) << " ";
+ }
+ os << ">= 0\n";
+ }
+ os << '\n';
+}
+
+void IntegerPolyhedron::dump() const { print(llvm::errs()); }
More information about the Mlir-commits
mailing list