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.
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)
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))
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);