1. [LoopPred] Fix two subtle issues found by inspection (details)
Commit 9bfa5ab3d1982a7cef60ee00b935f4ddc89fc98e by listmail
[LoopPred] Fix two subtle issues found by inspection
This patch fixes two issues noticed by inspection when going to enable
the loop predication code in IndVarSimplify.
Issue 1 - Both the LoopPredication transform, and the already on by
default optimizeLoopExits transform, modify the exit count of the exits
they modify. (either to 0 or Infinity) Looking at the code more closely,
this was not reflected into SCEV and we were instead running later
transforms with incorrect SCEVs. Fixing this requires forgetting the
loop, weakening a too strong assert, and updating SCEV to not pessimize
results when a loop is provable untaken. I haven't been able to find a
test case to demonstrate the miscompile.
Issue 2 - For modules without a data layout, we can end up with unsized
pointer typed exit counts. Just bail out of this case.
I think these are the last two issues which need addressed before we
enable this by default. The code has already survived a decent amount of
fuzzing without revealing either of the above.
Differential Revision:
The file was modifiedllvm/lib/Analysis/ScalarEvolution.cpp
The file was modifiedllvm/lib/Transforms/Scalar/IndVarSimplify.cpp