[PUSHED 2/8] Adjust expr_not_equal_to to use irange API.

Aldy Hernandez aldyh@redhat.com
Tue Aug 4 09:16:30 GMT 2020



On 8/4/20 8:52 AM, Richard Biener wrote:
> On Tue, Aug 4, 2020 at 8:37 AM Aldy Hernandez via Gcc-patches
> <gcc-patches@gcc.gnu.org> wrote:
>>
>> gcc/ChangeLog:
>>
>>          * fold-const.c (expr_not_equal_to): Adjust for irange API.
>> ---
>>   gcc/fold-const.c | 17 ++++-------------
>>   1 file changed, 4 insertions(+), 13 deletions(-)
>>
>> diff --git a/gcc/fold-const.c b/gcc/fold-const.c
>> index 1324a194995..5d27927f6bf 100644
>> --- a/gcc/fold-const.c
>> +++ b/gcc/fold-const.c
>> @@ -10194,8 +10194,7 @@ tree_expr_nonzero_p (tree t)
>>   bool
>>   expr_not_equal_to (tree t, const wide_int &w)
>>   {
>> -  wide_int min, max, nz;
>> -  value_range_kind rtype;
>> +  value_range vr;
>>     switch (TREE_CODE (t))
>>       {
>>       case INTEGER_CST:
>> @@ -10204,17 +10203,9 @@ expr_not_equal_to (tree t, const wide_int &w)
>>       case SSA_NAME:
>>         if (!INTEGRAL_TYPE_P (TREE_TYPE (t)))
>>          return false;
>> -      rtype = get_range_info (t, &min, &max);
>> -      if (rtype == VR_RANGE)
>> -       {
>> -         if (wi::lt_p (max, w, TYPE_SIGN (TREE_TYPE (t))))
>> -           return true;
>> -         if (wi::lt_p (w, min, TYPE_SIGN (TREE_TYPE (t))))
>> -           return true;
>> -       }
>> -      else if (rtype == VR_ANTI_RANGE
>> -              && wi::le_p (min, w, TYPE_SIGN (TREE_TYPE (t)))
>> -              && wi::le_p (w, max, TYPE_SIGN (TREE_TYPE (t))))
>> +      get_range_info (t, vr);
> 
> Ick.  Do we now use references for out parameters?  I find this
> highly non-obvious semantics.  What's wrong with
> 
>       vr = get_range_info (t);
> 
> if you dislike get_range_info (t, &vr)?

Using references was decided last year.

We want the ability of to use the same range granularity as what the 
user requested, so we can't just return a range, as we don't know how 
many sub-ranges the user wants:

int_range<10> big_range;
twiddle_range(big_range);

We want the above to work with big_range, or a small range, or a 
value_range.  Twiddle_range should be range agnostic.

get_range_info(const_tree, value_range &) has been available since last 
year.  I suppose if one were so inclined, one could change it to take a 
pointer to be consistent with the other get_range_info() overload.

Aldy



More information about the Gcc-patches mailing list