On Thu, Jul 10, 2025 at 12:38 PM Robin Dapp <rdapp....@gmail.com> wrote:
>
> Hi,
>
> this patch adds asserts that ensure we only expand an RDIV_EXPR with
> actual float mode.  It also replaces the RDIV_EXPR in setting a
> vectorized loop's length by EXACT_DIV_EXPR.  The code in question is
> only used with length-control targets (riscv, powerpc, s390).
>
> Bootstrapped and regtested on x86, aarch64, and power10.  Regtested on
> rv64gcv_zvl512b.

OK.

I'm not sure what we use for division for fixed-point modes (all mode
kinds in the end use the sdiv optab).

> Regards
>  Robin
>
>         PR target/121014
>
> gcc/ChangeLog:
>
>         * cfgexpand.cc (expand_debug_expr): Assert FLOAT_MODE_P.
>         * optabs-tree.cc (optab_for_tree_code): Assert FLOAT_TYPE_P.
>         * tree-vect-loop.cc (vect_get_loop_len): Use EXACT_DIV_EXPR.
> ---
>  gcc/cfgexpand.cc      | 2 ++
>  gcc/optabs-tree.cc    | 2 ++
>  gcc/tree-vect-loop.cc | 2 +-
>  3 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/cfgexpand.cc b/gcc/cfgexpand.cc
> index 33649d43f71..a656ccebf17 100644
> --- a/gcc/cfgexpand.cc
> +++ b/gcc/cfgexpand.cc
> @@ -5358,6 +5358,8 @@ expand_debug_expr (tree exp)
>        return simplify_gen_binary (MULT, mode, op0, op1);
>
>      case RDIV_EXPR:
> +      gcc_assert (FLOAT_MODE_P (mode));
> +      /* Fall through.  */
>      case TRUNC_DIV_EXPR:
>      case EXACT_DIV_EXPR:
>        if (unsignedp)
> diff --git a/gcc/optabs-tree.cc b/gcc/optabs-tree.cc
> index 6dfe8ee4c4e..9308a6dfd65 100644
> --- a/gcc/optabs-tree.cc
> +++ b/gcc/optabs-tree.cc
> @@ -82,6 +82,8 @@ optab_for_tree_code (enum tree_code code, const_tree type,
>         return unknown_optab;
>        /* FALLTHRU */
>      case RDIV_EXPR:
> +      gcc_assert (FLOAT_TYPE_P (type));
> +      /* FALLTHRU */
>      case TRUNC_DIV_EXPR:
>      case EXACT_DIV_EXPR:
>        if (TYPE_SATURATING (type))
> diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
> index d5044d5fe22..432a248715e 100644
> --- a/gcc/tree-vect-loop.cc
> +++ b/gcc/tree-vect-loop.cc
> @@ -11429,7 +11429,7 @@ vect_get_loop_len (loop_vec_info loop_vinfo, 
> gimple_stmt_iterator *gsi,
>           factor = exact_div (nunits1, nunits2).to_constant ();
>           tree iv_type = LOOP_VINFO_RGROUP_IV_TYPE (loop_vinfo);
>           gimple_seq seq = NULL;
> -         loop_len = gimple_build (&seq, RDIV_EXPR, iv_type, loop_len,
> +         loop_len = gimple_build (&seq, EXACT_DIV_EXPR, iv_type, loop_len,
>                                    build_int_cst (iv_type, factor));
>           if (seq)
>             gsi_insert_seq_before (gsi, seq, GSI_SAME_STMT);
> --
> 2.50.0
>

Reply via email to