diff --git a/llvm/include/llvm/Analysis/ConstraintSystem.h b/llvm/include/llvm/Analysis/ConstraintSystem.h --- a/llvm/include/llvm/Analysis/ConstraintSystem.h +++ b/llvm/include/llvm/Analysis/ConstraintSystem.h @@ -36,13 +36,17 @@ // 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 getVarNamesList() const; + public: + ConstraintSystem() {} + ConstraintSystem(const DenseMap &Value2Index) + : Value2Index(Value2Index) {} + bool addVariableRow(ArrayRef R) { assert(Constraints.empty() || R.size() == Constraints.back().size()); // If all variable coefficients are 0, the constraint does not provide any @@ -103,8 +107,8 @@ /// 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 Names) const; + /// Print the constraints in the system. + void dump() const; }; } // namespace llvm diff --git a/llvm/lib/Analysis/ConstraintSystem.cpp b/llvm/lib/Analysis/ConstraintSystem.cpp --- a/llvm/lib/Analysis/ConstraintSystem.cpp +++ b/llvm/lib/Analysis/ConstraintSystem.cpp @@ -111,10 +111,23 @@ return all_of(Constraints, [](auto &R) { return R[0] >= 0; }); } -void ConstraintSystem::dump(ArrayRef Names) const { +SmallVector ConstraintSystem::getVarNamesList() const { + SmallVector 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 Names = getVarNamesList(); for (const auto &Row : Constraints) { SmallVector Parts; for (unsigned I = 1, S = Row.size(); I < S; ++I) { @@ -131,14 +144,6 @@ } } -void ConstraintSystem::dump() const { - SmallVector 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(); diff --git a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp --- a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp +++ b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp @@ -644,20 +644,12 @@ } // namespace #ifndef NDEBUG -static void dumpWithNames(const ConstraintSystem &CS, - DenseMap &Value2Index) { - SmallVector Names(Value2Index.size(), ""); - for (auto &KV : Value2Index) { - Names[KV.second - 1] = std::string("%") + KV.first->getName().str(); - } - CS.dump(Names); -} -static void dumpWithNames(ArrayRef C, - DenseMap &Value2Index) { - ConstraintSystem CS; +static void dumpConstraint(ArrayRef C, + const DenseMap &Value2Index) { + ConstraintSystem CS(Value2Index); CS.addVariableRowFill(C); - dumpWithNames(CS, Value2Index); + CS.dump(); } #endif @@ -1005,7 +997,7 @@ LLVM_DEBUG({ dbgs() << " constraint: "; - dumpWithNames(R.Coefficients, getValue2Index(R.IsSigned)); + dumpConstraint(R.Coefficients, getValue2Index(R.IsSigned)); dbgs() << "\n"; }); @@ -1150,8 +1142,8 @@ 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"; });