i * i is nonnegative

Marc Glisse marc.glisse@inria.fr
Tue Mar 19 16:41:00 GMT 2013

On Tue, 19 Mar 2013, Jeff Law wrote:

> On 03/19/2013 10:08 AM, Marc Glisse wrote:
>> Hello,
>> this patch extends the property that x*x is non-negative, which was
>> already known for floats, to integers with undefined overflow.
>> 2013-03-19  Marc Glisse  <marc.glisse@inria.fr>
>>      PR tree-optimization/56355
>> gcc/
>>      * fold-const.c (tree_binary_nonnegative_warnv_p) <MULT_EXPR>:
>>      Also handle integers with undefined overflow.
>> gcc/testsuite/
>>      * gcc.dg/pr56355-1.c: New file.
> Fine for the trunk.  Though I would suggest waiting for http service & web 
> archives to return before committing.


> BTW, did you check if VRP creates a non-negative range for this case as well?

It doesn't :-(

It would probably need to be done in extract_range_from_binary_expr since 
extract_range_from_binary_expr_1 does not see the expression, maybe after 
calling extract_range_from_binary_expr_1, and we would remove the negative 
part of the interval it returned.

Marc Glisse

More information about the Gcc-patches mailing list