1. [IndVars] Eliminate loop exits with equivalent exit counts (details)
  2. [IndVars] Add a todo to reflect a further oppurtunity identified in (details)
Commit 8cbcd2f484a2bc6720d9fd66b71aeaf50a49bc70 by listmail
[IndVars] Eliminate loop exits with equivalent exit counts
We can end up with two loop exits whose exit counts are equivalent, but
whose textual representation is different and non-obvious. For the
sub-case where we have a series of exits which dominate one another
(common), eliminate any exits which would iterate *after* a previous
exit on the exiting iteration.
As noted in the TODO being removed, I'd always thought this was a good
idea, but I've now seen this in a real workload as well.
Interestingly, in review, Nikita pointed out there's let another
oppurtunity to leverage SCEV's reasoning.  If we kept track of the min
of dominanting exits so far, we could discharge exits with EC >= MDE.
This is less powerful than the existing transform (since later exits
aren't considered), but potentially more powerful for any case where
SCEV can prove a >= b, but neither a == b or a > b.  I don't have an
example to illustrate that oppurtunity, but won't be suprised if we find
one and return to handle that case as well. 
Differential Revision:
llvm-svn: 375379
The file was modifiedllvm/test/Transforms/IndVarSimplify/loop-predication.ll
The file was modifiedllvm/test/Transforms/IndVarSimplify/eliminate-exit.ll
The file was modifiedllvm/test/Transforms/IndVarSimplify/pr38674.ll
The file was modifiedllvm/lib/Transforms/Scalar/IndVarSimplify.cpp
Commit e884843d7839043308640952ad84659619eaca44 by listmail
[IndVars] Add a todo to reflect a further oppurtunity identified in
Nikita pointed out an oppurtunity, might as well document it in the
llvm-svn: 375380
The file was modifiedllvm/lib/Transforms/Scalar/IndVarSimplify.cpp