On Wed, Mar 4, 2026 at 4:45 AM Andrew Pinski
<[email protected]> wrote:
>
> The problem here is we try calling find_widening_optab_handler_and_mode
> with to_mode=E_USAmode and from_mode=E_UHQmode. This causes an ICE (with 
> checking only).
> The fix is to reject the case where the mode classes are different in 
> convert_plusminus_to_widen
> before even trying to deal with the modes.
>
> Bootstrapped and tested on x86_64-linux-gnu.

OK.

>         PR tree-optimization/119568
>
> gcc/ChangeLog:
>
>         * tree-ssa-math-opts.cc (convert_plusminus_to_widen): Reject different
>         mode classes.
>
> Signed-off-by: Andrew Pinski <[email protected]>
> ---
>  gcc/tree-ssa-math-opts.cc | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/gcc/tree-ssa-math-opts.cc b/gcc/tree-ssa-math-opts.cc
> index bb67dca560b..cd3fd2fc8fb 100644
> --- a/gcc/tree-ssa-math-opts.cc
> +++ b/gcc/tree-ssa-math-opts.cc
> @@ -2982,6 +2982,11 @@ convert_plusminus_to_widen (gimple_stmt_iterator *gsi, 
> gimple *stmt,
>    if (to_mode == from_mode)
>      return false;
>
> +  /* For fixed point types, the mode classes could be different
> +     so reject that case. */
> +  if (GET_MODE_CLASS (from_mode) != GET_MODE_CLASS (to_mode))
> +    return false;
> +
>    from_unsigned1 = TYPE_UNSIGNED (type1);
>    from_unsigned2 = TYPE_UNSIGNED (type2);
>    optype = type1;
> --
> 2.43.0
>

Reply via email to