https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122680
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
/* If op0 can be represented with low precision integer,
truncate it to cvt_type and the do FLOAT_EXPR. */
else if (code == FLOAT_EXPR)
{
wide_int op_min_value, op_max_value;
tree def;
/* ??? Merge ranges in case of more than one lane. */
if (SLP_TREE_LANES (slp_op0) != 1
|| !(def = vect_get_slp_scalar_def (slp_op0, 0))
|| !vect_get_range_info (def, &op_min_value, &op_max_value))
goto unsupported;
differs analysis vs. transform.
t.c:4:40: note: vect_is_simple_use: operand j_16 = PHI <j_11(5), 100(2)>,
type of def: induction
t.c:4:40: note: j_16 has range [0x0, 0x64]
t.c:4:40: note: === vectorizable_conversion ===
vs.
t.c:4:40: note: ------>vectorizing SLP node starting from: _21 = (float)
j_14;
t.c:4:40: note: vect_is_simple_use: operand j_14 = PHI <j_24(9), 4(11)>, type
of def: induction
Registering value_relation (j_24 != j_14) (bb8) at j_24 = j_14 +
18446744073709551615;
t.c:4:40: note: j_14 has no range info
as analyzed when transforming the epilog. Re-analysis during transform is
problematic, even more so for ranges (since now we have an active ranger).
We need to simply skip this.