/// 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;
/// 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
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;
}
}
-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();
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)) {
}
}
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
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()); }