https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92131

--- Comment #10 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
> IIRC compare_values doesn't look at symbolic SSA names value-range but it
> should do the same as fold would do for -7 < e.7_8 + (+INF - 1) which
> IIRC doesn't fold this because combining the two constants results in an
> overflow.  So that's likely a bug in compare_values to say -1 here:
> 
>      /* Compute the difference between the constants.  If it overflows or
>          underflows, this means that we can trivially compare the NAME with
>          it and, consequently, the two values with each other.  */
>       wide_int diff = wi::to_wide (cst) - wi::to_wide (inv);
>       if (wi::cmp (0, wi::to_wide (inv), sgn)
>           != wi::cmp (diff, wi::to_wide (cst), sgn))
>         {
>           const int res = wi::cmp (wi::to_wide (cst), wi::to_wide (inv),
> sgn);
>           return cst1 ? res : -res;
>         }

IIRC this was directly copied from fold_comparison.

Reply via email to