https://gcc.gnu.org/g:5aa21765236730c1772c19454cbb71365b84d583

commit r16-2175-g5aa21765236730c1772c19454cbb71365b84d583
Author: Robin Dapp <rd...@ventanamicro.com>
Date:   Wed Jul 9 15:58:05 2025 +0200

    expand: ICE if asked to expand RDIV with non-float type.
    
    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).
    
            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.

Diff:
---
 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 33649d43f71c..a656ccebf176 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 6dfe8ee4c4e4..9308a6dfd65c 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 8ea0f45d79fc..56f80db57bbc 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -11079,7 +11079,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);

Reply via email to