This patch allows SCEV predicate analysis to prove implication of some expression predicates
from context predicates related to arguments of those expressions.
It introduces three new rules:
For addition:
- (A >X && B >= 0) || (B >= 0 && A > X) ===> (A + B) > X.
For division:
- (A > X) && (0 < B <= X + 1) ===> (A / B > 0).
- (A > X) && (-B <= X < 0) ===> (A / B >= 0).
Using these rules, SCEV is able to prove facts like "if X > 1 then X / 2 > 0".
They can also be combined with the same context, to prove more complex expressions like
"if X > 1 then X/2 + 1 > 1".
I'd write this as "We want to avoid hurting compile time ..."