`BoundedValue`: support for multiple ranges
This commit introduces radically changes the implementation of `BoundedValue`: it no longer represents a single, contiguous range, but an arbitrary number of ranges. The bounds are now represented through a `llvm::SmallVector<std::pair<uint64_t, uint64_t>, 3>`. * Introduce the `BoundedValue::bounds()` method, which allows to iterate over all the ranges that a `BoundedValue` represents. The `bounds` method returns a `Bounds` object, which can be used as a range composed by `BoundsIterator`. * All the methods dealing with the `BoundedValue`'s bounds have been rewritten. * New debugging information: "bv-merge". Print all the computations performed by `BoundedValue::mergeImpl`. * Drop dead code: `BoundedValue::setBound` and `isPositive` * Introduce `BoundedValue::isRightOpen` and drop `BoundedValue::isSingleRange`
Loading
Please register or sign in to comment