Array bound checks removal increasing importance

Daniel Murphy via Digitalmars-d digitalmars-d at puremagic.com
Sat May 31 19:05:07 PDT 2014


"Meta"  wrote in message news:pogogtdjyetukennyras at forum.dlang.org...

> I've always wondered if VRP can be leveraged in certain situations. I 
> can't remember exactly how it's supposed to work, but very basically, 
> isn't it just numeric variables (and expressions?) having an associated 
> range that they carry around with them at compile time, so something like 
> this is possible:
>
> long n1 = long.max;
> int n2 = n1 % 3; //No cast needed due to VRP
>
> Couldn't this be used for other things as well, such as detecting numeric 
> overflow at compile time, or like Nordlow suggested, figuring out when 
> it's safe to elide an array bounds check?

It can, and it already is.  The problem is that n1 above is not guaranteed 
to _stay_ equal to long.max.  Without data flow analysis the compiler 
doesn't know that it is never re-assigned, so the possible range is any 
value that fits in a long.

There are cases where it should be able to tell without data flow analysis 
but are currently not implemented. 



More information about the Digitalmars-d mailing list