[PATCH] D48283: [SCEV] Properly solve quadratic equations
    Eli Friedman via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Fri Jun 29 17:34:53 PDT 2018
    
    
  
efriedma added a comment.
Needs more test coverage of the overflow cases.
================
Comment at: lib/Analysis/ScalarEvolution.cpp:8269
+  uint32_t NewWidth = std::max(32u, 2*BitWidth);
+  if (BitWidth == 1) {
+    N = N.zext(NewWidth);
----------------
I don't like hardcoded numbers without an explanation... why is 32 special?  Why is 1 special?
================
Comment at: lib/Analysis/ScalarEvolution.cpp:8304
+
+  APInt D = B*B - 4*A*C;
+
----------------
I think you can overflow here, and a few other places where you multiply numbers.  Not sure exactly how many more bits you need.
================
Comment at: lib/Analysis/ScalarEvolution.cpp:10538
+        if (Range.contains(RootVal->getValue())) {
           // The next iteration must be out of the range...
           ConstantInt *NextVal =
----------------
Would it make sense to just return getCouldNotCompute() here?  Given the SolveQuadraticEquation() API, if RootVal is in the range, something overflowed, I think.
Repository:
  rL LLVM
https://reviews.llvm.org/D48283
    
    
More information about the llvm-commits
mailing list