Hi, On Wed, May 24, 2017 at 10:25:40AM +0200, Richard Biener wrote: > Well, anti-ranges are "evil" for actual working with ranges. They are nice > for optimizing the storage requirements though. > > As I'm replying late I'll add that yes, it does make a difference in memory > use. We've seen this with IPA VRP info eating up 1 GB extra memory > for firefox so we optimized it to use trailing wide-ints.
Actually, the way we got most of that memory under control was to use ggc_cache_remove hasher to store each unique value_range only once and share it among all jump functions that referred to it. See ipa_vr_ggc_hash_traits and ipa_bit_ggc_hash_traits, it was surprisingly easy to set up and helped a lot, just sharing the non-NULL VR collapsed 706245 separate value_range structures into one. Of course, one has to be careful not to change VR for all those sharing it when intending to update it for just one of the parameters it describes, but since you are devising an API, it can be taken care of easily. Hope this helps, Martin