On Mon, Aug 25, 2025 at 2:48 AM Andrew Pinski
<andrew.pin...@oss.qualcomm.com> wrote:
>
> After the return type of remove_prop_source_from_use was changed to void,
> simplify_permutation only returns 1 or 0 so it can be boolified.
>
> Bootstrapped and tested on x86_64-linux-gnu.

OK.

Richard.

> gcc/ChangeLog:
>
>         * tree-ssa-forwprop.cc (simplify_permutation): Boolify.
>         (pass_forwprop::execute): No longer handle 2 as the return
>         from simplify_permutation.
>
> Signed-off-by: Andrew Pinski <andrew.pin...@oss.qualcomm.com>
> ---
>  gcc/tree-ssa-forwprop.cc | 73 +++++++++++++++++++---------------------
>  1 file changed, 34 insertions(+), 39 deletions(-)
>
> diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc
> index 5aed2967731..7702aeaf0fe 100644
> --- a/gcc/tree-ssa-forwprop.cc
> +++ b/gcc/tree-ssa-forwprop.cc
> @@ -3096,10 +3096,10 @@ is_combined_permutation_identity (tree mask1, tree 
> mask2)
>    return maybe_identity1 ? 1 : maybe_identity2 ? 2 : 0;
>  }
>
> -/* Combine a shuffle with its arguments.  Returns 1 if there were any
> -   changes made, 2 if cfg-cleanup needs to run.  Else it returns 0.  */
> +/* Combine a shuffle with its arguments.  Returns true if there were any
> +   changes made.  */
>
> -static int
> +static bool
>  simplify_permutation (gimple_stmt_iterator *gsi)
>  {
>    gimple *stmt = gsi_stmt (*gsi);
> @@ -3115,7 +3115,7 @@ simplify_permutation (gimple_stmt_iterator *gsi)
>    op2 = gimple_assign_rhs3 (stmt);
>
>    if (TREE_CODE (op2) != VECTOR_CST)
> -    return 0;
> +    return false;
>
>    if (TREE_CODE (op0) == VECTOR_CST)
>      {
> @@ -3126,14 +3126,14 @@ simplify_permutation (gimple_stmt_iterator *gsi)
>      {
>        def_stmt = get_prop_source_stmt (op0, false, &single_use_op0);
>        if (!def_stmt)
> -       return 0;
> +       return false;
>        code = gimple_assign_rhs_code (def_stmt);
>        if (code == VIEW_CONVERT_EXPR)
>         {
>           tree rhs = gimple_assign_rhs1 (def_stmt);
>           tree name = TREE_OPERAND (rhs, 0);
>           if (TREE_CODE (name) != SSA_NAME)
> -           return 0;
> +           return false;
>           if (!has_single_use (name))
>             single_use_op0 = false;
>           /* Here we update the def_stmt through this VIEW_CONVERT_EXPR,
> @@ -3141,16 +3141,16 @@ simplify_permutation (gimple_stmt_iterator *gsi)
>              VIEW_CONVERT_EXPR.  */
>           def_stmt = SSA_NAME_DEF_STMT (name);
>           if (!def_stmt || !is_gimple_assign (def_stmt))
> -           return 0;
> +           return false;
>           if (gimple_assign_rhs_code (def_stmt) != CONSTRUCTOR)
> -           return 0;
> +           return false;
>         }
>        if (!can_propagate_from (def_stmt))
> -       return 0;
> +       return false;
>        arg0 = gimple_assign_rhs1 (def_stmt);
>      }
>    else
> -    return 0;
> +    return false;
>
>    /* Two consecutive shuffles.  */
>    if (code == VEC_PERM_EXPR)
> @@ -3159,13 +3159,13 @@ simplify_permutation (gimple_stmt_iterator *gsi)
>        int ident;
>
>        if (op0 != op1)
> -       return 0;
> +       return false;
>        op3 = gimple_assign_rhs3 (def_stmt);
>        if (TREE_CODE (op3) != VECTOR_CST)
> -       return 0;
> +       return false;
>        ident = is_combined_permutation_identity (op3, op2);
>        if (!ident)
> -       return 0;
> +       return false;
>        orig = (ident == 1) ? gimple_assign_rhs1 (def_stmt)
>                           : gimple_assign_rhs2 (def_stmt);
>        gimple_assign_set_rhs1 (stmt, unshare_expr (orig));
> @@ -3173,7 +3173,7 @@ simplify_permutation (gimple_stmt_iterator *gsi)
>        gimple_set_num_ops (stmt, 2);
>        update_stmt (stmt);
>        remove_prop_source_from_use (op0);
> -      return 1;
> +      return true;
>      }
>    else if (code == CONSTRUCTOR
>            || code == VECTOR_CST
> @@ -3182,7 +3182,7 @@ simplify_permutation (gimple_stmt_iterator *gsi)
>        if (op0 != op1)
>         {
>           if (TREE_CODE (op0) == SSA_NAME && !single_use_op0)
> -           return 0;
> +           return false;
>
>           if (TREE_CODE (op1) == VECTOR_CST)
>             arg1 = op1;
> @@ -3190,36 +3190,36 @@ simplify_permutation (gimple_stmt_iterator *gsi)
>             {
>               gimple *def_stmt2 = get_prop_source_stmt (op1, true, NULL);
>               if (!def_stmt2)
> -               return 0;
> +               return false;
>               code2 = gimple_assign_rhs_code (def_stmt2);
>               if (code2 == VIEW_CONVERT_EXPR)
>                 {
>                   tree rhs = gimple_assign_rhs1 (def_stmt2);
>                   tree name = TREE_OPERAND (rhs, 0);
>                   if (TREE_CODE (name) != SSA_NAME)
> -                   return 0;
> +                   return false;
>                   if (!has_single_use (name))
> -                   return 0;
> +                   return false;
>                   def_stmt2 = SSA_NAME_DEF_STMT (name);
>                   if (!def_stmt2 || !is_gimple_assign (def_stmt2))
> -                   return 0;
> +                   return false;
>                   if (gimple_assign_rhs_code (def_stmt2) != CONSTRUCTOR)
> -                   return 0;
> +                   return false;
>                 }
>               else if (code2 != CONSTRUCTOR && code2 != VECTOR_CST)
> -               return 0;
> +               return false;
>               if (!can_propagate_from (def_stmt2))
> -               return 0;
> +               return false;
>               arg1 = gimple_assign_rhs1 (def_stmt2);
>             }
>           else
> -           return 0;
> +           return false;
>         }
>        else
>         {
>           /* Already used twice in this statement.  */
>           if (TREE_CODE (op0) == SSA_NAME && num_imm_uses (op0) > 2)
> -           return 0;
> +           return false;
>           arg1 = arg0;
>         }
>
> @@ -3244,26 +3244,26 @@ simplify_permutation (gimple_stmt_iterator *gsi)
>               if (tgt_type == NULL_TREE)
>                 tgt_type = arg1_type;
>               else if (tgt_type != arg1_type)
> -               return 0;
> +               return false;
>             }
>
>           if (!VECTOR_TYPE_P (tgt_type))
> -           return 0;
> +           return false;
>           tree op2_type = TREE_TYPE (op2);
>
>           /* Figure out the shrunk factor.  */
>           poly_uint64 tgt_units = TYPE_VECTOR_SUBPARTS (tgt_type);
>           poly_uint64 op2_units = TYPE_VECTOR_SUBPARTS (op2_type);
>           if (maybe_gt (tgt_units, op2_units))
> -           return 0;
> +           return false;
>           unsigned int factor;
>           if (!constant_multiple_p (op2_units, tgt_units, &factor))
> -           return 0;
> +           return false;
>
>           /* Build the new permutation control vector as target vector.  */
>           vec_perm_builder builder;
>           if (!tree_to_vec_perm_builder (&builder, op2))
> -           return 0;
> +           return false;
>           vec_perm_indices indices (builder, 2, op2_units);
>           vec_perm_indices new_indices;
>           if (new_indices.new_shrunk_vector (indices, factor))
> @@ -3279,7 +3279,7 @@ simplify_permutation (gimple_stmt_iterator *gsi)
>               op2 = vec_perm_indices_to_tree (mask_type, new_indices);
>             }
>           else
> -           return 0;
> +           return false;
>
>           /* Convert the VECTOR_CST to the appropriate vector type.  */
>           if (tgt_type != TREE_TYPE (arg0))
> @@ -3298,7 +3298,7 @@ simplify_permutation (gimple_stmt_iterator *gsi)
>        tree opt = fold_ternary (VEC_PERM_EXPR, res_type, arg0, arg1, op2);
>        if (!opt
>           || (TREE_CODE (opt) != CONSTRUCTOR && TREE_CODE (opt) != 
> VECTOR_CST))
> -       return 0;
> +       return false;
>        /* Found VIEW_CONVERT_EXPR before, need one explicit conversion.  */
>        if (res_type != TREE_TYPE (op0))
>         {
> @@ -3313,10 +3313,10 @@ simplify_permutation (gimple_stmt_iterator *gsi)
>         remove_prop_source_from_use (op0);
>        if (op0 != op1 && TREE_CODE (op1) == SSA_NAME)
>         remove_prop_source_from_use (op1);
> -      return 1;
> +      return true;
>      }
>
> -  return 0;
> +  return false;
>  }
>
>  /* Get the BIT_FIELD_REF definition of VAL, if any, looking through
> @@ -5145,12 +5145,7 @@ pass_forwprop::execute (function *fun)
>                              && simplify_rotate (&gsi))
>                       changed = true;
>                     else if (code == VEC_PERM_EXPR)
> -                     {
> -                       int did_something = simplify_permutation (&gsi);
> -                       if (did_something == 2)
> -                         cfg_changed = true;
> -                       changed = did_something != 0;
> -                     }
> +                     changed |= simplify_permutation (&gsi);
>                     else if (code == CONSTRUCTOR
>                              && TREE_CODE (TREE_TYPE (rhs1)) == VECTOR_TYPE)
>                       changed |= simplify_vector_constructor (&gsi);
> --
> 2.43.0
>

Reply via email to