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.