SuccessChanges

Summary

  1. [SCEV] Expose and use maximum constant exit counts for individual loop (details)
Commit 34f68253ca3dbe4ab5ef138629bdd63e06901efc by listmail
[SCEV] Expose and use maximum constant exit counts for individual loop
exits
We were already going to all of the trouble of computing maximum
constant exit counts for each loop exit, we might as well expose them
through the API.  The change in IndVars is mostly to demonstrate that
the wired up code works, but it als very slightly strengthens the
transform.  The strengthened case is rather narrow though: it requires
one exactly analyzeable exit, one imprecisely analyzeable exit (with the
upper bound less than the precise one), and one unanalyzeable exit.  I
coudn't construct a reasonably stable test case.
This does increase the memory usage of the BackedgeTakenCount by a
factor of 2 in the worst case.
I also noticed the loop in IndVars is O(#Exits ^ 2).  This doesn't
change with this patch.  A future patch will cache this result inside of
SCEV to avoid requering.
The file was modifiedllvm/lib/Transforms/Scalar/IndVarSimplify.cpp
The file was modifiedllvm/include/llvm/Analysis/ScalarEvolution.h
The file was modifiedllvm/lib/Analysis/ScalarEvolution.cpp