forked from OSchip/llvm-project
[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
This commit is contained in:
parent
ba89c6d505
commit
3f22d492ac
|
@ -335,15 +335,7 @@ public:
|
|||
/// 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 @@ protected:
|
|||
/// 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
|
||||
|
|
|
@ -195,7 +195,19 @@ public:
|
|||
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;
|
||||
|
||||
|
|
|
@ -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 differing only in their
|
||||
/// constant term part. A constraint of the form <non-negative constant> >= 0 is
|
||||
|
|
|
@ -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()); }
|
||||
|
|
Loading…
Reference in New Issue