LICM could reassociate mixed variant/invariant comparison/arithmetic operations
and hoist invariant parts out of loop if it can prove that they can be computed
without overflow. Motivating example here:
INV1 - VAR1 < INV2
can be turned into
VAR > INV1 - INV2
if we can prove no-signed-overflow here. Then INV1 - INV2 can be computed
out of loop, so we save one arithmetic operation in-loop.
I tried to make it as general as possible in this patch. For some reason it only
works when no-overflow facts are known from non-contextual facts, but this
is maybe a limitation of SCEV. It can be a subject of further improvement in
SCEV.
Not sure it is more readable (may be only for me) but consider