The constant range computed at use point does not mean the input
constant range or in other words, the constant range computed at define point,
is the same range as computed at use point. For intructions that is
always speculative, it is safe. However, for instruction UDiv or SDiv,
and we want to narrow the data type of these, zero may be introduced
after truncating the divisor and causing an UB.
So this patch checks that if the constant range at define point does not
contain zero, then it also must not contain zero after truncating.
narrowSDivOrSRem i think