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.

Reply via email to