As per the LLVM Coding Standards, function names should be verb phrases.
void addInequality(ArrayRef<int64_t> coeffs);
/// Returns the number of variables in the tableau.
- unsigned numVariables() const;
+ unsigned getNumVariables() const;
/// Returns the number of constraints in the tableau.
- unsigned numConstraints() const;
+ unsigned getNumConstraints() const;
/// Add an equality to the tableau. If coeffs is c_0, c_1, ... c_n, where n
/// is the current number of variables, then the corresponding equality is
addInequality(negatedCoeffs);
}
-unsigned Simplex::numVariables() const { return var.size(); }
-unsigned Simplex::numConstraints() const { return con.size(); }
+unsigned Simplex::getNumVariables() const { return var.size(); }
+unsigned Simplex::getNumConstraints() const { return con.size(); }
/// Return a snapshot of the current state. This is just the current size of the
/// undo log.
/// Add all the constraints from the given FlatAffineConstraints.
void Simplex::intersectFlatAffineConstraints(const FlatAffineConstraints &fac) {
- assert(fac.getNumIds() == numVariables() &&
+ assert(fac.getNumIds() == getNumVariables() &&
"FlatAffineConstraints must have same dimensionality as simplex");
for (unsigned i = 0, e = fac.getNumInequalities(); i < e; ++i)
addInequality(fac.getInequality(i));
/// It has column layout:
/// denominator, constant, A's columns, B's columns.
Simplex Simplex::makeProduct(const Simplex &a, const Simplex &b) {
- unsigned numVar = a.numVariables() + b.numVariables();
- unsigned numCon = a.numConstraints() + b.numConstraints();
+ unsigned numVar = a.getNumVariables() + b.getNumVariables();
+ unsigned numCon = a.getNumConstraints() + b.getNumConstraints();
Simplex result(numVar);
result.tableau.resizeVertically(numCon);
result.var = concat(a.var, b.var);
auto indexFromBIndex = [&](int index) {
- return index >= 0 ? a.numVariables() + index
- : ~(a.numConstraints() + ~index);
+ return index >= 0 ? a.getNumVariables() + index
+ : ~(a.getNumConstraints() + ~index);
};
result.colUnknown.assign(2, nullIndex);
public:
GBRSimplex(const Simplex &originalSimplex)
: simplex(Simplex::makeProduct(originalSimplex, originalSimplex)),
- simplexConstraintOffset(simplex.numConstraints()) {}
+ simplexConstraintOffset(simplex.getNumConstraints()) {}
/// Add an equality dotProduct(dir, x - y) == 0.
/// First pushes a snapshot for the current simplex state to the stack so
/// - dir_1 * y_1 - dir_2 * y_2 - ... - dir_n * y_n,
/// where n is the dimension of the original polytope.
SmallVector<int64_t, 8> getCoeffsForDirection(ArrayRef<int64_t> dir) {
- assert(2 * dir.size() == simplex.numVariables() &&
+ assert(2 * dir.size() == simplex.getNumVariables() &&
"Direction vector has wrong dimensionality");
SmallVector<int64_t, 8> coeffs(dir.begin(), dir.end());
coeffs.reserve(2 * dir.size());
assert(sI.getNumLocalIds() == 0 &&
"Subtracting sets with divisions is not yet supported!");
unsigned initialSnapshot = simplex.getSnapshot();
- unsigned offset = simplex.numConstraints();
+ unsigned offset = simplex.getNumConstraints();
simplex.intersectFlatAffineConstraints(sI);
if (simplex.isEmpty()) {
expectInequalityMakesSetEmpty(simplex, checkCoeffs[1], true);
simplex.rollback(snapshot);
- EXPECT_EQ(simplex.numConstraints(), 0u);
+ EXPECT_EQ(simplex.getNumConstraints(), 0u);
expectInequalityMakesSetEmpty(simplex, checkCoeffs[0], false);
expectInequalityMakesSetEmpty(simplex, checkCoeffs[1], false);
simplex.detectRedundant();
ASSERT_FALSE(simplex.isEmpty());
- for (unsigned i = 0; i < simplex.numConstraints(); ++i)
+ for (unsigned i = 0; i < simplex.getNumConstraints(); ++i)
EXPECT_FALSE(simplex.isMarkedRedundant(i)) << "i = " << i << "\n";
}
unsigned snapshot1 = simplex.getSnapshot();
simplex.appendVariable();
- EXPECT_EQ(simplex.numVariables(), 2u);
+ EXPECT_EQ(simplex.getNumVariables(), 2u);
int64_t yMin = 2, yMax = 5;
simplex.addInequality({0, 1, -yMin}); // y >= 2.
unsigned snapshot2 = simplex.getSnapshot();
simplex.appendVariable(2);
- EXPECT_EQ(simplex.numVariables(), 4u);
+ EXPECT_EQ(simplex.getNumVariables(), 4u);
simplex.rollback(snapshot2);
- EXPECT_EQ(simplex.numVariables(), 2u);
- EXPECT_EQ(simplex.numConstraints(), 2u);
+ EXPECT_EQ(simplex.getNumVariables(), 2u);
+ EXPECT_EQ(simplex.getNumConstraints(), 2u);
EXPECT_EQ(simplex.computeIntegerBounds({0, 1, 0}),
std::make_pair(yMin, yMax));
simplex.rollback(snapshot1);
- EXPECT_EQ(simplex.numVariables(), 1u);
- EXPECT_EQ(simplex.numConstraints(), 0u);
+ EXPECT_EQ(simplex.getNumVariables(), 1u);
+ EXPECT_EQ(simplex.getNumConstraints(), 0u);
}
} // namespace mlir