On 05/23/2017 05:28 AM, Nathan Sidwell wrote: > On 05/23/2017 06:48 AM, Aldy Hernandez wrote: > >> The class can live outside of his work, as can be demonstrated by the >> attached patch. With it, I was able to rewrite the post-VRP range >> information to use this class and get rid of VR_ANTI_RANGE throughout >> the compiler. A VR_ANTI_RANGE of ~[5,10] becomes [-MIN,4][11,+MAX]. > > Seems useful. That's the idea :-)
The general consensus is that ANTI ranges are just painful to support and they can be represented as two distinct sub-intervals -- and we know how to operate on those subintervals reasonably well. I haven't looked at the this version of the patch, but earlier versions did show how dropping anti range support and instead using the new representation cleaned things up considerably. In reality I suspect the only really important anti range is ~[0,0] anyway. Everything else is likely small potatoes. > >> + /* Remove negative numbers from the range. */ >> + irange positives; >> + range_positives (&positives, exptype, allow_zero ? 0 : 1); > > 'allow_zero ? 0 : 1' looks mighty strange. I know that's a nit, but you > placed it front and centre! > >> + if (positives.Intersect (*ir)) > > I notice you have a number of Uppercase member fns ... Aldy, this ought to get fixed :-) jeff