On Tue, Aug 4, 2020 at 8:37 AM Aldy Hernandez via Gcc-patches
<[email protected]> 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)?
Please reconsider.
Richard.
> + if (!vr.undefined_p ()
> + && !vr.contains_p (wide_int_to_tree (TREE_TYPE (t), w)))
> return true;
> /* If T has some known zero bits and W has any of those bits set,
> then T is known not to be equal to W. */
> --
> 2.26.2
>