Clamp function was too optimistic when choosing signed or unsigned min/max function for calculations.
In fact, !IsSignedPredicate guarantees us that Smallest and Greatest can be compared safely using unsigned
predicates, but we did not check this for S which can in theory be negative.
This patch makes Clamp use signed min/max for cases when it fails to prove S being non-negative,
and it adds a test where such situation may lead to incorrect conditions calculation.