[Loop Predication] Teach LP about reverse loops
Currently, we only support predication for forward loops with step
of 1. This patch enables loop predication for reverse or
countdownLoops, which satisfy the following conditions:
- The step of the IV is -1.
- The loop has a singe latch as B(X) = X <pred>
latchLimit with pred as s> or u>
- The IV of the guard is the decrement
IV of the latch condition (Guard is: G(X) = X-1 u< guardLimit).
This patch was downstream for a while and is the last series of patches
that's from our LP implementation downstream.
Reviewers: apilipenko, mkazantsev, sanjoy
Differential Revision: https://reviews.llvm.org/D40353