VRP: range info of new variables

Marc Glisse marc.glisse@inria.fr
Tue May 17 12:01:00 GMT 2016


On Mon, 16 May 2016, Jeff Law wrote:

>> - Now that I think of it, maybe I should check that the variable is not
>> a pointer before calling set_range_info? Having range [0, 1] makes it
>> unlikely, but who knows...
> Maybe using an assert would be better.

I don't think having a pointer there would be completely wrong, just 
unlikely, so I'd rather add a check but not assert.

>> Index: gcc/tree-vrp.c
>> ===================================================================
>> --- gcc/tree-vrp.c	(revision 236194)
>> +++ gcc/tree-vrp.c	(working copy)
>> @@ -8933,20 +8933,24 @@ simplify_truth_ops_using_ranges (gimple_
>>      gimple_assign_set_rhs_with_ops (gsi,
>>  				    need_conversion
>>  				    ? NOP_EXPR : TREE_CODE (op0), op0);
>>    /* For A != B we substitute A ^ B.  Either with conversion.  */
>>    else if (need_conversion)
>>      {
>>        tree tem = make_ssa_name (TREE_TYPE (op0));
>>        gassign *newop
>>  	= gimple_build_assign (tem, BIT_XOR_EXPR, op0, op1);
>>        gsi_insert_before (gsi, newop, GSI_SAME_STMT);
>> +      if (TYPE_PRECISION (TREE_TYPE (tem)) > 1)
>> +	set_range_info (tem, VR_RANGE,
>> +			wi::zero (TYPE_PRECISION (TREE_TYPE (tem))),
>> +			wi::one (TYPE_PRECISION (TREE_TYPE (tem))));
> Is there actually a case where TYPE_PRECISION (TREE_TYPE (tem)) > 1 is ever 
> false?  Would an assert make more sense here?

op0 can have precision 1, so tem can as well. In most cases I would expect 
need_conversion to be false in that case though. However, it doesn't seem 
impossible to have several types with 1-bit precision that are not 
equivalent (different TYPE_SIGN for instance). So again, I don't feel 
comfortable adding an assert. But I am open to proofs that those events 
cannot happen.

>>  static bool
>>  simplify_conversion_using_ranges (gimple *stmt)
> Your ChangeLog mentions simplify_switch_using_ranges, not 
> simplify_conversion_using_ranges.

Oups, bad copy-paste (I keep too much context in the diff for diff -p to 
give useful results), thanks.

> This is OK for the trunk -- your call on asserting the variable is not a 
> pointer before calling set_range_info.  Similarly on the check that the 
> TYPE_PRECISION (TREE_TYPE (tem)) > 1.

-- 
Marc Glisse



More information about the Gcc-patches mailing list