https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64829

--- Comment #7 from ktkachov at gcc dot gnu.org ---

> 
> Index: gcc/tree-vect-patterns.c
> ===================================================================
> --- gcc/tree-vect-patterns.c    (revision 220205)
> +++ gcc/tree-vect-patterns.c    (working copy)
> @@ -1732,9 +1732,11 @@ vect_recog_widen_shift_pattern (vec<gimp
>    if (TREE_CODE (oprnd0) != SSA_NAME || TREE_CODE (oprnd1) != INTEGER_CST)
>      return NULL;
>  
> -  /* Check operand 0: it has to be defined by a type promotion.  */
> -  if (!type_conversion_p (oprnd0, last_stmt, false, &half_type0, &def_stmt0,
> -                          &promotion)
> +  /* Check operand 0: it has to be defined by a type promotion and it
> +     should be only used by the shift.  */
> +  if (!has_single_use (oprnd0)
> +      || !type_conversion_p (oprnd0, last_stmt, false, &half_type0,
> &def_stmt0,
> +                            &promotion)
>        || !promotion)
>       return NULL;

That fixes the ICE in the testcase for me.
I'll give it a test on arm-none-eabi and an arm bootstrap

Reply via email to