diff options
-rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 76da5bd057f..17fb979f50f 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -7377,15 +7377,18 @@ SolveQuadraticEquation(const SCEVAddRecExpr *AddRec, ScalarEvolution &SE) { const APInt &N = NC->getAPInt(); APInt Two(BitWidth, 2); - const APInt& C = L; // Convert from chrec coefficients to polynomial coefficients AX^2+BX+C - // The B coefficient is M-N/2 - APInt B(M); - B -= N.sdiv(Two); // The A coefficient is N/2 APInt A(N.sdiv(Two)); + // The B coefficient is M-N/2 + APInt B(M); + B -= A; // A is the same as N/2. + + // The C coefficient is L. + const APInt& C = L; + // Compute the B^2-4ac term. APInt SqrtTerm(B); SqrtTerm *= B; @@ -7402,9 +7405,10 @@ SolveQuadraticEquation(const SCEVAddRecExpr *AddRec, ScalarEvolution &SE) { // Compute the two solutions for the quadratic formula. // The divisions must be performed as signed divisions. - APInt NegB(-B); - APInt TwoA(A << 1); - if (TwoA.isMinValue()) + APInt NegB(-std::move(B)); + APInt TwoA(std::move(A)); + TwoA <<= 1; + if (TwoA.isNullValue()) return None; LLVMContext &Context = SE.getContext(); |