[SCEV] Fix trip multiple calculation

If loop bound containing calculations like min(a,b), the Scalar

Evolution API getSmallConstantTripMultiple returns 4294967295 "-1"

as the trip multiple. The problem is that, SCEV use -1 * umax to

represent umin. The multiple constant -1 was returned, and the logic

of guarding against huge trip counts was skipped. Because -1 has 32

active bits.

The fix attempt to factor more general cases. First try to get the

greatest power of two divisor of trip count expression. In case

overflow happens, the trip count expression is still divisible by the

greatest power of two divisor returned. Returns 1 if not divisible by 2.

Patch by Huihui Zhang <huihuiz@codeaurora.org>

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