Skip to content

Commit

Permalink
[ConstraintElimination] Change debug output to display variable names.
Browse files Browse the repository at this point in the history
Previously when constraint system outputs the rows in the system the variables used are x1,2...n making it hard to infer which ones they relate to in the IR

Reviewed By: fhahn

Differential Revision: https://reviews.llvm.org/D142618
  • Loading branch information
Zain Jaffal committed Feb 15, 2023
1 parent b67ee5d commit 869c87a
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 30 deletions.
14 changes: 9 additions & 5 deletions llvm/include/llvm/Analysis/ConstraintSystem.h
Expand Up @@ -36,13 +36,17 @@ class ConstraintSystem {
// Eliminate constraints from the system using Fourier–Motzkin elimination.
bool eliminateUsingFM();

/// Print the constraints in the system, using x0...xn as variable names.
void dump() const;

/// Returns true if there may be a solution for the constraints in the system.
bool mayHaveSolutionImpl();

/// Get list of variable names from the Value2Index map.
SmallVector<std::string> getVarNamesList() const;

public:
ConstraintSystem() {}
ConstraintSystem(const DenseMap<Value *, unsigned> &Value2Index)
: Value2Index(Value2Index) {}

bool addVariableRow(ArrayRef<int64_t> R) {
assert(Constraints.empty() || R.size() == Constraints.back().size());
// If all variable coefficients are 0, the constraint does not provide any
Expand Down Expand Up @@ -103,8 +107,8 @@ class ConstraintSystem {
/// Returns the number of rows in the constraint system.
unsigned size() const { return Constraints.size(); }

/// Print the constraints in the system, using \p Names as variable names.
void dump(ArrayRef<std::string> Names) const;
/// Print the constraints in the system.
void dump() const;
};
} // namespace llvm

Expand Down
25 changes: 15 additions & 10 deletions llvm/lib/Analysis/ConstraintSystem.cpp
Expand Up @@ -111,10 +111,23 @@ bool ConstraintSystem::mayHaveSolutionImpl() {
return all_of(Constraints, [](auto &R) { return R[0] >= 0; });
}

void ConstraintSystem::dump(ArrayRef<std::string> Names) const {
SmallVector<std::string> ConstraintSystem::getVarNamesList() const {
SmallVector<std::string> Names(Value2Index.size(), "");
for (auto &[V, Index] : Value2Index) {
std::string OperandName;
if (V->getName().empty())
OperandName = V->getNameOrAsOperand();
else
OperandName = std::string("%") + V->getName().str();
Names[Index - 1] = OperandName;
}
return Names;
}

void ConstraintSystem::dump() const {
if (Constraints.empty())
return;

SmallVector<std::string> Names = getVarNamesList();
for (const auto &Row : Constraints) {
SmallVector<std::string, 16> Parts;
for (unsigned I = 1, S = Row.size(); I < S; ++I) {
Expand All @@ -131,14 +144,6 @@ void ConstraintSystem::dump(ArrayRef<std::string> Names) const {
}
}

void ConstraintSystem::dump() const {
SmallVector<std::string, 16> Names;
for (unsigned i = 1; i < Constraints.back().size(); ++i)
Names.push_back("x" + std::to_string(i));
LLVM_DEBUG(dbgs() << "---\n");
dump(Names);
}

bool ConstraintSystem::mayHaveSolution() {
LLVM_DEBUG(dump());
bool HasSolution = mayHaveSolutionImpl();
Expand Down
22 changes: 7 additions & 15 deletions llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
Expand Up @@ -644,20 +644,12 @@ struct State {
} // namespace

#ifndef NDEBUG
static void dumpWithNames(const ConstraintSystem &CS,
DenseMap<Value *, unsigned> &Value2Index) {
SmallVector<std::string> Names(Value2Index.size(), "");
for (auto &KV : Value2Index) {
Names[KV.second - 1] = std::string("%") + KV.first->getName().str();
}
CS.dump(Names);
}

static void dumpWithNames(ArrayRef<int64_t> C,
DenseMap<Value *, unsigned> &Value2Index) {
ConstraintSystem CS;
static void dumpConstraint(ArrayRef<int64_t> C,
const DenseMap<Value *, unsigned> &Value2Index) {
ConstraintSystem CS(Value2Index);
CS.addVariableRowFill(C);
dumpWithNames(CS, Value2Index);
CS.dump();
}
#endif

Expand Down Expand Up @@ -1005,7 +997,7 @@ void ConstraintInfo::addFact(CmpInst::Predicate Pred, Value *A, Value *B,

LLVM_DEBUG({
dbgs() << " constraint: ";
dumpWithNames(R.Coefficients, getValue2Index(R.IsSigned));
dumpConstraint(R.Coefficients, getValue2Index(R.IsSigned));
dbgs() << "\n";
});

Expand Down Expand Up @@ -1150,8 +1142,8 @@ static bool eliminateConstraints(Function &F, DominatorTree &DT,
break;
LLVM_DEBUG({
dbgs() << "Removing ";
dumpWithNames(Info.getCS(E.IsSigned).getLastConstraint(),
Info.getValue2Index(E.IsSigned));
dumpConstraint(Info.getCS(E.IsSigned).getLastConstraint(),
Info.getValue2Index(E.IsSigned));
dbgs() << "\n";
});

Expand Down

0 comments on commit 869c87a

Please sign in to comment.