for AddExpr (1 + %a)<nsw>, if %a (LoopInvariant, such as function parameter) range is fullset, 1 range is [1, 2), for now, constant range add operation will return fullset is any of its operand is fullset.
For above AddExpr, (1 + %a)<nsw> has No-Signed-Wrap flag, so SINT_MIN is not in (1 + %a)<nsw> range. But now we get a conservative range, fullset.
I'd very strongly prefer if you structured this as so:
NoWrapKind = compute(Add);
for each operand:
This requires that NoWrapKind above be any of: none, signed, unsigned, and both.