[LoopPredication] Handle the case when the guard and the latch IV have different...
authorArtur Pilipenko <apilipenko@azulsystems.com>
Fri, 27 Oct 2017 14:46:17 +0000 (14:46 +0000)
committerArtur Pilipenko <apilipenko@azulsystems.com>
Fri, 27 Oct 2017 14:46:17 +0000 (14:46 +0000)
commit8aadc643cf8d049c7d895023ed1bc210dd7dca75
treea2da2c489bf60a041a5f84e65c9ddc3ab72b243b
parent8ba28c720091c9f99d0bd14c5fdf5981b65f28b8
[LoopPredication] Handle the case when the guard and the latch IV have different offsets

This is a follow up change for D37569.

Currently the transformation is limited to the case when:
 * The loop has a single latch with the condition of the form: ++i <pred> latchLimit, where <pred> is u<, u<=, s<, or s<=.
 * The step of the IV used in the latch condition is 1.
 * The IV of the latch condition is the same as the post increment IV of the guard condition.
 * The guard condition is of the form i u< guardLimit.

This patch enables the transform in the case when the latch is

 latchStart + i <pred> latchLimit, where <pred> is u<, u<=, s<, or s<=.

And the guard is

 guardStart + i u< guardLimit

Reviewed By: anna

Differential Revision: https://reviews.llvm.org/D39097

llvm-svn: 316768
llvm/lib/Transforms/Scalar/LoopPredication.cpp
llvm/test/Transforms/LoopPredication/basic.ll