On Thu, 19 Jan 2023, Jakub Jelinek wrote:

> Hi!
> 
> tree-ssa-loop-niter.cc (build_cltz_expr) gets unused variable mode
> warning on some architectures where C[LT]Z_DEFINED_VALUE_AT_ZERO
> macro(s) don't use the first argument (which includes the
> defaults.h definitions of:
> #define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE)  0
> #define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE)  0
> Other uses of this macro avoid this problem by avoiding temporaries
> which are only used as argument to those macros, the following patch
> does it the same way for consistency.  Plus some formatting fixes
> while at it.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK.

> 2023-01-19  Jakub Jelinek  <ja...@redhat.com>
> 
>       PR tree-optimization/108457
>       * tree-ssa-loop-niter.cc (build_cltz_expr): Use
>       SCALAR_INT_TYPE_MODE (utype) directly as C[LT]Z_DEFINED_VALUE_AT_ZERO
>       argument instead of a temporary.  Formatting fixes.
> 
> --- gcc/tree-ssa-loop-niter.cc.jj     2023-01-16 11:52:05.806885510 +0100
> +++ gcc/tree-ssa-loop-niter.cc        2023-01-19 13:10:42.872595970 +0100
> @@ -2252,16 +2252,16 @@ build_cltz_expr (tree src, bool leading,
>        call = build_call_expr_internal_loc (UNKNOWN_LOCATION, ifn,
>                                          integer_type_node, 1, src);
>        int val;
> -      scalar_int_mode mode = SCALAR_INT_TYPE_MODE (utype);
>        int optab_defined_at_zero
> -     = leading ? CLZ_DEFINED_VALUE_AT_ZERO (mode, val)
> -               : CTZ_DEFINED_VALUE_AT_ZERO (mode, val);
> +     = (leading
> +        ? CLZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (utype), val)
> +        : CTZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (utype), val));
>        if (define_at_zero && !(optab_defined_at_zero == 2 && val == prec))
>       {
>         tree is_zero = fold_build2 (NE_EXPR, boolean_type_node, src,
>                                     build_zero_cst (TREE_TYPE (src)));
> -       call = fold_build3(COND_EXPR, integer_type_node, is_zero, call,
> -                          build_int_cst (integer_type_node, prec));
> +       call = fold_build3 (COND_EXPR, integer_type_node, is_zero, call,
> +                           build_int_cst (integer_type_node, prec));
>       }
>      }
>    else if (prec == 2 * lli_prec)
> @@ -2275,22 +2275,22 @@ build_cltz_expr (tree src, bool leading,
>        /* We count the zeroes in src1, and add the number in src2 when src1
>        is 0.  */
>        if (!leading)
> -     std::swap(src1, src2);
> +     std::swap (src1, src2);
>        tree call1 = build_call_expr (fn, 1, src1);
>        tree call2 = build_call_expr (fn, 1, src2);
>        if (define_at_zero)
>       {
>         tree is_zero2 = fold_build2 (NE_EXPR, boolean_type_node, src2,
>                                      build_zero_cst (TREE_TYPE (src2)));
> -       call2 = fold_build3(COND_EXPR, integer_type_node, is_zero2, call2,
> -                           build_int_cst (integer_type_node, lli_prec));
> +       call2 = fold_build3 (COND_EXPR, integer_type_node, is_zero2, call2,
> +                            build_int_cst (integer_type_node, lli_prec));
>       }
>        tree is_zero1 = fold_build2 (NE_EXPR, boolean_type_node, src1,
>                                  build_zero_cst (TREE_TYPE (src1)));
> -      call = fold_build3(COND_EXPR, integer_type_node, is_zero1, call1,
> -                      fold_build2 (PLUS_EXPR, integer_type_node, call2,
> -                                   build_int_cst (integer_type_node,
> -                                                  lli_prec)));
> +      call = fold_build3 (COND_EXPR, integer_type_node, is_zero1, call1,
> +                       fold_build2 (PLUS_EXPR, integer_type_node, call2,
> +                                    build_int_cst (integer_type_node,
> +                                                   lli_prec)));
>      }
>    else
>      {
> @@ -2302,14 +2302,13 @@ build_cltz_expr (tree src, bool leading,
>       {
>         tree is_zero = fold_build2 (NE_EXPR, boolean_type_node, src,
>                                     build_zero_cst (TREE_TYPE (src)));
> -       call = fold_build3(COND_EXPR, integer_type_node, is_zero, call,
> -                          build_int_cst (integer_type_node, prec));
> +       call = fold_build3 (COND_EXPR, integer_type_node, is_zero, call,
> +                           build_int_cst (integer_type_node, prec));
>       }
>  
>        if (leading && prec < i_prec)
> -     call = fold_build2(MINUS_EXPR, integer_type_node, call,
> -                        build_int_cst (integer_type_node,
> -                                       i_prec - prec));
> +     call = fold_build2 (MINUS_EXPR, integer_type_node, call,
> +                         build_int_cst (integer_type_node, i_prec - prec));
>      }
>  
>    return call;
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg,
Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman;
HRB 36809 (AG Nuernberg)

Reply via email to