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
This is the last change in this chain.
I'm not sure if this is clearer :)
My concern was that this loop makes it look like we support only the case where B and G use the same value of I.
It becomes clearer when we define what B and G predicates are.