On Sat, 28 May 2016, Alexander Monakov wrote:
For unsigned A, B, 'A > -1 / B' is a nice predicate for checking whether 'A*B' overflows (or 'B && A > -1 / B' if B may be zero). Let's optimize it to an invocation of __builtin_mul_overflow to avoid the divide operation.
Hmm, that division by zero thing is a good point. I may be confusing with dereferencing a null pointer, but I believe that some languages catch the corresponding signal, so by removing that division you would be changing the behavior. I wish we had a -fno-divisions-by-zero or equivalent, but otherwise this may require an extra check like tree_expr_nonzero_p, although we are quite inconsistent about this (we don't simplify x/x to 1, but we do simplify 0%x to 0 if x is not (yet) known to be the constant 0). We'll see what the reviewers think...
Any plan on optimizing the 'B && ovf' form? -- Marc Glisse