From 869c87ad10e87db7c032c3464338ab9d50916510 Mon Sep 17 00:00:00 2001 From: Zain Jaffal Date: Wed, 15 Feb 2023 15:07:14 +0000 Subject: [PATCH] [ConstraintElimination] Change debug output to display variable names. 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 --- llvm/include/llvm/Analysis/ConstraintSystem.h | 14 +++++++----- llvm/lib/Analysis/ConstraintSystem.cpp | 25 +++++++++++++--------- .../Transforms/Scalar/ConstraintElimination.cpp | 22 ++++++------------- 3 files changed, 31 insertions(+), 30 deletions(-) diff --git a/llvm/include/llvm/Analysis/ConstraintSystem.h b/llvm/include/llvm/Analysis/ConstraintSystem.h index e348b38..14eab74 100644 --- a/llvm/include/llvm/Analysis/ConstraintSystem.h +++ b/llvm/include/llvm/Analysis/ConstraintSystem.h @@ -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 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 @@ public: /// 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 index fd96c61..6e9be87 100644 --- a/llvm/lib/Analysis/ConstraintSystem.cpp +++ b/llvm/lib/Analysis/ConstraintSystem.cpp @@ -111,10 +111,23 @@ bool ConstraintSystem::mayHaveSolutionImpl() { 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(ArrayRef Names) const { } } -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 index 4ec3a58..46b0461 100644 --- a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp +++ b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp @@ -644,20 +644,12 @@ struct State { } // 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 @@ 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"; }); @@ -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"; }); -- 2.7.4