[llvm] cebe7ae - [ConstraintElimination] Move logic to add constraint to helper (NFC).
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 20 08:09:11 PDT 2022
Author: Florian Hahn
Date: 2022-06-20T17:08:35+02:00
New Revision: cebe7ae88156dd275db385ffdcaa7d417f0814e2
URL: https://github.com/llvm/llvm-project/commit/cebe7ae88156dd275db385ffdcaa7d417f0814e2
DIFF: https://github.com/llvm/llvm-project/commit/cebe7ae88156dd275db385ffdcaa7d417f0814e2.diff
LOG: [ConstraintElimination] Move logic to add constraint to helper (NFC).
Added:
Modified:
llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
index 653f47a55271..d077cba1542b 100644
--- a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
@@ -140,6 +140,9 @@ class ConstraintInfo {
void popLastNVariables(bool Signed, unsigned N) {
getCS(Signed).popLastNVariables(N);
}
+
+ void addFact(CmpInst *Condition, bool IsNegated, unsigned NumIn,
+ unsigned NumOut, SmallVectorImpl<StackEntry> &DFSInStack);
};
} // namespace
@@ -506,6 +509,55 @@ void State::addInfoFor(BasicBlock &BB) {
WorkList.emplace_back(DT.getNode(Br->getSuccessor(1)), CmpI, true);
}
+void ConstraintInfo::addFact(CmpInst *Condition, bool IsNegated, unsigned NumIn,
+ unsigned NumOut,
+ SmallVectorImpl<StackEntry> &DFSInStack) {
+ // If the constraint has a pre-condition, skip the constraint if it does not
+ // hold.
+ DenseMap<Value *, unsigned> NewIndices;
+ auto R = getConstraint(Condition, *this, NewIndices);
+ if (!R.isValid(*this))
+ return;
+
+ LLVM_DEBUG(dbgs() << "Adding " << *Condition << " " << IsNegated << "\n");
+ bool Added = false;
+ assert(CmpInst::isSigned(Condition->getPredicate()) == R.IsSigned &&
+ "condition and constraint signs must match");
+ auto &CSToUse = getCS(R.IsSigned);
+ if (R.Coefficients.empty())
+ return;
+
+ Added |= CSToUse.addVariableRowFill(R.Coefficients);
+
+ // If R has been added to the system, queue it for removal once it goes
+ // out-of-scope.
+ if (Added) {
+ SmallVector<Value *, 2> ValuesToRelease;
+ for (auto &KV : NewIndices) {
+ getValue2Index(R.IsSigned).insert(KV);
+ ValuesToRelease.push_back(KV.first);
+ }
+
+ LLVM_DEBUG({
+ dbgs() << " constraint: ";
+ dumpWithNames(R, getValue2Index(R.IsSigned));
+ });
+
+ DFSInStack.emplace_back(NumIn, NumOut, Condition, IsNegated, R.IsSigned,
+ ValuesToRelease);
+
+ if (R.IsEq) {
+ // Also add the inverted constraint for equality constraints.
+ for (auto &Coeff : R.Coefficients)
+ Coeff *= -1;
+ CSToUse.addVariableRowFill(R.Coefficients);
+
+ DFSInStack.emplace_back(NumIn, NumOut, Condition, IsNegated, R.IsSigned,
+ SmallVector<Value *, 2>());
+ }
+ }
+}
+
static void
tryToSimplifyOverflowMath(IntrinsicInst *II, ConstraintInfo &Info,
SmallVectorImpl<Instruction *> &ToRemove) {
@@ -690,48 +742,7 @@ static bool eliminateConstraints(Function &F, DominatorTree &DT) {
// Otherwise, add the condition to the system and stack, if we can transform
// it into a constraint.
- DenseMap<Value *, unsigned> NewIndices;
- auto R = getConstraint(CB.Condition, Info, NewIndices);
- if (!R.isValid(Info))
- continue;
-
- LLVM_DEBUG(dbgs() << "Adding " << *CB.Condition << " " << CB.Not << "\n");
- bool Added = false;
- assert(CmpInst::isSigned(CB.Condition->getPredicate()) == R.IsSigned &&
- "condition and constraint signs must match");
- auto &CSToUse = Info.getCS(R.IsSigned);
- if (R.Coefficients.empty())
- continue;
-
- Added |= CSToUse.addVariableRowFill(R.Coefficients);
-
- // If R has been added to the system, queue it for removal once it goes
- // out-of-scope.
- if (Added) {
- SmallVector<Value *, 2> ValuesToRelease;
- for (auto &KV : NewIndices) {
- Info.getValue2Index(R.IsSigned).insert(KV);
- ValuesToRelease.push_back(KV.first);
- }
-
- LLVM_DEBUG({
- dbgs() << " constraint: ";
- dumpWithNames(R, Info.getValue2Index(R.IsSigned));
- });
-
- DFSInStack.emplace_back(CB.NumIn, CB.NumOut, CB.Condition, CB.Not,
- R.IsSigned, ValuesToRelease);
-
- if (R.IsEq) {
- // Also add the inverted constraint for equality constraints.
- for (auto &Coeff : R.Coefficients)
- Coeff *= -1;
- CSToUse.addVariableRowFill(R.Coefficients);
-
- DFSInStack.emplace_back(CB.NumIn, CB.NumOut, CB.Condition, CB.Not,
- R.IsSigned, SmallVector<Value *, 2>());
- }
- }
+ Info.addFact(CB.Condition, CB.Not, CB.NumIn, CB.NumOut, DFSInStack);
}
#ifndef NDEBUG
More information about the llvm-commits
mailing list