On Monday, 28 July 2014 at 08:42:16 UTC, bearophile wrote:

The same kind of optimization is desired for a SInt or other library-defined types. So the point of this discussion is how to do this. The problem is that the compiler has some static information about ranges, but to optimize away user-defined types such information needs to be read and given to "static ifs" to replace the calls to muls() to calls to regular operations.

Not sure if this is the right way to do carry/overflow optimization, but I can see the value of having range information when doing CTFE for building minimal lookup tables/perfect hashing etc.

IMO muls should yield 2N bits of output for N bits input, then the compiler should do strength reduction.

Adds should be done on N+1 bits types, using 33 bit output for 32 bits input, then strength reduce it to >=32 bit output if both operands are 31 bits or less?

Reply via email to