To be used in ConstantRange::mulWithNoOverflow(),
may in future be useful for when saturating shift/mul ops are added.
These are precise as far as i can tell.
I initially though i will need APInt::[us]mul_sat() for these,
but it turned out much simpler to do what ConstantRange::multiply()
does - perform multiplication in twice the bitwidth, and then truncate.
Though here we want saturating signed truncation.