...well, most of them anyhow... I got tired of submitting these piecemeal, and it's probably easier to review them in one go. There should be no difference in functionality, barring an extra call to set_and_canonicalize_value_range (instead of set_value_range) due to the way I've organized multiplication and lshifts for maximal sharing. This also gets rid of some repetitive stuff. I've also added a value_range::dump like wide_int::dump. It makes debugging a lot easier. My next patch will move all the wide_int_range_* stuff into wide-int-range.[hc]. I'm really liking how this is turning out, BTW: a *lot* cleaner, less code duplication, and shareable to boot :). OK pending one more round of tests? Aldy