]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
expand: ICE if asked to expand RDIV with non-float type.
authorRobin Dapp <rdapp@ventanamicro.com>
Wed, 9 Jul 2025 13:58:05 +0000 (15:58 +0200)
committerRobin Dapp <rdapp@ventanamicro.com>
Thu, 10 Jul 2025 13:56:20 +0000 (15:56 +0200)
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.

gcc/cfgexpand.cc
gcc/optabs-tree.cc
gcc/tree-vect-loop.cc

index 33649d43f71cbd9d3e6a763fb086c9d15c5009ed..a656ccebf176db2942663461bdabdddbd8516dff 100644 (file)
@@ -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)
index 6dfe8ee4c4e48c8739ce10f2a7ecec8550aa3768..9308a6dfd65c38c6b31cff426a2adcef4c4763a4 100644 (file)
@@ -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))
index 8ea0f45d79fc0f73925a7d737c48e024514a34d4..56f80db57bbc3d5975c56fa0774e7ef908ff77e0 100644 (file)
@@ -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);