Go to the documentation of this file.
16 if (Range.
size() == 0)
21 while (It2 !=
Ranges.end() && It2->start() < Range.
end())
25 It =
Ranges.erase(It, It2);
27 if (It !=
Ranges.begin() && Range.
start() < It[-1].end())
36 [=](
const AddressRange &R) { return R.start() <= Addr; });
37 return It !=
Ranges.begin() &&
Addr < It[-1].end();
41 if (Range.
size() == 0)
45 [=](
const AddressRange &R) { return R.start() <= Range.start(); });
48 return Range.
end() <= It[-1].end();
55 [=](
const AddressRange &R) { return R.start() <= Addr; });
56 if (It !=
Ranges.begin() &&
Addr < It[-1].end())
This is an optimization pass for GlobalISel generic memory operations.
auto upper_bound(R &&Range, T &&Value)
Provide wrappers to std::upper_bound which take ranges instead of having to pass begin/end explicitly...
Expected< ExpressionValue > max(const ExpressionValue &Lhs, const ExpressionValue &Rhs)
Optional< AddressRange > getRangeThatContains(uint64_t Addr) const
bool contains(uint64_t Addr) const
A class that represents an address range.
void insert(AddressRange Range)
auto partition_point(R &&Range, Predicate P)
Binary search for the first iterator in a range where a predicate is false.
Collection::const_iterator end() const