Sometimes SCEV cannot infer nuw/nsw from something as simple as
len in [0, MAX_INT] ... iv = phi(0, iv.next) guard(iv <s len) guard(iv <u len) iv.next = iv + 1
just because flag strenthening only relies on definition and does not use local facts.
This patch adds support for the simplest case: inference of flags of add(x, constant)
if we can contextually prove that x <= max_int - constant.
In case if it has negative CT impact, there is an option to disable this logic. I woudln't
expect that though.
Maybe add a comment explaining the pattern you are looking for here?
Something like: "We can prove that add(x, constant) doesn't wrap if isKnownPredicateAt can guarantee that x <= max_int - constant at the given context."