When iterating through loop
for (int i = INT_MAX; i > 0; i--)
We fail to generate the pre-loop for it. It happens because we use the overflown value
in a comparison predicate when identifying whether or not we need it.
In old logic, we used SLE predicate against Greatest value which exceeds all seen values
of the IV and might be overflown. Now we use the GreatestSeen value of this IV with SLT
predicate.
Also added a test that ensures that a pre-loop is generated for such loops.
I don't think the branch weight really needed here? Pls remove if so.
Same for one below.